GGUF Format Type Definitions #
GGUF (Generic Graph Universal Format) is a binary format for storing large language models. This module defines the core data structures for the GGUF v3 format.
Format Structure #
[Header] - Magic number, version, counts
[Metadata] - Key-value pairs (architecture, hyperparameters)
[Tensor Info] - Tensor descriptors (name, shape, type, offset)
[Alignment] - Padding to align tensor data
[Tensor Data] - Raw binary blobs
Reference #
- Specification: https://github.com/ggerganov/ggml/blob/master/docs/gguf.md
- Implementation: llama.cpp/gguf-py/gguf/gguf_reader.py
GGUF file magic number: 0x46554747 ("GGUF" in ASCII)
Equations
- Hesper.GGUF.GGUF_MAGIC = 1179993927
Instances For
Supported GGUF version
Equations
Instances For
Default alignment for tensor data (32 bytes)
Equations
Instances For
GGML tensor types (quantization formats)
- F32 : GGMLType
- F16 : GGMLType
- Q4_0 : GGMLType
- Q4_1 : GGMLType
- Q5_0 : GGMLType
- Q5_1 : GGMLType
- Q8_0 : GGMLType
- Q8_1 : GGMLType
- Q2_K : GGMLType
- Q3_K : GGMLType
- Q4_K : GGMLType
- Q5_K : GGMLType
- Q6_K : GGMLType
- Q8_K : GGMLType
- IQ2_XXS : GGMLType
- IQ2_XS : GGMLType
- IQ3_XXS : GGMLType
- IQ1_S : GGMLType
- IQ4_NL : GGMLType
- IQ3_S : GGMLType
- IQ2_S : GGMLType
- IQ4_XS : GGMLType
- I8 : GGMLType
- I16 : GGMLType
- I32 : GGMLType
- I64 : GGMLType
- F64 : GGMLType
- IQ1_M : GGMLType
- BF16 : GGMLType
- Q4_0_4_4 : GGMLType
- Q4_0_4_8 : GGMLType
- Q4_0_8_8 : GGMLType
- TQ1_0 : GGMLType
- TQ2_0 : GGMLType
- IQ4_NL_4_4 : GGMLType
- IQ4_NL_4_8 : GGMLType
- IQ4_NL_8_8 : GGMLType
- MXFP4 : GGMLType
Instances For
Equations
- Hesper.GGUF.instReprGGMLType = { reprPrec := Hesper.GGUF.instReprGGMLType.repr }
Equations
- One or more equations did not get rendered due to their size.
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.F32 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.F32")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.F16 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.F16")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q4_0 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q4_0")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q4_1 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q4_1")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q5_0 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q5_0")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q5_1 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q5_1")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q8_0 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q8_0")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q8_1 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q8_1")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q2_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q2_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q3_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q3_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q4_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q4_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q5_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q5_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q6_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q6_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.Q8_K prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.Q8_K")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.I8 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.I8")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.I16 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.I16")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.I32 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.I32")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.I64 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.I64")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.F64 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.F64")).group prec✝
- Hesper.GGUF.instReprGGMLType.repr Hesper.GGUF.GGMLType.BF16 prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hesper.GGUF.GGMLType.BF16")).group prec✝
Instances For
Equations
- Hesper.GGUF.instBEqGGMLType.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
Equations
Convert GGMLType to its numeric ID used in GGUF files
Equations
- Hesper.GGUF.GGMLType.F32.toUInt32 = 0
- Hesper.GGUF.GGMLType.F16.toUInt32 = 1
- Hesper.GGUF.GGMLType.Q4_0.toUInt32 = 2
- Hesper.GGUF.GGMLType.Q4_1.toUInt32 = 3
- Hesper.GGUF.GGMLType.Q5_0.toUInt32 = 6
- Hesper.GGUF.GGMLType.Q5_1.toUInt32 = 7
- Hesper.GGUF.GGMLType.Q8_0.toUInt32 = 8
- Hesper.GGUF.GGMLType.Q8_1.toUInt32 = 9
- Hesper.GGUF.GGMLType.Q2_K.toUInt32 = 10
- Hesper.GGUF.GGMLType.Q3_K.toUInt32 = 11
- Hesper.GGUF.GGMLType.Q4_K.toUInt32 = 12
- Hesper.GGUF.GGMLType.Q5_K.toUInt32 = 13
- Hesper.GGUF.GGMLType.Q6_K.toUInt32 = 14
- Hesper.GGUF.GGMLType.Q8_K.toUInt32 = 15
- Hesper.GGUF.GGMLType.IQ2_XXS.toUInt32 = 16
- Hesper.GGUF.GGMLType.IQ2_XS.toUInt32 = 17
- Hesper.GGUF.GGMLType.IQ3_XXS.toUInt32 = 18
- Hesper.GGUF.GGMLType.IQ1_S.toUInt32 = 19
- Hesper.GGUF.GGMLType.IQ4_NL.toUInt32 = 20
- Hesper.GGUF.GGMLType.IQ3_S.toUInt32 = 21
- Hesper.GGUF.GGMLType.IQ2_S.toUInt32 = 22
- Hesper.GGUF.GGMLType.IQ4_XS.toUInt32 = 23
- Hesper.GGUF.GGMLType.I8.toUInt32 = 24
- Hesper.GGUF.GGMLType.I16.toUInt32 = 25
- Hesper.GGUF.GGMLType.I32.toUInt32 = 26
- Hesper.GGUF.GGMLType.I64.toUInt32 = 27
- Hesper.GGUF.GGMLType.F64.toUInt32 = 28
- Hesper.GGUF.GGMLType.IQ1_M.toUInt32 = 29
- Hesper.GGUF.GGMLType.BF16.toUInt32 = 30
- Hesper.GGUF.GGMLType.Q4_0_4_4.toUInt32 = 31
- Hesper.GGUF.GGMLType.Q4_0_4_8.toUInt32 = 32
- Hesper.GGUF.GGMLType.Q4_0_8_8.toUInt32 = 33
- Hesper.GGUF.GGMLType.TQ1_0.toUInt32 = 34
- Hesper.GGUF.GGMLType.TQ2_0.toUInt32 = 35
- Hesper.GGUF.GGMLType.IQ4_NL_4_4.toUInt32 = 36
- Hesper.GGUF.GGMLType.IQ4_NL_4_8.toUInt32 = 37
- Hesper.GGUF.GGMLType.IQ4_NL_8_8.toUInt32 = 38
- Hesper.GGUF.GGMLType.MXFP4.toUInt32 = 39
Instances For
Parse GGMLType from numeric ID
Equations
- Hesper.GGUF.GGMLType.fromUInt32 0 = Except.ok Hesper.GGUF.GGMLType.F32
- Hesper.GGUF.GGMLType.fromUInt32 1 = Except.ok Hesper.GGUF.GGMLType.F16
- Hesper.GGUF.GGMLType.fromUInt32 2 = Except.ok Hesper.GGUF.GGMLType.Q4_0
- Hesper.GGUF.GGMLType.fromUInt32 3 = Except.ok Hesper.GGUF.GGMLType.Q4_1
- Hesper.GGUF.GGMLType.fromUInt32 6 = Except.ok Hesper.GGUF.GGMLType.Q5_0
- Hesper.GGUF.GGMLType.fromUInt32 7 = Except.ok Hesper.GGUF.GGMLType.Q5_1
- Hesper.GGUF.GGMLType.fromUInt32 8 = Except.ok Hesper.GGUF.GGMLType.Q8_0
- Hesper.GGUF.GGMLType.fromUInt32 9 = Except.ok Hesper.GGUF.GGMLType.Q8_1
- Hesper.GGUF.GGMLType.fromUInt32 10 = Except.ok Hesper.GGUF.GGMLType.Q2_K
- Hesper.GGUF.GGMLType.fromUInt32 11 = Except.ok Hesper.GGUF.GGMLType.Q3_K
- Hesper.GGUF.GGMLType.fromUInt32 12 = Except.ok Hesper.GGUF.GGMLType.Q4_K
- Hesper.GGUF.GGMLType.fromUInt32 13 = Except.ok Hesper.GGUF.GGMLType.Q5_K
- Hesper.GGUF.GGMLType.fromUInt32 14 = Except.ok Hesper.GGUF.GGMLType.Q6_K
- Hesper.GGUF.GGMLType.fromUInt32 15 = Except.ok Hesper.GGUF.GGMLType.Q8_K
- Hesper.GGUF.GGMLType.fromUInt32 16 = Except.ok Hesper.GGUF.GGMLType.IQ2_XXS
- Hesper.GGUF.GGMLType.fromUInt32 17 = Except.ok Hesper.GGUF.GGMLType.IQ2_XS
- Hesper.GGUF.GGMLType.fromUInt32 18 = Except.ok Hesper.GGUF.GGMLType.IQ3_XXS
- Hesper.GGUF.GGMLType.fromUInt32 19 = Except.ok Hesper.GGUF.GGMLType.IQ1_S
- Hesper.GGUF.GGMLType.fromUInt32 20 = Except.ok Hesper.GGUF.GGMLType.IQ4_NL
- Hesper.GGUF.GGMLType.fromUInt32 21 = Except.ok Hesper.GGUF.GGMLType.IQ3_S
- Hesper.GGUF.GGMLType.fromUInt32 22 = Except.ok Hesper.GGUF.GGMLType.IQ2_S
- Hesper.GGUF.GGMLType.fromUInt32 23 = Except.ok Hesper.GGUF.GGMLType.IQ4_XS
- Hesper.GGUF.GGMLType.fromUInt32 24 = Except.ok Hesper.GGUF.GGMLType.I8
- Hesper.GGUF.GGMLType.fromUInt32 25 = Except.ok Hesper.GGUF.GGMLType.I16
- Hesper.GGUF.GGMLType.fromUInt32 26 = Except.ok Hesper.GGUF.GGMLType.I32
- Hesper.GGUF.GGMLType.fromUInt32 27 = Except.ok Hesper.GGUF.GGMLType.I64
- Hesper.GGUF.GGMLType.fromUInt32 28 = Except.ok Hesper.GGUF.GGMLType.F64
- Hesper.GGUF.GGMLType.fromUInt32 29 = Except.ok Hesper.GGUF.GGMLType.IQ1_M
- Hesper.GGUF.GGMLType.fromUInt32 30 = Except.ok Hesper.GGUF.GGMLType.BF16
- Hesper.GGUF.GGMLType.fromUInt32 31 = Except.ok Hesper.GGUF.GGMLType.Q4_0_4_4
- Hesper.GGUF.GGMLType.fromUInt32 32 = Except.ok Hesper.GGUF.GGMLType.Q4_0_4_8
- Hesper.GGUF.GGMLType.fromUInt32 33 = Except.ok Hesper.GGUF.GGMLType.Q4_0_8_8
- Hesper.GGUF.GGMLType.fromUInt32 34 = Except.ok Hesper.GGUF.GGMLType.TQ1_0
- Hesper.GGUF.GGMLType.fromUInt32 35 = Except.ok Hesper.GGUF.GGMLType.TQ2_0
- Hesper.GGUF.GGMLType.fromUInt32 36 = Except.ok Hesper.GGUF.GGMLType.IQ4_NL_4_4
- Hesper.GGUF.GGMLType.fromUInt32 37 = Except.ok Hesper.GGUF.GGMLType.IQ4_NL_4_8
- Hesper.GGUF.GGMLType.fromUInt32 38 = Except.ok Hesper.GGUF.GGMLType.IQ4_NL_8_8
- Hesper.GGUF.GGMLType.fromUInt32 39 = Except.ok Hesper.GGUF.GGMLType.MXFP4
- Hesper.GGUF.GGMLType.fromUInt32 id = Except.error (toString "Unknown GGML type ID: " ++ toString id)
Instances For
Check if type is a ternary (BitNet) quantization format
Equations
Instances For
Get the bytes per element for unquantized types
Equations
- Hesper.GGUF.GGMLType.F32.bytesPerElement = 4
- Hesper.GGUF.GGMLType.F16.bytesPerElement = 2
- Hesper.GGUF.GGMLType.BF16.bytesPerElement = 2
- Hesper.GGUF.GGMLType.I8.bytesPerElement = 1
- Hesper.GGUF.GGMLType.I16.bytesPerElement = 2
- Hesper.GGUF.GGMLType.I32.bytesPerElement = 4
- Hesper.GGUF.GGMLType.I64.bytesPerElement = 8
- Hesper.GGUF.GGMLType.F64.bytesPerElement = 8
- x✝.bytesPerElement = 0
Instances For
Equations
- One or more equations did not get rendered due to their size.
Metadata value types in GGUF
- MUInt8 : MetadataValueType
- MInt8 : MetadataValueType
- MUInt16 : MetadataValueType
- MInt16 : MetadataValueType
- MUInt32 : MetadataValueType
- MInt32 : MetadataValueType
- MFloat32 : MetadataValueType
- MBool : MetadataValueType
- MString : MetadataValueType
- MArray : MetadataValueType
- MUInt64 : MetadataValueType
- MInt64 : MetadataValueType
- MFloat64 : MetadataValueType
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- Hesper.GGUF.instBEqMetadataValueType.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Convert MetadataValueType to its numeric ID
Equations
- Hesper.GGUF.MetadataValueType.MUInt8.toNat = 0
- Hesper.GGUF.MetadataValueType.MInt8.toNat = 1
- Hesper.GGUF.MetadataValueType.MUInt16.toNat = 2
- Hesper.GGUF.MetadataValueType.MInt16.toNat = 3
- Hesper.GGUF.MetadataValueType.MUInt32.toNat = 4
- Hesper.GGUF.MetadataValueType.MInt32.toNat = 5
- Hesper.GGUF.MetadataValueType.MFloat32.toNat = 6
- Hesper.GGUF.MetadataValueType.MBool.toNat = 7
- Hesper.GGUF.MetadataValueType.MString.toNat = 8
- Hesper.GGUF.MetadataValueType.MArray.toNat = 9
- Hesper.GGUF.MetadataValueType.MUInt64.toNat = 10
- Hesper.GGUF.MetadataValueType.MInt64.toNat = 11
- Hesper.GGUF.MetadataValueType.MFloat64.toNat = 12
Instances For
Parse MetadataValueType from numeric ID
Equations
- Hesper.GGUF.MetadataValueType.fromNat 0 = Except.ok Hesper.GGUF.MetadataValueType.MUInt8
- Hesper.GGUF.MetadataValueType.fromNat 1 = Except.ok Hesper.GGUF.MetadataValueType.MInt8
- Hesper.GGUF.MetadataValueType.fromNat 2 = Except.ok Hesper.GGUF.MetadataValueType.MUInt16
- Hesper.GGUF.MetadataValueType.fromNat 3 = Except.ok Hesper.GGUF.MetadataValueType.MInt16
- Hesper.GGUF.MetadataValueType.fromNat 4 = Except.ok Hesper.GGUF.MetadataValueType.MUInt32
- Hesper.GGUF.MetadataValueType.fromNat 5 = Except.ok Hesper.GGUF.MetadataValueType.MInt32
- Hesper.GGUF.MetadataValueType.fromNat 6 = Except.ok Hesper.GGUF.MetadataValueType.MFloat32
- Hesper.GGUF.MetadataValueType.fromNat 7 = Except.ok Hesper.GGUF.MetadataValueType.MBool
- Hesper.GGUF.MetadataValueType.fromNat 8 = Except.ok Hesper.GGUF.MetadataValueType.MString
- Hesper.GGUF.MetadataValueType.fromNat 9 = Except.ok Hesper.GGUF.MetadataValueType.MArray
- Hesper.GGUF.MetadataValueType.fromNat 10 = Except.ok Hesper.GGUF.MetadataValueType.MUInt64
- Hesper.GGUF.MetadataValueType.fromNat 11 = Except.ok Hesper.GGUF.MetadataValueType.MInt64
- Hesper.GGUF.MetadataValueType.fromNat 12 = Except.ok Hesper.GGUF.MetadataValueType.MFloat64
- Hesper.GGUF.MetadataValueType.fromNat id = Except.error (toString "Unknown metadata value type: " ++ toString id)
Instances For
Metadata value (simplified - stores raw bytes for now)
- valueType : MetadataValueType
- data : ByteArray
Instances For
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
Equations
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Equations
Calculate total number of elements in tensor
Equations
- ti.numElements = Array.foldl (fun (x1 x2 : UInt64) => x1 * x2) 1 ti.dimensions
Instances For
Calculate size in bytes (for quantized types, this is approximate)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Complete GGUF file structure
- header : GGUFHeader
- metadata : Array (String × MetadataValue)
- tensors : Array TensorInfo
- dataBlob : ByteArray
- alignment : UInt32
- mmap : Option CUDA.MMappedFile
Optional mmap handle. When set,
dataBlobis empty (or holds only a prefix for metadata parsing) and tensor bodies are read from the mmap atdataSectionOffset + tensor.offset. The mmap's lifetime is tied to this Lean object via GC, so any GPU weight upload issued async while the GGUFFile reference is live is safe to complete. - dataSectionOffset : USize
Absolute file offset where the aligned tensor-data section starts. Only meaningful when
mmap.isSome. Tensor body at mmap offset =dataSectionOffset + tensorInfo.offset.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Find tensor by name
Equations
- gf.findTensor name = Array.find? (fun (x : Hesper.GGUF.TensorInfo) => x.name == name) gf.tensors
Instances For
Get tensor names
Equations
- gf.tensorNames = Array.map (fun (x : Hesper.GGUF.TensorInfo) => x.name) gf.tensors
Instances For
Find metadata value by key
Equations
- gf.findMetadata key = Option.map (fun (x : String × Hesper.GGUF.MetadataValue) => x.snd) (Array.find? (fun (x : String × Hesper.GGUF.MetadataValue) => x.fst == key) gf.metadata)