code wiki / _hdl_build / nx_engineer_wire_test.nx

nx_engineer_wire_test.nx source

↩ module page · 69 lines · 4705 B

1// nx_engineer_wire_test.nx -- the ENGINEER wires the BM25 ranker into the library search and CERTIFIES 2// the swap before it is accepted. It runs the OLD ranker (ls_best, TF-IDF) and the NEW one 3// (ls_best_bm25) over a labelled query set, then checks non-regression + improvement: 4// Q1 "injury" (length-bias) ground-truth = doc0 (short focused). old TF-IDF picks doc1 (diluted, WRONG); 5// BM25 picks doc0 (RIGHT) -> an improvement. 6// Q2 "court" ground-truth = doc3. both rankers pick doc3 -> no regression. 7// Verdict must be WIRED_OK (0 regressions, >=1 improvement). It also proves the gate REJECTS a regressing 8// swap. Exit 0 on 6/6. license_tier: ORIGINAL 9 10import "nx_engineer_wire.nx" 11import "nx_library_search.nx" // ls_best (old TF-IDF) + ls_best_bm25 (new, wired) 12import "nx_research_extract.nx" // re_strlen 13import "nx_syscalls.nx" 14 15func wt_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func wt_num(v: i64) -> i64 { let bb: *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;k=1}; while m>0 {t[k]=48+(m%10); m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(1, bb, k); return 0 } 17 18func main() -> i64 { 19 wt_puts("=== ENGINEER: wire BM25 into the library search, certify the swap ===\n" as *u8) 20 let N: i64 = 4 21 let d0: *u8 = "injury injury" as *u8 22 let d1: *u8 = "injury injury injury f f f f f f f f f" as *u8 23 let d2: *u8 = "settlement settlement filler" as *u8 24 let d3: *u8 = "court court court" as *u8 25 let ptrs: *i64 = sys_mmap(8 * 8) as *i64; let lens: *i64 = sys_mmap(8 * 8) as *i64 26 ptrs[0]=d0 as i64; ptrs[1]=d1 as i64; ptrs[2]=d2 as i64; ptrs[3]=d3 as i64 27 var i: i64 = 0; while i < N { lens[i] = re_strlen(ptrs[i] as *u8); i = i + 1 } 28 29 let q1: *i64 = sys_mmap(4 * 8) as *i64; q1[0]="injury" as *u8 as i64 30 let q2: *i64 = sys_mmap(4 * 8) as *i64; q2[0]="court" as *u8 as i64 31 32 // run both rankers over the query set 33 let old1: i64 = ls_best(ptrs, lens, N, q1, 1) 34 let new1: i64 = ls_best_bm25(ptrs, lens, N, q1, 1) 35 let old2: i64 = ls_best(ptrs, lens, N, q2, 1) 36 let new2: i64 = ls_best_bm25(ptrs, lens, N, q2, 1) 37 38 // ground truth + correctness vectors 39 let gt: *i64 = sys_mmap(4 * 8) as *i64; gt[0]=0; gt[1]=3 // Q1->doc0, Q2->doc3 40 let oldc: *i64 = sys_mmap(4 * 8) as *i64; let newc: *i64 = sys_mmap(4 * 8) as *i64 41 oldc[0]=0; if old1==gt[0] { oldc[0]=1 } ; newc[0]=0; if new1==gt[0] { newc[0]=1 } 42 oldc[1]=0; if old2==gt[1] { oldc[1]=1 } ; newc[1]=0; if new2==gt[1] { newc[1]=1 } 43 44 let regr: i64 = ew_regressions(2, oldc, newc) 45 let impr: i64 = ew_improvements(2, oldc, newc) 46 let verdict: i64 = ew_verdict(regr, impr) 47 let safe: i64 = ew_safe_to_wire(verdict) 48 wt_puts(" Q1 'injury': old(TF-IDF)->doc" as *u8); wt_num(old1); wt_puts(" new(BM25)->doc" as *u8); wt_num(new1); wt_puts(" (gt=doc0)\n" as *u8) 49 wt_puts(" Q2 'court' : old->doc" as *u8); wt_num(old2); wt_puts(" new->doc" as *u8); wt_num(new2); wt_puts(" (gt=doc3)\n" as *u8) 50 wt_puts(" CERTIFY: regressions=" as *u8); wt_num(regr); wt_puts(" improvements=" as *u8); wt_num(impr); wt_puts(" verdict=" as *u8); wt_num(verdict); wt_puts(" (2=WIRED_OK) safe-to-wire=" as *u8); wt_num(safe); wt_puts("\n" as *u8) 51 52 // the gate must REJECT a regressing swap (old right, new wrong) 53 let bo: *i64 = sys_mmap(4 * 8) as *i64; let bn: *i64 = sys_mmap(4 * 8) as *i64 54 bo[0]=1; bo[1]=1; bn[0]=1; bn[1]=0 55 let badv: i64 = ew_verdict(ew_regressions(2, bo, bn), ew_improvements(2, bo, bn)) 56 57 let r: *i64 = sys_mmap(8 * 8) as *i64 58 r[0] = 0; if regr == 0 { r[0] = 1 } // BM25 broke nothing 59 r[1] = 0; if impr >= 1 { r[1] = 1 } // BM25 fixed the length-bias query 60 r[2] = 0; if verdict == EW_OK { r[2] = 1 } // verdict WIRED_OK 61 r[3] = 0; if safe == 1 { r[3] = 1 } // safe to wire 62 r[4] = 0; if badv == EW_REGRESS { if ew_safe_to_wire(badv) == 0 { r[4] = 1 } } // gate rejects a regression 63 r[5] = 0; if new1 == 0 { if new2 == 3 { r[5] = 1 } } // the wired ranker is actually correct on both 64 var pass: i64 = 0; i = 0 65 while i < 6 { pass = pass + r[i]; i = i + 1 } 66 wt_puts("----\n passed " as *u8); wt_num(pass); wt_puts("/6\n" as *u8) 67 if pass == 6 { wt_puts(" WIRED + CERTIFIED: BM25 is now the library search's ranker -- non-regressing, fixes the length bias, and the Engineer's gate would reject any regressing swap.\n" as *u8); sys_exit(0); return 0 } 68 wt_puts(" FAIL\n" as *u8); sys_exit(1); return 1 69}