yule verify / inspect
Inspect metadata and verify model integrity
yule inspect
Print model metadata without running inference or computing hashes.
yule inspect ./model.ggufOutput includes all GGUF key-value pairs: architecture, vocab size, context length, rope settings, quantization info, and any custom metadata the publisher included.
yule verify
Full verification: parse metadata, build a Merkle tree over all tensor data, and report the root hash.
yule verify ./model.ggufverifying: ./model.gguf
format: GGUF v3
name: TinyLlama 1.1B
architecture: Llama
parameters: 1.1B
context: 2048
embedding: 2048
heads: 32 (kv: 4)
layers: 22
vocab: 32000
tensors: 201
file size: 637.81 MB
parse time: 15.2ms
building merkle tree...
merkle root: ffc7e1fd6016a6f9ba2ca390a43681453a46ec6054f431aeb6244487932b0e65
leaves: 638
verify time: 1240.3ms
VERIFICATION COMPLETEVerbose Mode
Add --verbose to include per-tensor blake3 hashes:
yule verify ./model.gguf --verboseThis prints every tensor's name, shape, quantization type, size, and individual blake3 hash. Useful for pinpointing exactly which tensor differs between two model files.
What the Merkle Root Means
The merkle root is a single 256-bit hash that represents the entire tensor payload of the model. It's built from blake3 hashes of 1MB chunks of tensor data, combined into a binary Merkle tree.
If a single byte of any tensor changes, the merkle root changes. This is the same hash that appears in every API response under integrity.model_merkle_root, so you can verify that the model the server loaded is the one you verified on disk.