The page is not the repo
A model's web page is marketing wrapped around a directory. The directory is the artifact. Learning to read that directory — before downloading anything — is the single cheapest skill in this quest: everything later (dtype forensics, provenance, digest verification) starts from knowing what files a well-formed repo contains and what each one is for.
A typical Transformers-style model repository on a git-based model hub contains some mix of the following:
config.json— the architecture declaration: model type, hidden sizes, layer counts, vocabulary size, and (notoriously) a dtype field. Loaders trust it; you should read it.model.safetensors(or a shard set +model.safetensors.index.json) — the weights themselves, in the format that won (next lesson).tokenizer.json/tokenizer_config.json/special_tokens_map.json/ vocab files — the token pipeline. Models are useless without these; archives that copy only the tensor file discover this at load time, in the dark.README.md— the model card: intended use, training summary, license declaration, and the machine-readable metadata block at the top (library_name, license tags, base-model pointers). This is both documentation and evidence.generation_config.json— decoding defaults the maker recommends.- Optional artifacts — chat templates, processor configs for multimodal models, preprocessor configs, and occasionally legacy
pytorch_model.binfiles from the pickle era.
What the file list already tells you
Before any download, the file list answers three acquisition questions. What format generation is this? — safetensors only, mixed, or pickle-era; whether shards exist and how many. Is this repo whole? — a config without weights, or weights without a tokenizer, are red flags (or signs you are looking at a LoRA adapter repo, which is legitimate but different). How big will this be? — the API exposes per-file sizes; sum them and know before you commit the disk and the transfer.
The branch structure is part of the anatomy too. A repository is not one snapshot but a tree: main is whatever the author currently wants there, while other refs — conversion branches, legacy snapshots, PR heads — hold alternates. The commit sha of the ref you read is the revision you are actually acquiring; record it or you have acquired nothing addressable.
A reading pass you can run now
The hub exposes a JSON API for exactly this reconnaissance: one request returns the metadata (current commit sha, tags, pipeline type), another lists the file tree with sizes. Make these two calls your first move on any candidate acquisition — they cost nothing and they discipline everything after.