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}