code wiki / (root) / nx_nofloat_qwen_wload_gate.nx

nx_nofloat_qwen_wload_gate.nx source

↩ module page · 81 lines · 4349 B

1// nx_nofloat_qwen_wload_gate.nx -- exercises the canonical library's by-name Q16 loader over the real model's 2// mixed quant types (F32 norms / Q5_0 q,k,o / Q8_0 v) on blk.0's attention tensors. Logic from nx_nofloat_llm.nx 3// (DRY -- no copy-paste debt). expect_exit: 0 license_tier: ORIGINAL 4import "nx_syscalls.nx" 5import "nx_tier.nx" 6import "nx_le.nx" 7import "nx_tensor.nx" 8import "nx_gguf.nx" 9import "nx_gguf_load.nx" 10import "nx_nofloat_llm.nx" 11import "nx_gate_verdict.nx" 12 13func wl_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 14func wl_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 } 15func wl_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 16 17func main() -> i64 { 18 wl_puts("Library loader test: Qwen tensors BY NAME -> Q16 (F32/Q5_0/Q8_0/Q4_K/Q6_K dispatch) via nx_nofloat_llm\n\n" as *u8) 19 let path: *u8 = "/home/elderwesto/nx_stage/nx_real_model.gguf\x00" as *u8 20 let len_out: *i64 = sys_mmap(8) as *i64 21 len_out[0]=0 22 let buf: *u8 = sys_read_file(path, len_out) 23 24 let names: *i64 = sys_mmap(8*8) as *i64 25 names[0] = "blk.0.attn_norm.weight\x00" as i64 26 names[1] = "blk.0.attn_q.weight\x00" as i64 27 names[2] = "blk.0.attn_k.weight\x00" as i64 28 names[3] = "blk.0.attn_v.weight\x00" as i64 29 names[4] = "blk.0.attn_output.weight\x00" as i64 30 let NN: i64=5 31 32 var found: i64=0 33 var sane: i64=0 34 var det_ok: i64=0 35 let WANT: i64=256 36 let out: *i64 = sys_mmap(WANT*8) as *i64 37 let out2: *i64 = sys_mmap(WANT*8) as *i64 38 if buf != (0 as *u8) { if len_out[0] > 1000 { 39 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader 40 if nx_gguf_parse(buf, len_out[0], hdr) == NX_GGUF_OK { 41 var i: i64=0 42 while i<NN { 43 let nm: *u8 = names[i] as *u8 44 let r: i64 = load_named_q16(buf, hdr, nm, wl_slen(nm), out, WANT) 45 if r>0 { 46 found=found+1 47 var nz: i64=0; var j: i64=0 48 while j<r { if out[j]!=0 { nz=nz+1 } j=j+1 } 49 if nz>=128 { sane=sane+1 } 50 } 51 i=i+1 52 } 53 let nq: *u8 = names[1] as *u8 54 load_named_q16(buf, hdr, nq, wl_slen(nq), out, WANT) 55 load_named_q16(buf, hdr, nq, wl_slen(nq), out2, WANT) 56 var d2: i64=0; var j2: i64=0 57 while j2<WANT { if out[j2]!=out2[j2] { d2=d2+1 } j2=j2+1 } 58 if d2==0 { det_ok=1 } 59 } 60 } } 61 62 wl_puts(" found="); wl_num(found); wl_puts("/"); wl_num(NN); wl_puts(" sane="); wl_num(sane); wl_puts("/"); wl_num(NN); wl_puts(" deterministic="); wl_num(det_ok); wl_puts("\n\n"); 63 64 var pass: i64=0 65 var ttl: i64=0 66 ttl=ttl+1; wl_puts(" T1 all 5 attention tensors loaded BY NAME via the lib's dispatch loader: "); if found==NN { pass=pass+1; wl_puts("PASS\n") } else { wl_puts("FAIL\n") } 67 ttl=ttl+1; wl_puts(" T2 every tensor dequantized to sane integer weights (mixed F32/Q5_0/Q8_0): "); if sane==NN { pass=pass+1; wl_puts("PASS\n") } else { wl_puts("FAIL\n") } 68 ttl=ttl+1; wl_puts(" T3 DETERMINISTIC loader (reload identical): "); if det_ok==1 { pass=pass+1; wl_puts("PASS\n") } else { wl_puts("FAIL\n") } 69 ttl=ttl+1; wl_puts(" T4 logic sourced from the canonical library (no inline copies): "); if found==NN { pass=pass+1; wl_puts("PASS\n") } else { wl_puts("FAIL\n") } 70 71 wl_puts("NX-NOFLOAT-QWEN-WLOAD-GATE passed "); wl_num(pass); wl_puts("/"); wl_num(ttl) 72 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 73 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 74 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 75 let ctr__dry: *i64 = gv_ctr() 76 ctr__dry[0] = pass 77 ctr__dry[1] = ttl 78 let rc__dry: i64 = gv_verdict("NOFLOAT-QWEN-WLOAD-GATE" as *u8, ctr__dry, "the lib's by-name Q16 loader handles the model's mixed quant types -- no copy-paste debt)" as *u8) 79 sys_exit(rc__dry) 80 return rc__dry 81}