nx_coder_gen_f32.nx source
↩ module page · 144 lines · 5257 B
1// nx_coder_gen_f32.nx -- L3b runner: F32 REFERENCE tower greedy generation on the CODER weights.
2// Mirrors nx_f32_llm_live_gen_test's proven flow (dims -> weights v4 -> BPE -> greedy run_v3) on
3// /home/elderwesto/nx_stage/nx_coder_model.gguf, two fixed prompts, 8 tokens each; writes the
4// SAME neutral line format as the no-float runner to /tmp/coder_gen_f32.txt for byte-compare.
5// license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7import "nx_tier.nx"
8import "nx_bpe.nx"
9import "nx_gguf.nx"
10import "nx_gguf_load.nx"
11import "nx_gguf_meta.nx"
12import "nx_f32.nx"
13import "nx_f32_kv_cache.nx"
14import "nx_f32_lazy_weight.nx"
15import "nx_f32_llama_block.nx"
16import "nx_f32_llama_block_v4.nx"
17import "nx_f32_llama_stack_v4.nx"
18import "nx_f32_llama_layer_lazy_load.nx"
19import "nx_f32_llm.nx"
20import "nx_f32_llm_v4.nx"
21import "nx_f32_llm_read_dims.nx"
22import "nx_f32_bpe_load.nx"
23import "nx_f32_llm_special_tokens.nx"
24import "nx_f32_sampler.nx"
25import "nx_f32_llm_run_v2.nx"
26import "nx_f32_llm_run_v3.nx"
27const K_MAGIC_8192: i64 = 8192
28const K_MAGIC_4000: i64 = 4000
29const K_MAGIC_67108864: i64 = 67108864
30const K_MAGIC_262144: i64 = 262144
31const K_MAGIC_524288: i64 = 524288
32
33func cf_wb(fd: i64, p: *u8, n: i64) -> i64 {
34 var off: i64 = 0
35 while off < n {
36 let q: *u8 = p + off
37 let rem: i64 = n - off
38 let w: i64 = sys_write(fd, q, rem)
39 if w <= 0 { return 0 - 1 }
40 off = off + w
41 }
42 return 0
43}
44
45func cf_ws(fd: i64, s: *u8) -> i64 {
46 var n: i64 = 0
47 while s[n] != (0 as u8) { n = n + 1 }
48 let r: i64 = cf_wb(fd, s, n)
49 return r
50}
51
52func cf_wdec(fd: i64, v: i64) -> i64 {
53 let b: *u8 = sys_mmap(28) as *u8
54 let t: *u8 = sys_mmap(28) as *u8
55 var m: i64 = v
56 if m < 0 { cf_ws(fd, "-" as *u8); m = 0 - m }
57 var k: i64 = 0
58 if m == 0 { t[0] = 48 as u8; k = 1 }
59 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
60 var i: i64 = 0
61 while i < k { b[i] = t[k - 1 - i]; i = i + 1 }
62 cf_wb(fd, b, k)
63 return 0
64}
65
66func cf_wtext(fd: i64, p: *u8, n: i64) -> i64 {
67 let o: *u8 = sys_mmap(K_MAGIC_8192) as *u8
68 var i: i64 = 0
69 var cap: i64 = n
70 if cap > K_MAGIC_4000 { cap = K_MAGIC_4000 }
71 while i < cap {
72 let c: i64 = p[i] as i64
73 var v: i64 = c
74 if c < 32 { v = 46 }
75 if c > 126 { v = 46 }
76 o[i] = v as u8
77 i = i + 1
78 }
79 cf_wb(fd, o, cap)
80 return 0
81}
82
83func main() -> i64 {
84 let path: *u8 = "/home/elderwesto/nx_stage/nx_coder_model.gguf\x00" as *u8
85 let len_out: *i64 = sys_mmap(8) as *i64
86 let buf: *u8 = sys_read_file(path, len_out)
87 if buf == (0 as *u8) { sys_exit(10); return 10 }
88 let hdr: *NxGgufHeader = sys_mmap(NX_GGUF_HDR_BYTES) as *NxGgufHeader
89 if nx_gguf_parse(buf, len_out[0], hdr) != NX_GGUF_OK { sys_exit(20); return 20 }
90 let model: *NxF32LlamaModel = nx_f32_llama_model_alloc()
91 let out_err: *i64 = sys_mmap(8) as *i64
92 if nx_f32_llm_read_dims_from_gguf(buf, len_out[0], hdr, model, out_err) != NX_FLD_OK { sys_exit(30); return 30 }
93 if nx_f32_llm_load_weights_v4_from_gguf(buf, hdr, model, out_err) != NX_FLV4_OK { sys_exit(40); return 40 }
94 let vocab: *NxBpeVocab = nx_bpe_vocab_new(K_MAGIC_67108864, K_MAGIC_262144, K_MAGIC_524288)
95 let nt: *i64 = sys_mmap(8) as *i64
96 let nm: *i64 = sys_mmap(8) as *i64
97 let bpe_v: nx_int = nx_f32_bpe_load_from_gguf(buf, len_out[0], hdr, vocab, nt, nm, out_err)
98 if bpe_v != NX_FBL_OK { sys_exit(50); return 50 }
99 let eos: nx_int = nx_f32_llm_read_eos(buf, len_out[0], hdr)
100 let cfg: *NxF32SamplerCfg = nx_f32_sampler_cfg_alloc()
101 let eps: i64 = 0x358637BD
102 let attn_scale: i64 = 0x3E000000
103 let rope_base: i64 = 0x415D0EAB
104 let fd: i64 = sys_openat_wr("knowledge/forge/coder_gen_f32.txt" as *u8, 420)
105 if fd < 0 { sys_exit(2); return 2 }
106 // p1
107 let cache1: *NxF32KVCache = nx_f32_kv_cache_alloc(model.n_layers, model.n_kv_heads, 64, model.head_dim)
108 let prng1: *i64 = sys_mmap(8) as *i64
109 prng1[0] = 1
110 let outb1: *u8 = sys_mmap(K_MAGIC_8192) as *u8
111 let n1: nx_int = nx_f32_llm_run_v3(model, vocab, cache1, "Hi\x00" as *u8, 2, 8, cfg, eps, attn_scale, rope_base, 1, prng1, eos, outb1, K_MAGIC_8192)
112 cf_ws(fd, "GEN p1 tl=" as *u8)
113 let n1i: i64 = n1 as i64
114 cf_wdec(fd, n1i)
115 cf_ws(fd, " text=[" as *u8)
116 if n1i > 0 { cf_wtext(fd, outb1, n1i) }
117 cf_ws(fd, "]\n" as *u8)
118 // p2
119 let cache2: *NxF32KVCache = nx_f32_kv_cache_alloc(model.n_layers, model.n_kv_heads, 64, model.head_dim)
120 let prng2: *i64 = sys_mmap(8) as *i64
121 prng2[0] = 1
122 let outb2: *u8 = sys_mmap(K_MAGIC_8192) as *u8
123 let n2: nx_int = nx_f32_llm_run_v3(model, vocab, cache2, "func add(a\x00" as *u8, 10, 8, cfg, eps, attn_scale, rope_base, 1, prng2, eos, outb2, K_MAGIC_8192)
124 cf_ws(fd, "GEN p2 tl=" as *u8)
125 let n2i: i64 = n2 as i64
126 cf_wdec(fd, n2i)
127 cf_ws(fd, " text=[" as *u8)
128 if n2i > 0 { cf_wtext(fd, outb2, n2i) }
129 cf_ws(fd, "]\n" as *u8)
130 sys_close(fd)
131 cf_ws(1, "F32 t1=" as *u8)
132 cf_wdec(1, n1i)
133 cf_ws(1, " t2=" as *u8)
134 cf_wdec(1, n2i)
135 cf_ws(1, "\n" as *u8)
136 if n1i > 0 {
137 if n2i > 0 {
138 sys_exit(0)
139 return 0
140 }
141 }
142 sys_exit(1)
143 return 1
144}