code wiki / (root) / nx_nofloat_qwen_config_gate.nx

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}