code wiki / _hdl_build / nx_nofloat_serialize_gate.nx

nx_nofloat_serialize_gate.nx source

↩ module page · 84 lines · 5173 B

1// nx_nofloat_serialize_gate.nx -- CAP-NF-SERIALIZE: sovereign model PERSISTENCE (save/load trained weights). 2// You can't deploy a model you can't save -- this is the missing systems piece. Own binary format: 3// [magic][n][WN[0..n-1]][weight arrays raw i64][checksum]. Pure integer, sovereign (sys_openat/read/write only). 4// T1 ROUND-TRIP LOSSLESS: deserialized weights are BIT-IDENTICAL to the originals. 5// T2 INTEGRITY: checksum recomputed from the loaded weights == the stored checksum. 6// T3 TEETH: flipping one loaded value makes the recomputed checksum MISMATCH (corruption is detectable). 7// expect_exit: 0 Sovereign: nx_syscalls only. 8import "nx_syscalls.nx" 9import "nx_gate_emit_lib.nx" 10const MAGIC: i64 = 6219518 // "NVM1"-ish sovereign model magic 11 12 13func dini(a: *i64, n: i64, sd: i64) -> i64 { var i: i64=0; while i<n { a[i]=(((i*7+sd*13+1)%97)-48)*131 + sd*7; i=i+1 } return 0 } 14func wi64(fd: i64, v: i64) -> i64 { let c: *i64=sys_mmap(8) as *i64; c[0]=v; sys_write(fd, c as *u8, 8); return 0 } 15func ri64(fd: i64) -> i64 { let c: *i64=sys_mmap(8) as *i64; sys_read(fd, c as *u8, 8); return c[0] } 16func checksum(W: *i64, WN: *i64, n: i64) -> i64 { var s: i64=0; var i: i64=0; while i<n { let a: *i64=W[i] as *i64; let cn: i64=WN[i]; var c: i64=0; while c<cn { s=s+a[c]; c=c+1 } i=i+1 } return s } 17 18func serialize(path: *u8, W: *i64, WN: *i64, n: i64) -> i64 { 19 let fd: i64=sys_openat_wr(path, 420) 20 if fd<0 { return 0-1 } 21 wi64(fd, MAGIC); wi64(fd, n) 22 var i: i64=0; while i<n { wi64(fd, WN[i]); i=i+1 } // sizes 23 i=0; while i<n { sys_write(fd, W[i] as *u8, WN[i]*8); i=i+1 } // raw weight arrays 24 wi64(fd, checksum(W,WN,n)) // trailing checksum 25 sys_close(fd) 26 return 0 27} 28// loads into freshly-mmap'd arrays; fills W2[]/WN2[]; returns the stored checksum (or -1 on bad magic/open) 29func deserialize(path: *u8, W2: *i64, WN2: *i64, n_expect: i64) -> i64 { 30 let fd: i64=sys_openat_rd(path) 31 if fd<0 { return 0-1 } 32 let magic: i64=ri64(fd); let n: i64=ri64(fd) 33 if magic!=MAGIC { sys_close(fd); return 0-1 } 34 var i: i64=0; while i<n { WN2[i]=ri64(fd); i=i+1 } 35 i=0; while i<n { let a: *i64=sys_mmap(WN2[i]*8) as *i64; sys_read(fd, a as *u8, WN2[i]*8); W2[i]=a as i64; i=i+1 } 36 let chk: i64=ri64(fd) 37 sys_close(fd) 38 return chk 39} 40 41func main() -> i64 { 42 g_puts("nx_nofloat_serialize gate (sovereign model save/load -- weight persistence for deployment)\n" as *u8) 43 let n: i64=4 44 let W: *i64=sys_mmap(n*8) as *i64; let WN: *i64=sys_mmap(n*8) as *i64 45 WN[0]=96; WN[1]=256; WN[2]=256; WN[3]=48 // representative model weight shapes 46 var i: i64=0; while i<n { let a: *i64=sys_mmap(WN[i]*8) as *i64; dini(a,WN[i],i+1); W[i]=a as i64; i=i+1 } 47 let orig_chk: i64=checksum(W,WN,n) 48 49 let path: *u8="knowledge/store/nf_model.bin" as *u8 50 let sok: i64=serialize(path, W, WN, n) 51 52 let W2: *i64=sys_mmap(n*8) as *i64; let WN2: *i64=sys_mmap(n*8) as *i64 53 let stored_chk: i64=deserialize(path, W2, WN2, n) 54 55 // T1: bit-identical round-trip 56 var identical: i64=1; var totvals: i64=0 57 i=0 58 while i<n { if WN2[i]!=WN[i] { identical=0 } else { let a: *i64=W[i] as *i64; let b: *i64=W2[i] as *i64; var c: i64=0; while c<WN[i] { if a[c]!=b[c] { identical=0 } c=c+1 } totvals=totvals+WN[i] } i=i+1 } 59 // T2: integrity (recomputed-from-loaded == stored) 60 let recomp: i64=checksum(W2,WN2,n) 61 var integ: i64=0; if recomp==stored_chk { if stored_chk==orig_chk { integ=1 } } 62 // T3 teeth: corrupt one loaded value -> checksum must change (mismatch detectable) 63 let b0: *i64=W2[0] as *i64; b0[0]=b0[0]+1 64 let corrupt_chk: i64=checksum(W2,WN2,n) 65 var detected: i64=0; if corrupt_chk!=stored_chk { detected=1 } 66 67 g_puts(" [measure] saved="); if sok==0 { g_puts("ok" as *u8) } else { g_puts("FAIL" as *u8) } 68 g_puts(" values="); g_pn(totvals); g_puts(" orig_chk="); g_pn(orig_chk); g_puts(" stored_chk="); g_pn(stored_chk); g_puts(" identical="); g_pn(identical); g_puts("\n") 69 70 var pass: i64=0; var total: i64=0 71 var t1: i64=0; if sok==0 { if identical==1 { t1=1 } } 72 pass=pass+g_check("T1: ROUND-TRIP LOSSLESS -- loaded weights bit-identical to originals" as *u8, t1); total=total+1 73 pass=pass+g_check("T2: INTEGRITY -- checksum(loaded) == stored == original" as *u8, integ); total=total+1 74 pass=pass+g_check("T3: TEETH -- corrupting one loaded value breaks the checksum (corruption detectable)" as *u8, detected); total=total+1 75 76 var okall: i64=0; if pass==total { okall=1 } 77 if okall==1 { 78 let logf: i64=sys_openat_append("knowledge/status/nofloat_serialize.log" as *u8, 420) 79 if logf>=0 { let x0: i64=sys_write(logf,"NOFLOATSERIALIZE model save/load round-trip + checksum measured\n" as *u8,63); sys_close(logf) } 80 } 81 g_puts("---- serialize gate: passed "); g_pn(pass); g_puts(" / "); g_pn(total); g_puts(" ----\n") 82 if okall==1 { g_puts("verdict=GREEN (sovereign model persistence: save->load bit-exact + checksum integrity -- deployable no-float models)\n" as *u8); sys_exit(0); return 0 } 83 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 84}