code wiki / (root) / nx_nxgguf.nx

nx_nxgguf.nx source

↩ module page · 544 lines · 19764 B

1// nxgguf.nx -- Nishi sovereign tensor weight format. 2// 3// Replaces HuggingFace safetensors / GGUF with content-addressed, 4// memory-mapped, dedupable weight blocks. Single-binary deploy of 5// any model; instant cold-load via mmap; LoRAs share base weights 6// at the storage layer. 7// 8// Format overview: 9// 10// [magic 4] = "NXGF" 11// [version 4] = u32 LE, currently 1 12// [tensor_count 8] = u64 LE, total tensors 13// [metadata_offset 8] = u64 LE, offset to metadata block 14// [metadata_length 8] = u64 LE, byte length of metadata 15// [block_table_offset 8] = u64 LE, offset to block dir 16// [block_table_length 8] = u64 LE, byte length of block dir 17// [data_offset 8] = u64 LE, where weight bytes start 18// [reserved 16] = zeros 19// = 64 bytes total header 20// 21// metadata block: protobuf-encoded TensorRegistry 22// repeated TensorEntry { 23// string name = 1; // "model.layers.0.attn.q.weight" 24// repeated int64 shape = 2; // [512, 512] 25// int32 dtype = 3; // 0=fp32 1=fp16 2=bf16 3=fp8 4=int8 5=int4 26// string block_hash = 4; // sha256 of the tensor's bytes 27// int64 byte_length = 5; // raw byte count 28// } 29// 30// block table: array of BlockDescriptor 31// bytes hash (32) // sha256 32// uint64 file_offset ( 8) // where in file 33// uint64 byte_length ( 8) 34// uint32 ref_count ( 4) // # tensors pointing here 35// uint32 reserved ( 4) 36// = 56 bytes per block descriptor 37// 38// data section: concatenated raw weight bytes; tensor reads 39// `block.byte_length` bytes starting at `block.file_offset`. 40// 41// Dedup mechanism: if two tensors have the same content, they share 42// one BlockDescriptor (block_hash matches). ref_count tracks usage. 43// LoRAs typically share 95%+ of base model weights this way. 44// 45// mmap path: caller mmaps the entire file, then nxgguf_open() walks 46// the header and metadata in-place. Tensor reads return pointers 47// into the mmap region -- zero-copy load. 48 49// nx_safety_envelope: 50// intended_use: AUTO_APPLIED -- primitive-specific tuning queued 51// sil_target: SIL1 52// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail] 53// verdict: NOT_YET_EVALUATED 54 55import "nx_syscalls.nx" 56 57// === constants === 58 59// "NXGF" stored little-endian: bytes 'N'(0x4E),'X'(0x58),'G'(0x47),'F'(0x46) 60// → u32 value with 'F' as MSB, 'N' as LSB = 0x4647_584E 61const NXGGUF_MAGIC: i64 = 0x4647584E 62const NXGGUF_VERSION: i64 = 1 63const NXGGUF_HEADER_BYTES: i64 = 64 64const NXGGUF_BLOCK_DESC_BYTES: i64 = 56 65 66// dtype enum (matches GGUF's dtype IDs where overlapping) 67const DTYPE_FP32: i64 = 0 68const DTYPE_FP16: i64 = 1 69const DTYPE_BF16: i64 = 2 70const DTYPE_FP8: i64 = 3 // E4M3 71const DTYPE_INT8: i64 = 4 72const DTYPE_INT4: i64 = 5 // group-quantized 73const DTYPE_INT2: i64 = 6 // for BitNet b1.58 + similar 74const DTYPE_TERN: i64 = 7 // ternary {-1, 0, 1} packed 75 76// element size in bits (for memory accounting) 77func dtype_bits(dt: i64) -> i64 { 78 if dt == DTYPE_FP32 { return 32 } 79 if dt == DTYPE_FP16 { return 16 } 80 if dt == DTYPE_BF16 { return 16 } 81 if dt == DTYPE_FP8 { return 8 } 82 if dt == DTYPE_INT8 { return 8 } 83 if dt == DTYPE_INT4 { return 4 } 84 if dt == DTYPE_INT2 { return 2 } 85 if dt == DTYPE_TERN { return 2 } // 1.58 bits effective, stored 2 86 return 32 87} 88 89// === in-memory representation === 90 91struct NxgFile { 92 base: *u8, // mmap'd file start 93 length: i64, // mmap'd byte length 94 tensor_count: i64, 95 metadata_off: i64, 96 metadata_len: i64, 97 block_table_off: i64, 98 block_table_len: i64, 99 data_off: i64, 100} 101 102struct NxgTensor { 103 file: *NxgFile, // back-pointer to owner 104 name_off: i64, // offset into metadata block where name lives 105 name_len: i64, // bytes 106 rank: i64, // number of dims 107 shape: *i64, // pointer into metadata where dims live 108 dtype: i64, 109 block_hash_off: i64, // offset into metadata where 32-byte hash lives 110 byte_length: i64, 111 data_ptr: *u8, // resolved pointer into mmap region; null until resolved 112} 113 114struct NxgBlockDesc { 115 hash_off: i64, // offset into block table where 32-byte hash lives 116 file_offset: i64, // where the block's bytes are in the file 117 byte_length: i64, 118 ref_count: i64, 119} 120 121// === reader === 122 123// Decode little-endian u64 at `buf[off..off+8]`. 124func read_u64_le(buf: *u8, off: i64) -> i64 { 125 var v: i64 = 0 126 var i: i64 = 7 127 while i >= 0 { 128 v = (v << 8) | buf[off + i] 129 i = i - 1 130 } 131 return v 132} 133 134func read_u32_le(buf: *u8, off: i64) -> i64 { 135 var v: i64 = 0 136 var i: i64 = 3 137 while i >= 0 { 138 v = (v << 8) | buf[off + i] 139 i = i - 1 140 } 141 return v 142} 143 144// Open an NXGF file from mmap'd bytes. Returns 0 on success; 145// negative on error. Validates magic + version + sanity-checks 146// offsets fit within the file. 147func nxgguf_open(file: *NxgFile, base: *u8, length: i64) -> i64 { 148 if length < NXGGUF_HEADER_BYTES { return -1 } 149 let magic: i64 = read_u32_le(base, 0) 150 if magic != NXGGUF_MAGIC { return -2 } 151 let version: i64 = read_u32_le(base, 4) 152 if version != NXGGUF_VERSION { return -3 } 153 154 file.base = base 155 file.length = length 156 file.tensor_count = read_u64_le(base, 8) 157 file.metadata_off = read_u64_le(base, 16) 158 file.metadata_len = read_u64_le(base, 24) 159 file.block_table_off = read_u64_le(base, 32) 160 file.block_table_len = read_u64_le(base, 40) 161 file.data_off = read_u64_le(base, 48) 162 163 // Bounds check. 164 if file.metadata_off + file.metadata_len > length { return -4 } 165 if file.block_table_off + file.block_table_len > length { return -5 } 166 if file.data_off > length { return -6 } 167 return 0 168} 169 170// Total weight bytes -- sum across all unique blocks. Used for VRAM 171// accounting before committing the model to GPU. 172func nxgguf_total_bytes(file: *NxgFile) -> i64 { 173 let n_blocks: i64 = file.block_table_len / NXGGUF_BLOCK_DESC_BYTES 174 var total: i64 = 0 175 var i: i64 = 0 176 while i < n_blocks { 177 let off: i64 = file.block_table_off + i * NXGGUF_BLOCK_DESC_BYTES 178 let len: i64 = read_u64_le(file.base, off + 40) 179 total = total + len 180 i = i + 1 181 } 182 return total 183} 184 185// Number of unique blocks (vs total tensors). Lower = better dedup. 186func nxgguf_unique_blocks(file: *NxgFile) -> i64 { 187 return file.block_table_len / NXGGUF_BLOCK_DESC_BYTES 188} 189 190// === content-addressed block hashing ================================= 191// 192// sha256 of a tensor's raw bytes is the block_hash. Two tensors 193// with identical content -> identical hash -> share one 194// BlockDescriptor. This is what makes LoRAs near-free at the 195// storage layer (95%+ of base weights typically share with the 196// base model). 197 198import "nx_sha256.nx" 199const NXGGUF_MAGIC_8192: i64 = 8192 200const NXGGUF_MAGIC_1024: i64 = 1024 201const NXGGUF_MAGIC_65536: i64 = 65536 202 203// Compute sha256(bytes[0..len]) into out (32 bytes). 204func nxgguf_hash_block(bytes: *u8, len: i64, out: *u8) -> i64 { 205 let ctx_raw: *u8 = sys_mmap(128) 206 let ctx: *Sha256 = ctx_raw as *Sha256 207 sha256_init(ctx) 208 sha256_update(ctx, bytes, len) 209 sha256_final(ctx, out) 210 return 0 211} 212 213// Compare two 32-byte sha256 hashes. Returns 0 if equal, 1 if 214// different. Constant-time (sha256 outputs aren't secret but 215// dedup speed matters). 216func nxgguf_hash_eq(a: *u8, b: *u8) -> i64 { 217 var i: i64 = 0 218 var diff: i64 = 0 219 while i < 32 { 220 if a[i] != b[i] { diff = 1 } 221 i = i + 1 222 } 223 if diff == 1 { return 1 } 224 return 0 225} 226 227// Look up a block by its hash in the file's block table. Returns 228// the block index (>= 0) on hit, or -1 on miss. O(N) scan; for 229// production use a hash-keyed index (later phase, ~80 LoC). 230func nxgguf_find_block(file: *NxgFile, target_hash: *u8) -> i64 { 231 let n_blocks: i64 = file.block_table_len / NXGGUF_BLOCK_DESC_BYTES 232 var i: i64 = 0 233 while i < n_blocks { 234 let desc_off: i64 = file.block_table_off + i * NXGGUF_BLOCK_DESC_BYTES 235 let block_hash_ptr: *u8 = (file.base as i64 + desc_off) as *u8 236 if nxgguf_hash_eq(block_hash_ptr, target_hash) == 0 { 237 return i 238 } 239 i = i + 1 240 } 241 return -1 242} 243 244// === write side ====================================================== 245// 246// Build an nxgguf file in memory from an array of tensor entries. 247// Caller supplies tensor metadata + raw bytes; encoder hashes each 248// tensor's content, dedupes, packs the format. 249// 250// Usage: 251// let w: *NxgWriter = nxgguf_writer_new(out_buf, out_cap) 252// for each tensor: 253// nxgguf_writer_add(w, name, name_len, rank, shape, dtype, 254// data, byte_length) 255// let total: i64 = nxgguf_writer_finalize(w) 256// sys_write(fd, out_buf, total) 257// 258// The writer maintains an in-memory block table for dedup. Every 259// tensor's content is sha256'd; matching hashes share one 260// BlockDescriptor (ref_count++). 261 262const NXG_MAX_BLOCKS: i64 = 4096 263const NXG_MAX_TENSORS: i64 = 4096 264 265struct NxgWriter { 266 out: *u8, 267 out_cap: i64, 268 n_blocks: i64, 269 n_tensors: i64, 270 block_hashes: *u8, 271 block_lens: *i64, 272 block_data: *u8, 273 block_offs: *i64, 274 block_data_pos: i64, 275 tensor_names: *u8, 276 tensor_ranks: *i64, 277 tensor_shapes: *i64, 278 tensor_dtypes: *i64, 279 tensor_blocks: *i64, 280} 281 282func nxgguf_writer_new(out_buf: *u8, out_cap: i64) -> *NxgWriter { 283 let w_raw: *u8 = sys_mmap(128) 284 let w: *NxgWriter = w_raw as *NxgWriter 285 w.out = out_buf 286 w.out_cap = out_cap 287 w.n_blocks = 0 288 w.n_tensors = 0 289 w.block_hashes = sys_mmap(NXG_MAX_BLOCKS * 32 + 64) 290 w.block_lens = sys_mmap(NXG_MAX_BLOCKS * 8 + 64) as *i64 291 w.block_data = sys_mmap(out_cap) 292 w.block_offs = sys_mmap(NXG_MAX_BLOCKS * 8 + 64) as *i64 293 w.block_data_pos = 0 294 w.tensor_names = sys_mmap(NXG_MAX_TENSORS * 256 + 64) 295 w.tensor_ranks = sys_mmap(NXG_MAX_TENSORS * 8 + 64) as *i64 296 w.tensor_shapes = sys_mmap(NXG_MAX_TENSORS * 8 * 8 + 64) as *i64 297 w.tensor_dtypes = sys_mmap(NXG_MAX_TENSORS * 8 + 64) as *i64 298 w.tensor_blocks = sys_mmap(NXG_MAX_TENSORS * 8 + 64) as *i64 299 return w 300} 301 302// Look up a hash in the writer's block table. Returns block index 303// or -1 if not present. 304func nxgguf_writer_find_block(w: *NxgWriter, target_hash: *u8) -> i64 { 305 var i: i64 = 0 306 while i < w.n_blocks { 307 let h_off: i64 = i * 32 308 let bh: *u8 = (w.block_hashes as i64 + h_off) as *u8 309 if nxgguf_hash_eq(bh, target_hash) == 0 { return i } 310 i = i + 1 311 } 312 return -1 313} 314 315// Add a tensor to the writer. Hashes the data; dedupes against 316// existing blocks; appends a new BlockDescriptor + bytes if novel. 317// Returns 0 on success, -1 on capacity overflow. 318func nxgguf_writer_add(w: *NxgWriter, 319 name: *u8, name_len: i64, 320 rank: i64, shape: *i64, dtype: i64, 321 data: *u8, byte_length: i64) -> i64 { 322 if w.n_tensors >= NXG_MAX_TENSORS { return -1 } 323 324 let hash_buf: *u8 = sys_mmap(64) 325 nxgguf_hash_block(data, byte_length, hash_buf) 326 327 var block_idx: i64 = nxgguf_writer_find_block(w, hash_buf) 328 if block_idx < 0 { 329 if w.n_blocks >= NXG_MAX_BLOCKS { return -1 } 330 block_idx = w.n_blocks 331 let h_off: i64 = block_idx * 32 332 var k: i64 = 0 333 while k < 32 { 334 let dst: *u8 = (w.block_hashes as i64 + h_off + k) as *u8 335 *dst = hash_buf[k] 336 k = k + 1 337 } 338 w.block_lens[block_idx] = byte_length 339 var bi: i64 = 0 340 while bi < byte_length { 341 let dst: *u8 = (w.block_data as i64 + w.block_data_pos + bi) as *u8 342 *dst = data[bi] 343 bi = bi + 1 344 } 345 w.block_offs[block_idx] = w.block_data_pos 346 w.block_data_pos = w.block_data_pos + byte_length 347 w.n_blocks = w.n_blocks + 1 348 } 349 350 let t_idx: i64 = w.n_tensors 351 let name_off: i64 = t_idx * 256 352 var k: i64 = 0 353 while k < name_len { 354 let dst: *u8 = (w.tensor_names as i64 + name_off + k) as *u8 355 *dst = name[k] 356 k = k + 1 357 } 358 let term: *u8 = (w.tensor_names as i64 + name_off + name_len) as *u8 359 *term = 0 360 w.tensor_ranks[t_idx] = rank 361 let shape_off: i64 = t_idx * 8 362 var d: i64 = 0 363 while d < rank { 364 if d >= 8 { return -1 } 365 w.tensor_shapes[shape_off + d] = shape[d] 366 d = d + 1 367 } 368 w.tensor_dtypes[t_idx] = dtype 369 w.tensor_blocks[t_idx] = block_idx 370 w.n_tensors = t_idx + 1 371 return 0 372} 373 374// Encode a u64 little-endian into out[off..off+8]. 375func write_u64_le(out: *u8, off: i64, v: i64) -> i64 { 376 out[off + 0] = v & 0xFF 377 out[off + 1] = (v >> 8) & 0xFF 378 out[off + 2] = (v >> 16) & 0xFF 379 out[off + 3] = (v >> 24) & 0xFF 380 out[off + 4] = (v >> 32) & 0xFF 381 out[off + 5] = (v >> 40) & 0xFF 382 out[off + 6] = (v >> 48) & 0xFF 383 out[off + 7] = (v >> 56) & 0xFF 384 return 0 385} 386 387// Finalize: emit header + block table + data section. Skips the 388// metadata block for v0.0.1 (protobuf encoder is a future commit). 389// Returns total bytes written. 390func nxgguf_writer_finalize(w: *NxgWriter) -> i64 { 391 let header_bytes: i64 = NXGGUF_HEADER_BYTES 392 let block_table_bytes: i64 = w.n_blocks * NXGGUF_BLOCK_DESC_BYTES 393 let data_off: i64 = header_bytes + block_table_bytes 394 let total: i64 = data_off + w.block_data_pos 395 if total > w.out_cap { return -1 } 396 397 w.out[0] = 0x4E // 'N' 398 w.out[1] = 0x58 // 'X' 399 w.out[2] = 0x47 // 'G' 400 w.out[3] = 0x46 // 'F' 401 w.out[4] = 1; w.out[5] = 0; w.out[6] = 0; w.out[7] = 0 402 write_u64_le(w.out, 8, w.n_tensors) 403 write_u64_le(w.out, 16, header_bytes) // metadata_off 404 write_u64_le(w.out, 24, 0) // metadata_len 405 write_u64_le(w.out, 32, header_bytes) // block_table_off 406 write_u64_le(w.out, 40, block_table_bytes) 407 write_u64_le(w.out, 48, data_off) 408 var i: i64 = 56 409 while i < 64 { w.out[i] = 0; i = i + 1 } 410 411 var b: i64 = 0 412 while b < w.n_blocks { 413 let desc_off: i64 = header_bytes + b * NXGGUF_BLOCK_DESC_BYTES 414 var k: i64 = 0 415 while k < 32 { 416 let src: *u8 = (w.block_hashes as i64 + b * 32 + k) as *u8 417 w.out[desc_off + k] = *src 418 k = k + 1 419 } 420 write_u64_le(w.out, desc_off + 32, data_off + w.block_offs[b]) 421 write_u64_le(w.out, desc_off + 40, w.block_lens[b]) 422 write_u64_le(w.out, desc_off + 48, 0) 423 b = b + 1 424 } 425 426 var di: i64 = 0 427 while di < w.block_data_pos { 428 let src: *u8 = (w.block_data as i64 + di) as *u8 429 w.out[data_off + di] = *src 430 di = di + 1 431 } 432 return total 433} 434 435// === self-test === 436 437// Construct a 4-tensor fixture in memory + verify open/total-bytes 438// round-trip. No file I/O so this runs anywhere. 439func main() -> i64 { 440 let buf: *u8 = sys_mmap(NXGGUF_MAGIC_8192) 441 442 // header: "NXGF" magic bytes 443 buf[0] = 0x4E // 'N' 444 buf[1] = 0x58 // 'X' 445 buf[2] = 0x47 // 'G' 446 buf[3] = 0x46 // 'F' 447 // version = 1, little-endian u32 448 buf[4] = 1; buf[5] = 0; buf[6] = 0; buf[7] = 0 449 // tensor_count = 4 450 buf[8] = 4; buf[9] = 0; buf[10] = 0; buf[11] = 0 451 buf[12] = 0; buf[13] = 0; buf[14] = 0; buf[15] = 0 452 // metadata_off = 64, metadata_len = 0 (no metadata in this fixture) 453 buf[16] = 64; buf[17] = 0; buf[18] = 0; buf[19] = 0 454 buf[20] = 0; buf[21] = 0; buf[22] = 0; buf[23] = 0 455 buf[24] = 0; buf[25] = 0; buf[26] = 0; buf[27] = 0 456 buf[28] = 0; buf[29] = 0; buf[30] = 0; buf[31] = 0 457 // block_table_off = 64, block_table_len = 56 (one block) 458 buf[32] = 64; buf[33] = 0; buf[34] = 0; buf[35] = 0 459 buf[36] = 0; buf[37] = 0; buf[38] = 0; buf[39] = 0 460 buf[40] = 56; buf[41] = 0; buf[42] = 0; buf[43] = 0 461 buf[44] = 0; buf[45] = 0; buf[46] = 0; buf[47] = 0 462 // data_off = 120 463 buf[48] = 120; buf[49] = 0; buf[50] = 0; buf[51] = 0 464 buf[52] = 0; buf[53] = 0; buf[54] = 0; buf[55] = 0 465 // reserved 466 buf[56] = 0; buf[57] = 0; buf[58] = 0; buf[59] = 0 467 buf[60] = 0; buf[61] = 0; buf[62] = 0; buf[63] = 0 468 469 // block descriptor at offset 64: byte_length = 1024 at offset 64+40 = 104 470 buf[104] = 0; buf[105] = 4; buf[106] = 0; buf[107] = 0 // NXGGUF_MAGIC_1024 LE 471 buf[108] = 0; buf[109] = 0; buf[110] = 0; buf[111] = 0 472 473 let file: *NxgFile = sys_mmap(64) as *NxgFile 474 let rc: i64 = nxgguf_open(file, buf, NXGGUF_MAGIC_8192) 475 if rc != 0 { return __syscall(93, 100 + (0 - rc), 0, 0, 0, 0, 0) } 476 if file.tensor_count != 4 { return __syscall(93, 50, 0, 0, 0, 0, 0) } 477 if file.data_off != 120 { return __syscall(93, 51, 0, 0, 0, 0, 0) } 478 if nxgguf_total_bytes(file) != NXGGUF_MAGIC_1024 { 479 return __syscall(93, 52, 0, 0, 0, 0, 0) 480 } 481 if nxgguf_unique_blocks(file) != 1 { 482 return __syscall(93, 53, 0, 0, 0, 0, 0) 483 } 484 485 // Hash-equality + dedup self-test: 486 // Two identical 32-byte buffers -> same sha256 -> hash_eq returns 0. 487 let hash_a: *u8 = sys_mmap(64) 488 let hash_b: *u8 = sys_mmap(64) 489 let payload: *u8 = sys_mmap(128) 490 var ki: i64 = 0 491 while ki < 64 { payload[ki] = ki & 0xFF; ki = ki + 1 } 492 nxgguf_hash_block(payload, 64, hash_a) 493 nxgguf_hash_block(payload, 64, hash_b) 494 if nxgguf_hash_eq(hash_a, hash_b) != 0 { 495 return __syscall(93, 60, 0, 0, 0, 0, 0) 496 } 497 // Modify one byte of payload, re-hash -> different. 498 payload[0] = payload[0] ^ 1 499 nxgguf_hash_block(payload, 64, hash_b) 500 if nxgguf_hash_eq(hash_a, hash_b) != 1 { 501 return __syscall(93, 61, 0, 0, 0, 0, 0) 502 } 503 504 // Writer round-trip: build a 3-tensor file where two tensors 505 // share content (dedup test), then re-read it. 506 let wbuf: *u8 = sys_mmap(NXGGUF_MAGIC_65536) 507 let w: *NxgWriter = nxgguf_writer_new(wbuf, NXGGUF_MAGIC_65536) 508 509 // Tensor data: 64 bytes of distinct + 64 bytes that match 510 // tensor 0 + 32 bytes of distinct. 511 let t0_data: *u8 = sys_mmap(64); var ti: i64 = 0 512 while ti < 64 { t0_data[ti] = ti & 0xFF; ti = ti + 1 } 513 let t1_data: *u8 = sys_mmap(64); ti = 0 514 while ti < 64 { t1_data[ti] = ti & 0xFF; ti = ti + 1 } // identical to t0 515 let t2_data: *u8 = sys_mmap(32); ti = 0 516 while ti < 32 { t2_data[ti] = (ti + 100) & 0xFF; ti = ti + 1 } 517 518 let shape_raw: *u8 = sys_mmap(64); let shape_p: *i64 = shape_raw as *i64 519 shape_p[0] = 8; shape_p[1] = 8 520 521 nxgguf_writer_add(w, "tensor.0" as *u8, 8, 2, shape_p, DTYPE_INT8, t0_data, 64) 522 nxgguf_writer_add(w, "tensor.1" as *u8, 8, 2, shape_p, DTYPE_INT8, t1_data, 64) 523 let shape2_raw: *u8 = sys_mmap(64); let shape2_p: *i64 = shape2_raw as *i64 524 shape2_p[0] = 32 525 nxgguf_writer_add(w, "tensor.2" as *u8, 8, 1, shape2_p, DTYPE_INT8, t2_data, 32) 526 527 let total: i64 = nxgguf_writer_finalize(w) 528 if total <= 0 { return __syscall(93, 70, 0, 0, 0, 0, 0) } 529 530 // Round-trip verify: open + check counts. Dedup means 3 531 // tensors share 2 unique blocks. 532 let rd_file: *NxgFile = sys_mmap(64) as *NxgFile 533 let rrc: i64 = nxgguf_open(rd_file, wbuf, total) 534 if rrc != 0 { return __syscall(93, 71, 0, 0, 0, 0, 0) } 535 if rd_file.tensor_count != 3 { return __syscall(93, 72, 0, 0, 0, 0, 0) } 536 if nxgguf_unique_blocks(rd_file) != 2 { 537 return __syscall(93, 73, 0, 0, 0, 0, 0) 538 } 539 if nxgguf_total_bytes(rd_file) != 96 { // 64 + 32 = 96 (deduped) 540 return __syscall(93, 74, 0, 0, 0, 0, 0) 541 } 542 543 return __syscall(93, 42, 0, 0, 0, 0, 0) 544}