nx_nofloat_qwen_config_gate.nx source
↩ module page · 94 lines · 6325 B
1// nx_nofloat_qwen_config_gate.nx -- rung 2a: read the REAL Qwen2.5-0.5B config from GGUF metadata.
2// Schema-first before assembling the layer: the no-float forward must use the model's ACTUAL dims, not
3// assumed ones. Reads general.architecture + qwen2.{embedding_length, attention.head_count,
4// attention.head_count_kv, block_count, feed_forward_length, attention.layer_norm_rms_epsilon, rope.freq_base}
5// via the sovereign nx_gguf_meta walker, and asserts the known Qwen2.5-0.5B shape (so the rest of the arc is
6// grounded). No hw writes (Rule 26). expect_exit: 0 license_tier: ORIGINAL
7import "nx_syscalls.nx"
8import "nx_tier.nx"
9import "nx_le.nx"
10import "nx_gguf.nx"
11import "nx_gguf_meta.nx"
12import "nx_gate_verdict.nx"
13
14func cg_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
15func cg_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 }
16func cg_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
17func cg_beq(a: *u8, b: *u8, n: i64) -> i64 { var i: i64=0; while i<n { if a[i]!=b[i] { return 0 } i=i+1 } return 1 }
18
19// find a metadata key + read its UINT32 value; returns -1 if the key is absent.
20func cg_u32(buf: *u8, flen: i64, hdr: *NxGgufHeader, key: *u8) -> i64 {
21 let voff: *i64 = sys_mmap(8) as *i64
22 let vty: *i64 = sys_mmap(8) as *i64
23 let r: nx_int = nx_gguf_meta_find(buf, flen, hdr, key, cg_slen(key), voff, vty)
24 if r != NX_GMETA_OK { return 0 - 1 }
25 return nx_gguf_meta_read_u32(buf, voff[0])
26}
27
28func main() -> i64 {
29 cg_puts("Rung 2a: read the REAL Qwen2.5-0.5B config from GGUF metadata (schema-first, grounds the layer build)\n\n" as *u8)
30 let path: *u8 = "/home/elderwesto/nx_stage/nx_real_model.gguf\x00" as *u8
31 let len_out: *i64 = sys_mmap(8) as *i64
32 len_out[0]=0
33 let buf: *u8 = sys_read_file(path, len_out)
34 var got: i64 = 0
35 if buf != (0 as *u8) { if len_out[0] > 1000 { got = 1 } }
36
37 var arch_ok: i64 = 0
38 var n_embd: i64 = 0
39 var n_heads: i64 = 0
40 var n_kv: i64 = 0
41 var n_layers: i64 = 0
42 var ffn: i64 = 0
43 var head_dim: i64 = 0
44 var eps_q10: i64 = 0
45 var rope_q10: i64 = 0
46 if got == 1 {
47 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader
48 if nx_gguf_parse(buf, len_out[0], hdr) == NX_GGUF_OK {
49 // architecture string == "qwen2"
50 let voff: *i64 = sys_mmap(8) as *i64
51 let vty: *i64 = sys_mmap(8) as *i64
52 let ka: *u8 = "general.architecture\x00" as *u8
53 if nx_gguf_meta_find(buf, len_out[0], hdr, ka, cg_slen(ka), voff, vty) == NX_GMETA_OK {
54 if vty[0] == NX_GGUF_TYPE_STRING {
55 let alen: i64 = nx_gguf_meta_read_string_len(buf, voff[0])
56 let aptr: *u8 = nx_gguf_meta_read_string_ptr(buf, voff[0])
57 if alen == 5 { if cg_beq(aptr, "qwen2" as *u8, 5) == 1 { arch_ok = 1 } }
58 }
59 }
60 n_embd = cg_u32(buf, len_out[0], hdr, "qwen2.embedding_length\x00" as *u8)
61 n_heads = cg_u32(buf, len_out[0], hdr, "qwen2.attention.head_count\x00" as *u8)
62 n_kv = cg_u32(buf, len_out[0], hdr, "qwen2.attention.head_count_kv\x00" as *u8)
63 n_layers = cg_u32(buf, len_out[0], hdr, "qwen2.block_count\x00" as *u8)
64 ffn = cg_u32(buf, len_out[0], hdr, "qwen2.feed_forward_length\x00" as *u8)
65 if n_heads > 0 { head_dim = n_embd / n_heads }
66 // eps + rope base (f32 -> Q10 for display)
67 let ke: *u8 = "qwen2.attention.layer_norm_rms_epsilon\x00" as *u8
68 if nx_gguf_meta_find(buf, len_out[0], hdr, ke, cg_slen(ke), voff, vty) == NX_GMETA_OK { eps_q10 = nx_gguf_meta_read_f32_q10(buf, voff[0]) }
69 let kr: *u8 = "qwen2.rope.freq_base\x00" as *u8
70 if nx_gguf_meta_find(buf, len_out[0], hdr, kr, cg_slen(kr), voff, vty) == NX_GMETA_OK { rope_q10 = nx_gguf_meta_read_f32_q10(buf, voff[0]) }
71 }
72 }
73
74 cg_puts(" arch=qwen2? "); cg_num(arch_ok); cg_puts(" n_embd="); cg_num(n_embd); cg_puts(" n_heads="); cg_num(n_heads); cg_puts(" n_kv_heads="); cg_num(n_kv); cg_puts(" head_dim="); cg_num(head_dim); cg_puts("\n");
75 cg_puts(" n_layers="); cg_num(n_layers); cg_puts(" ffn_dim="); cg_num(ffn); cg_puts(" rms_eps(Q10)="); cg_num(eps_q10); cg_puts(" rope_freq_base(Q10)="); cg_num(rope_q10); cg_puts("\n\n");
76
77 var pass: i64=0
78 var ttl: i64=0
79 ttl=ttl+1; cg_puts(" T1 real model parsed + architecture == qwen2: "); if got==1 { if arch_ok==1 { pass=pass+1; cg_puts("PASS\n") } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") }
80 ttl=ttl+1; cg_puts(" T2 attention dims = Qwen2.5-0.5B (n_embd=896, n_heads=14, n_kv=2): "); if n_embd==896 { if n_heads==14 { if n_kv==2 { pass=pass+1; cg_puts("PASS\n") } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") }
81 ttl=ttl+1; cg_puts(" T3 depth/ffn = Qwen2.5-0.5B (n_layers=24, ffn_dim=4864): "); if n_layers==24 { if ffn==4864 { pass=pass+1; cg_puts("PASS\n") } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") }
82 ttl=ttl+1; cg_puts(" T4 config internally consistent (head_dim=64, n_heads*head_dim=n_embd, GQA n_kv<n_heads): "); if head_dim==64 { if n_heads*head_dim==n_embd { if n_kv<n_heads { pass=pass+1; cg_puts("PASS\n") } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") } } else { cg_puts("FAIL\n") }
83
84 cg_puts("NX-NOFLOAT-QWEN-CONFIG-GATE passed "); cg_num(pass); cg_puts("/"); cg_num(ttl)
85 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check
86 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled
87 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify.
88 let ctr__dry: *i64 = gv_ctr()
89 ctr__dry[0] = pass
90 ctr__dry[1] = ttl
91 let rc__dry: i64 = gv_verdict("NOFLOAT-QWEN-CONFIG-GATE" as *u8, ctr__dry, "real Qwen2.5-0.5B config read from GGUF metadata -- the layer build is now grounded in real dims)" as *u8)
92 sys_exit(rc__dry)
93 return rc__dry
94}