nx_nofloat_olmoe_forward_gate.nx source
↩ module page · 295 lines · 15045 B
1// nx_nofloat_olmoe_forward_gate.nx -- MoE rung 5 (2026-07-15): a COMPLETE OLMoE forward -- 16 stacked
2// real layers + token embedding + final norm + LM head -> a REAL next-token from the real 64-expert model,
3// in deterministic no-float. Lazy per-layer weight load (attn set into REUSED buffers; experts lazy) over
4// the zero-copy mmap. Composes every eaten-debt piece: full-quant dequant, exact scale, real rope base 1e4,
5// sys_map_file, nolmoe_attn/nolmoe_moe (rung 4). Teeth:
6// T1 TOKENIZER round-trip: encode(prompt) -> decode == prompt (our BPE self-consistent on OLMoE's gpt2 vocab)
7// T2 NON-DEGENERATE logits: argmax logit strictly > min logit (the head discriminates, not all-equal)
8// T3 DETERMINISM: the full forward's predicted id + top logit byte-identical on repeat
9// T4 ROUTING ALIVE AT DEPTH: >=2 distinct expert-masks seen across the 16 layers' last-token routing
10// T5 PREDICTION real: a valid non-negative vocab id, decoded + printed (honest: OUR segmentation, uniform
11// Q16 -- HF-canonical BPE + q24 precision + H2H = rung 6, deliberately not claimed here)
12// Requires the OLMoE gguf. Heavy (~1-3 min: 16 layers x lazy dequant + 50304-row head). Return from main.
13// No hw writes (Rule 26). expect_exit: 0 license_tier: ORIGINAL
14import "nx_syscalls.nx"
15import "nx_tier.nx"
16import "nx_le.nx"
17import "nx_tensor.nx"
18import "nx_gguf.nx"
19import "nx_gguf_load.nx"
20import "nx_gguf_meta.nx"
21import "nx_nofloat_llm.nx"
22import "nx_nofloat_tok.nx"
23import "nx_nofloat_arch.nx"
24import "nx_nofloat_olmoe.nx"
25import "nx_gate_verdict.nx"
26import "nx_stage_path.nx"
27
28func of_w(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
29func of_n(v: i64) -> i64 {
30 var m: i64 = v
31 if m < 0 { of_w("-" as *u8); m = 0 - m }
32 let t: *u8 = sys_mmap(24)
33 var k: i64 = 0
34 if m == 0 { t[0] = 48 as u8; k = 1 }
35 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
36 let o: *u8 = sys_mmap(24)
37 var i: i64 = 0
38 while i < k { o[i] = t[k - 1 - i]; i = i + 1 }
39 sys_write(1, o, k)
40 return 0
41}
42func of_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
43// load blk.L.<suffix> (full 2-D tensor) into out (Q16)
44func of_load_blk(buf: *u8, hdr: *NxGgufHeader, L: i64, suffix: *u8, out: *i64, nvals: i64) -> i64 {
45 let nm: *u8 = sys_mmap(64)
46 build_name(nm, L, suffix)
47 let idx: nx_int = nx_gguf_find_tensor(hdr, nm, of_slen(nm))
48 if idx < 0 { return 0 - 1 }
49 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx)
50 let hl: *NxGgufHeader = hdr
51 return dequant_to_q16(buf, hl.data_off + ti.offset, ti.ggml_type, nvals, out)
52}
53func of_expbase_blk(buf: *u8, hdr: *NxGgufHeader, L: i64, suffix: *u8, eb: *i64, slot: i64) -> i64 {
54 let nm: *u8 = sys_mmap(64)
55 build_name(nm, L, suffix)
56 let idx: nx_int = nx_gguf_find_tensor(hdr, nm, of_slen(nm))
57 if idx < 0 { return 0 - 1 }
58 let ti: *NxGgufTensorInfo = nx_gguf_tensor_at(hdr, idx)
59 let hl: *NxGgufHeader = hdr
60 eb[slot] = hl.data_off + ti.offset
61 eb[slot + 1] = ti.ggml_type
62 return 0
63}
64
65func main() -> i64 {
66 of_w("=== NX-NOFLOAT-OLMOE-FORWARD -- full 16-layer OLMoE forward -> real next-token (no-float) ===\n" as *u8)
67 let ln: *i64 = sys_mmap(8) as *i64
68 ln[0] = 0
69 let buf: *u8 = sys_map_file(sp_guarded("NOFLOAT-OLMOE-FORWARD-GATE" as *u8, "nx_moe_model.gguf" as *u8), ln)
70 if (buf as i64) == 0 { of_w("MODEL ABSENT\n" as *u8); return 1 }
71 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader
72 if nx_gguf_parse(buf, ln[0], hdr) != NX_GGUF_OK { of_w("PARSE FAIL\n" as *u8); return 1 }
73 let hloc: *NxGgufHeader = hdr
74 let cfg: *i64 = sys_mmap(16*8) as *i64
75 let arch: *u8 = sys_mmap(48)
76 if nac_read_config(buf, ln[0], hdr, cfg, arch) != 0 { of_w("ARCH FAIL\n" as *u8); return 1 }
77 let D: i64 = cfg[0]
78 let NL: i64 = cfg[1]
79 let nh: i64 = cfg[2]
80 let hd: i64 = cfg[4]
81 let scale: i64 = cfg[8]
82 let ff: i64 = cfg[7]
83 let E: i64 = 64
84 let K: i64 = 8
85
86 // tokenizer meta
87 let voff: *i64 = sys_mmap(8) as *i64
88 let vty: *i64 = sys_mmap(8) as *i64
89 var mfirst: i64 = 0
90 var nm_c: i64 = 0
91 var vfirst: i64 = 0
92 var vocab: i64 = 0
93 let km: *u8 = "tokenizer.ggml.merges" as *u8
94 let kt: *u8 = "tokenizer.ggml.tokens" as *u8
95 if nx_gguf_meta_find(buf, ln[0], hdr, km, of_slen(km), voff, vty) == NX_GMETA_OK { nm_c = nx_gguf_meta_array_count(buf, voff[0]); mfirst = nx_gguf_meta_array_first_elt_off(buf, voff[0]) }
96 if nx_gguf_meta_find(buf, ln[0], hdr, kt, of_slen(kt), voff, vty) == NX_GMETA_OK { vocab = nx_gguf_meta_array_count(buf, voff[0]); vfirst = nx_gguf_meta_array_first_elt_off(buf, voff[0]) }
97 of_w("[cfg] olmoe D=" as *u8); of_n(D); of_w(" layers=" as *u8); of_n(NL); of_w(" heads=" as *u8); of_n(nh); of_w(" ff=" as *u8); of_n(ff); of_w(" vocab=" as *u8); of_n(vocab); of_w(" base=" as *u8); of_n(cfg[9]); of_w("\n" as *u8)
98
99 // ---- T1: tokenizer round-trip ----
100 let prompt: *u8 = "The capital of France is" as *u8
101 let plen: i64 = of_slen(prompt)
102 let MAXT: i64 = 32
103 let ids: *i64 = sys_mmap(MAXT*8) as *i64
104 let tokp: *i64 = sys_mmap(512*8) as *i64
105 let tokl: *i64 = sys_mmap(512*8) as *i64
106 let np: i64 = tk_bpe_encode(buf, mfirst, nm_c, vfirst, vocab, prompt, plen, tokp, tokl, ids)
107 of_w("[tok] '" as *u8); of_w(prompt); of_w("' -> " as *u8); of_n(np); of_w(" ids:" as *u8)
108 var ti0: i64 = 0
109 while ti0 < np { of_w(" " as *u8); of_n(ids[ti0]); ti0 = ti0 + 1 }
110 of_w("\n" as *u8)
111 // decode concat == prompt bytes?
112 let rt: *u8 = sys_mmap(256)
113 var rn: i64 = 0
114 var di: i64 = 0
115 while di < np {
116 let off: i64 = tk_decode_off(buf, vfirst, ids[di])
117 let pl: i64 = nx_gguf_meta_read_string_len(buf, off)
118 let pp: *u8 = nx_gguf_meta_read_string_ptr(buf, off)
119 var b: i64 = 0
120 while b < pl { rt[rn] = pp[b]; rn = rn + 1; b = b + 1 }
121 di = di + 1
122 }
123 // OLMoE gpt2 byte-level: a leading space becomes 0xC4 0xA0; compare the DECODED-BYTE-LEVEL form to the
124 // byte-level-encoded prompt for a fair self-consistency check (encode's own byte map -> decode inverts it).
125 var t1ok: i64 = 1
126 // reconstruct expected byte-level string of the prompt
127 let exp: *u8 = sys_mmap(256)
128 var en: i64 = 0
129 var pi: i64 = 0
130 while pi < plen { en = en + tk_byte_char(prompt[pi] as i64, ((exp as i64) + en) as *u8); pi = pi + 1 }
131 if rn != en { t1ok = 0 } else { var c: i64 = 0; while c < rn { if rt[c] != exp[c] { t1ok = 0 } c = c + 1 } }
132
133 // ---- embed prompt ----
134 let te_i: nx_int = nx_gguf_find_tensor(hdr, "token_embd.weight" as *u8, 17)
135 let on_i: nx_int = nx_gguf_find_tensor(hdr, "output_norm.weight" as *u8, 18)
136 let oh_i: nx_int = nx_gguf_find_tensor(hdr, "output.weight" as *u8, 13)
137 if te_i < 0 { return 1 } if on_i < 0 { return 1 } if oh_i < 0 { return 1 }
138 let te: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, te_i)
139 let te_base: i64 = hloc.data_off + te.offset
140 let te_ty: i64 = te.ggml_type
141 let oh: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, oh_i)
142 let oh_base: i64 = hloc.data_off + oh.offset
143 let oh_ty: i64 = oh.ggml_type
144 let gOut: *i64 = sys_mmap(D*8) as *i64
145 let on: *NxGgufTensorInfo = nx_gguf_tensor_at(hloc, on_i)
146 dequant_to_q16(buf, hloc.data_off + on.offset, on.ggml_type, D, gOut)
147
148 let tmp: *i64 = sys_mmap(64*256*8) as *i64
149 let x: *i64 = sys_mmap(MAXT*D*8) as *i64
150 var ei: i64 = 0
151 while ei < np { dequant_row(buf, te_base, te_ty, ids[ei], D, ((x as i64) + ei*D*8) as *i64, tmp); ei = ei + 1 }
152
153 // ---- per-layer weight buffers (reused) + scratch ----
154 let gA: *i64 = sys_mmap(D*8) as *i64
155 let gQ: *i64 = sys_mmap(D*8) as *i64
156 let gK: *i64 = sys_mmap(D*8) as *i64
157 let gF: *i64 = sys_mmap(D*8) as *i64
158 let Wq: *i64 = sys_mmap(D*D*8) as *i64
159 let Wk: *i64 = sys_mmap(D*D*8) as *i64
160 let Wv: *i64 = sys_mmap(D*D*8) as *i64
161 let Wo: *i64 = sys_mmap(D*D*8) as *i64
162 let Wr: *i64 = sys_mmap(E*D*8) as *i64
163 let eb: *i64 = sys_mmap(8*8) as *i64
164 let freqs: *i64 = sys_mmap((hd/2)*8) as *i64
165 rope_freqs_base(freqs, hd, cfg[11])
166 let attnout: *i64 = sys_mmap(MAXT*D*8) as *i64
167 let xmid: *i64 = sys_mmap(MAXT*D*8) as *i64
168 let moeout: *i64 = sys_mmap(MAXT*D*8) as *i64
169 let ascr: *i64 = sys_mmap((4*MAXT*D + 2*MAXT + MAXT*D + 64)*8) as *i64
170 let mscr: *i64 = sys_mmap((D + E + 2*K + 2*ff*D + D*ff + 3*ff + D + 64)*8) as *i64
171 let cnt: *i64 = sys_mmap(E*8) as *i64
172 let ap: *i64 = sys_mmap(16*8) as *i64
173 let mp: *i64 = sys_mmap(16*8) as *i64
174 let lastmask: *i64 = sys_mmap(MAXT*8) as *i64 // per-layer last-token expert mask
175
176 let normed: *i64 = sys_mmap(D*8) as *i64
177 let hrow: *i64 = sys_mmap(D*8) as *i64
178 let pred: *i64 = sys_mmap(8) as *i64
179 let toplg: *i64 = sys_mmap(8) as *i64
180 let minlg: *i64 = sys_mmap(8) as *i64
181
182 var distinct_masks: i64 = 0
183 var run: i64 = 0
184 var predA: i64 = 0
185 var topA: i64 = 0
186 while run < 2 {
187 // fresh embed each run (x is overwritten by layers)
188 ei = 0
189 while ei < np { dequant_row(buf, te_base, te_ty, ids[ei], D, ((x as i64) + ei*D*8) as *i64, tmp); ei = ei + 1 }
190 var seenmask: i64 = 0
191 var L: i64 = 0
192 while L < NL {
193 of_load_blk(buf, hdr, L, ".attn_norm.weight\x00" as *u8, gA, D)
194 of_load_blk(buf, hdr, L, ".attn_q_norm.weight\x00" as *u8, gQ, D)
195 of_load_blk(buf, hdr, L, ".attn_k_norm.weight\x00" as *u8, gK, D)
196 of_load_blk(buf, hdr, L, ".ffn_norm.weight\x00" as *u8, gF, D)
197 of_load_blk(buf, hdr, L, ".attn_q.weight\x00" as *u8, Wq, D*D)
198 of_load_blk(buf, hdr, L, ".attn_k.weight\x00" as *u8, Wk, D*D)
199 of_load_blk(buf, hdr, L, ".attn_v.weight\x00" as *u8, Wv, D*D)
200 of_load_blk(buf, hdr, L, ".attn_output.weight\x00" as *u8, Wo, D*D)
201 of_load_blk(buf, hdr, L, ".ffn_gate_inp.weight\x00" as *u8, Wr, E*D)
202 of_expbase_blk(buf, hdr, L, ".ffn_gate_exps.weight\x00" as *u8, eb, 0)
203 of_expbase_blk(buf, hdr, L, ".ffn_up_exps.weight\x00" as *u8, eb, 2)
204 of_expbase_blk(buf, hdr, L, ".ffn_down_exps.weight\x00" as *u8, eb, 4)
205 ap[0]=x as i64; ap[1]=attnout as i64; ap[2]=np; ap[3]=D; ap[4]=nh; ap[5]=hd; ap[6]=scale
206 ap[7]=gA as i64; ap[8]=Wq as i64; ap[9]=Wk as i64; ap[10]=Wv as i64; ap[11]=Wo as i64
207 ap[12]=gQ as i64; ap[13]=gK as i64; ap[14]=freqs as i64; ap[15]=ascr as i64
208 nolmoe_attn(ap)
209 var d: i64 = 0
210 while d < np*D { xmid[d] = x[d] + attnout[d]; d = d + 1 }
211 var cz: i64 = 0
212 while cz < E { cnt[cz] = 0; cz = cz + 1 }
213 mp[0]=xmid as i64; mp[1]=moeout as i64; mp[2]=np; mp[3]=D; mp[4]=ff; mp[5]=E; mp[6]=K
214 mp[7]=gF as i64; mp[8]=Wr as i64; mp[9]=buf as i64; mp[10]=eb as i64; mp[11]=mscr as i64; mp[12]=cnt as i64
215 nolmoe_moe(mp)
216 d = 0
217 while d < np*D { x[d] = xmid[d] + moeout[d]; d = d + 1 }
218 // record last-token routing mask for this layer (re-route just the last token)
219 var cz2: i64 = 0
220 while cz2 < E { cnt[cz2] = 0; cz2 = cz2 + 1 }
221 mp[0]=((xmid as i64) + (np-1)*D*8); mp[1]=moeout as i64; mp[2]=1
222 nolmoe_moe(mp)
223 var msk: i64 = 0
224 cz2 = 0
225 while cz2 < E { if cnt[cz2] > 0 { msk = msk | (1 << cz2) } cz2 = cz2 + 1 }
226 if run == 0 { lastmask[L] = msk }
227 L = L + 1
228 }
229 // final norm on the last token + streamed head argmax
230 rmsnorm_gamma_row(x, gOut, (np-1)*D, D, normed, 0)
231 var best: i64 = 0
232 var bestv: i64 = 0 - 9223372036854775807
233 var worst: i64 = 9223372036854775807
234 var v: i64 = 0
235 while v < vocab {
236 dequant_row(buf, oh_base, oh_ty, v, D, hrow, tmp)
237 var s: i64 = 0
238 var kk: i64 = 0
239 while kk < D { s = s + (normed[kk] * hrow[kk]); kk = kk + 1 }
240 let lg: i64 = s >> 16
241 if lg > bestv { bestv = lg; best = v }
242 if lg < worst { worst = lg }
243 v = v + 1
244 }
245 if run == 0 { predA = best; topA = bestv; toplg[0] = bestv; minlg[0] = worst; pred[0] = best }
246 if run == 1 { pred[1] = best; toplg[1] = bestv }
247 run = run + 1
248 }
249 // distinct masks across layers
250 var L2: i64 = 0
251 while L2 < NL {
252 var seen: i64 = 0
253 var L3: i64 = 0
254 while L3 < L2 { if lastmask[L3] == lastmask[L2] { seen = 1 } L3 = L3 + 1 }
255 if seen == 0 { distinct_masks = distinct_masks + 1 }
256 L2 = L2 + 1
257 }
258
259 of_w("[fwd] predicted next id=" as *u8); of_n(predA); of_w(" piece='" as *u8)
260 let po: i64 = tk_decode_off(buf, vfirst, predA)
261 let ppl: i64 = nx_gguf_meta_read_string_len(buf, po)
262 if ppl > 0 { sys_write(1, nx_gguf_meta_read_string_ptr(buf, po), ppl) }
263 of_w("' top_logit=" as *u8); of_n(topA); of_w(" min_logit=" as *u8); of_n(minlg[0]); of_w(" distinct-layer-masks=" as *u8); of_n(distinct_masks); of_w("\n" as *u8)
264
265 var pass: i64 = 0
266 var ttl: i64 = 0
267 ttl = ttl + 1
268 of_w(" T1 tokenizer round-trip (encode->decode == byte-level prompt): " as *u8)
269 if t1ok == 1 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) }
270 ttl = ttl + 1
271 of_w(" T2 non-degenerate logits (top " as *u8); of_n(topA); of_w(" > min " as *u8); of_n(minlg[0]); of_w("): " as *u8)
272 if topA > minlg[0] { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) }
273 ttl = ttl + 1
274 var detok: i64 = 0
275 if pred[0] == pred[1] { if toplg[0] == toplg[1] { detok = 1 } }
276 of_w(" T3 full-forward determinism (pred+logit identical on repeat): " as *u8)
277 if detok == 1 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) }
278 ttl = ttl + 1
279 of_w(" T4 routing alive at depth (distinct layer masks " as *u8); of_n(distinct_masks); of_w(">=2): " as *u8)
280 if distinct_masks >= 2 { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) }
281 ttl = ttl + 1
282 of_w(" T5 prediction is a valid vocab id: " as *u8)
283 if predA >= 0 { if predA < vocab { pass = pass + 1; of_w("PASS\n" as *u8) } else { of_w("FAIL\n" as *u8) } } else { of_w("FAIL\n" as *u8) }
284
285 of_w("NX-NOFLOAT-OLMOE-FORWARD-GATE passed " as *u8); of_n(pass); of_w("/" as *u8); of_n(ttl)
286 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
287 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
288 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
289 let ctr__dry: *i64 = gv_ctr()
290 ctr__dry[0] = pass
291 ctr__dry[1] = ttl
292 let rc__dry: i64 = gv_verdict("NOFLOAT-OLMOE-FORWARD-GATE" as *u8, ctr__dry, "real 16-layer OLMoE forward -> next-token, deterministic no-float integer)" as *u8)
293 sys_exit(rc__dry)
294 return rc__dry
295}