nx_llm_route_gate.nx source
↩ module page · 90 lines · 5841 B
1// nx_llm_route_gate.nx -- the REFEREE for companionchat CC6 (go_llm_route in nx_llm_route.nx): a route row selects a backend
2// by trigger, first row wins, case-insensitive, `*` is a default; no conf / no match / malformed target = NO ROUTE; the
3// prepend puts the routed backend first without losing the local candidates; the provenance label names what answered.
4// GPU-free, in-process, fixture confs under /tmp/<gate>/ written at run time (never a checked-in fixture).
5// license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7import "nx_gate_verdict.nx"
8import "nx_llm_route.nx"
9
10const LG_DIR: *u8 = "/tmp/nx_llm_route_gate" as *u8
11const LG_CONF: *u8 = "/tmp/nx_llm_route_gate/routes.conf" as *u8
12const LG_CONF_DEFAULT: *u8 = "/tmp/nx_llm_route_gate/routes_default.conf" as *u8
13const LG_CONF_BAD: *u8 = "/tmp/nx_llm_route_gate/routes_bad.conf" as *u8
14const LG_CONF_ABSENT: *u8 = "/tmp/nx_llm_route_gate/does_not_exist.conf" as *u8
15const LG_MODE_DIR: i64 = 511
16const LG_MODE_FILE: i64 = 420
17const LG_ROWS: *u8 = "# fixture routes\ndeep|think hard|10.9.8.7|5000\nfast|quick|10.9.8.6|5001\n" as *u8
18const LG_ROWS_DEFAULT: *u8 = "every|*|10.9.8.5|5002\n" as *u8
19const LG_ROWS_BAD: *u8 = "broken|think hard|10.9.8.999|5000\n" as *u8
20
21func lg_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
22func lg_eq(a: *u8, b: *u8) -> i64 { var i: i64 = 0; while a[i] == b[i] { if a[i] == (0 as u8) { return 1 } i = i + 1 } return 0 }
23func lg_write(path: *u8, body: *u8) -> i64 {
24 let fd: i64 = sys_openat_wr(path, LG_MODE_FILE)
25 if fd < 0 { return 0 - 1 }
26 sys_write(fd, body, lg_len(body))
27 sys_close(fd)
28 return 0
29}
30
31func main() -> i64 {
32 gv_head("nx_llm_route_gate -- CC6: a data row routes a turn to a stronger backend first, never silently, never on a guess" as *u8)
33 let ctr: *i64 = gv_ctr()
34 sys_mkdir(LG_DIR, LG_MODE_DIR)
35 sys_unlinkat(LG_CONF_ABSENT)
36 let w1: i64 = lg_write(LG_CONF, LG_ROWS)
37 let w2: i64 = lg_write(LG_CONF_DEFAULT, LG_ROWS_DEFAULT)
38 let w3: i64 = lg_write(LG_CONF_BAD, LG_ROWS_BAD)
39 gv_check("setup-fixture-confs-written" as *u8, (w1 == 0) & (w2 == 0) & (w3 == 0), ctr)
40
41 let tag: *u8 = sys_mmap(64)
42 let w: *i64 = sys_mmap(8 * 8) as *i64
43
44 // T1 the trigger selects its row and the target parses
45 let m1: *u8 = "could you think hard about this one" as *u8
46 let r1: i64 = go_llm_route_from(LG_CONF, m1, lg_len(m1), tag, w)
47 gv_check("trigger-word-routes-to-its-row" as *u8, (r1 == 1) & (lg_eq(tag, "deep" as *u8) == 1), ctr)
48 gv_check("routed-target-parses-host-and-port" as *u8, (w[0] == 10) & (w[1] == 9) & (w[2] == 8) & (w[3] == 7) & (w[4] == 5000), ctr)
49
50 // T2 case-insensitive, and first row wins when two triggers are present
51 let m2: *u8 = "THINK HARD but be quick" as *u8
52 let r2: i64 = go_llm_route_from(LG_CONF, m2, lg_len(m2), tag, w)
53 gv_check("match-is-case-insensitive" as *u8, (r2 == 1) & (lg_eq(tag, "deep" as *u8) == 1), ctr)
54 let m2b: *u8 = "just a quick one" as *u8
55 let r2b: i64 = go_llm_route_from(LG_CONF, m2b, lg_len(m2b), tag, w)
56 gv_check("second-row-reachable-when-first-does-not-match" as *u8, (r2b == 1) & (lg_eq(tag, "fast" as *u8) == 1) & (w[4] == 5001), ctr)
57
58 // T3 NEG-CONTROLS: no trigger in the turn, no conf at all, malformed target -- all NO ROUTE
59 let m3: *u8 = "hello there" as *u8
60 gv_check("neg-control-no-trigger-means-no-route" as *u8, go_llm_route_from(LG_CONF, m3, lg_len(m3), tag, w) == 0, ctr)
61 gv_check("neg-control-absent-conf-means-no-route" as *u8, go_llm_route_from(LG_CONF_ABSENT, m1, lg_len(m1), tag, w) == 0, ctr)
62 gv_check("neg-control-malformed-target-means-no-route-not-a-guess" as *u8, go_llm_route_from(LG_CONF_BAD, m1, lg_len(m1), tag, w) == 0, ctr)
63 gv_check("neg-control-empty-turn-means-no-route" as *u8, go_llm_route_from(LG_CONF, m1, 0, tag, w) == 0, ctr)
64
65 // T4 the star row is a default route for every turn
66 let r4: i64 = go_llm_route_from(LG_CONF_DEFAULT, m3, lg_len(m3), tag, w)
67 gv_check("star-trigger-routes-every-turn" as *u8, (r4 == 1) & (lg_eq(tag, "every" as *u8) == 1) & (w[4] == 5002), ctr)
68
69 // T5 prepend puts the route first and keeps the locals behind it, in order
70 let wa: *i64 = sys_mmap(8 * 8) as *i64; let wb: *i64 = sys_mmap(8 * 8) as *i64; let wc: *i64 = sys_mmap(8 * 8) as *i64
71 let wd: *i64 = sys_mmap(8 * 8) as *i64; let wpa: *i64 = sys_mmap(8 * 8) as *i64
72 wa[0] = 192; wb[0] = 168; wc[0] = 8; wd[0] = 192; wpa[0] = 7861
73 let rw: *i64 = sys_mmap(8 * 8) as *i64
74 rw[0] = 10; rw[1] = 9; rw[2] = 8; rw[3] = 7; rw[4] = 5000
75 let nc: i64 = go_llm_route_prepend(rw, wa, wb, wc, wd, wpa, 1)
76 gv_check("prepend-puts-the-route-first-and-keeps-the-local-behind" as *u8, (nc == 2) & (wpa[0] == 5000) & (wpa[1] == 7861) & (wd[1] == 192), ctr)
77
78 // T6 provenance labels name what answered
79 let lb: *u8 = sys_mmap(128)
80 var o: i64 = go_llm_route_label(0, 0, "deep" as *u8, lb, 0); lb[o] = 0 as u8
81 gv_check("label-local-when-nothing-routed" as *u8, lg_eq(lb, "local" as *u8) == 1, ctr)
82 o = go_llm_route_label(1, 0, "deep" as *u8, lb, 0); lb[o] = 0 as u8
83 gv_check("label-names-the-route-when-it-answered" as *u8, lg_eq(lb, "deep" as *u8) == 1, ctr)
84 o = go_llm_route_label(1, 1, "deep" as *u8, lb, 0); lb[o] = 0 as u8
85 gv_check("label-names-the-fallback-when-the-local-answered" as *u8, lg_eq(lb, "deep-fallback-local" as *u8) == 1, ctr)
86 o = go_llm_route_label(1, 0 - 1, "deep" as *u8, lb, 0); lb[o] = 0 as u8
87 gv_check("label-names-unanswered-when-nobody-did" as *u8, lg_eq(lb, "deep-unanswered" as *u8) == 1, ctr)
88
89 return gv_verdict("LLM-ROUTE-GATE" as *u8, ctr, "CC6 done-rule: route table as data, first match wins, no conf or malformed row refuses to route, route first then local, provenance labels every answer" as *u8)
90}