import sys, struct GGUF_MAGIC = 0x46554747 # value types T_UINT8,T_INT8,T_UINT16,T_INT16,T_UINT32,T_INT32,T_FLOAT32,T_BOOL,T_STRING,T_ARRAY,T_UINT64,T_INT64,T_FLOAT64 = range(13) f = open(sys.argv[1],'rb') def rd(n): return f.read(n) def u32(): return struct.unpack(' 16: for _ in range(n): ln = u64(); f.seek(ln, 1) return f'' return [string() for _ in range(n)] sizes = {T_UINT8:1,T_INT8:1,T_UINT16:2,T_INT16:2,T_UINT32:4,T_INT32:4,T_FLOAT32:4,T_BOOL:1,T_UINT64:8,T_INT64:8,T_FLOAT64:8} if n > 16: f.seek(sizes[et]*n, 1) return f'' return [value(et) for _ in range(n)] raise ValueError(f'unknown type {t}') magic = u32() assert magic == GGUF_MAGIC, hex(magic) ver = u32() n_tensors = u64() n_kv = u64() print(f'gguf_version={ver} n_tensors={n_tensors} n_kv={n_kv}') print('---') kv = {} for _ in range(n_kv): k = string(); t = u32(); v = value(t) kv[k] = v for k, v in kv.items(): if k.startswith('tokenizer.ggml.') and k not in ('tokenizer.ggml.model','tokenizer.ggml.pre','tokenizer.ggml.bos_token_id','tokenizer.ggml.eos_token_id','tokenizer.ggml.padding_token_id','tokenizer.ggml.add_bos_token'): continue if k == 'tokenizer.chat_template': print(f'{k} = ') continue print(f'{k} = {v}')