#!/usr/bin/env python3 """只抓 GGUF 头部(HTTP Range)读元数据,不下载整个文件。 用法: gguf_head.py [ ...]""" import sys, struct, urllib.request TYPES = {0:1,1:1,2:2,3:2,4:4,5:4,6:4,7:1,8:None,9:None,10:8,11:8,12:8} NAMES = {0:"u8",1:"i8",2:"u16",3:"i16",4:"u32",5:"i32",6:"f32",7:"bool",8:"str",9:"arr",10:"u64",11:"i64",12:"f64"} def readstr(b,o): n,=struct.unpack_from("" else: sz=TYPES[t]; v=int.from_bytes(b[o:o+sz],"little",signed=t in (1,3,5,11)); o+=sz out[k]=v if k=="general.architecture": break return out for url in sys.argv[1:]: print(f"=== {url.split('/resolve/')[0].split('/')[-2] + '/' + url.split('/')[-1]} ===") try: m=peek(url) print(" architecture =", m.get("general.architecture"), "| name =", m.get("general.name")) for k,v in m.items(): if "clip" in k or "projector" in k or "audio" in k: print(f" {k} = {str(v)[:70]}") except Exception as e: print(" ERR", e)