Verify what you download from a model hub
Here's the rule I run on every model I pull down: every file in that download needs a known origin before it touches real data. Weights, tokenizer config, chat template, whatever optional loader code the repo bundles, all of it. A repo I can't account for piece by piece stays off the machine I do real work on.
That sounds obvious until you notice how casually most local-model workflows skip it. A familiar name on a hub page tells you almost nothing about the artifact behind it. My own daily setup runs on a GGUF collection assembled by community quantizers, not the original publisher, a normal way to run models now and an extra hop people forget. Someone converted the weights, wrote a config, maybe bundled a loader script, and re-uploaded the whole thing under a name that still reads like the exact original model everyone assumes they're getting. The name stayed put. The supply chain didn't.
what's actually in the download
Start by naming the job before you touch the download page. Interactive chat, code completion, document extraction, and an unattended batch run carry different failure costs: a bad answer in a batch job nobody watches costs a lot more than one a human catches on screen. Decide what a good result looks like before you touch a setting.
The checks themselves aren't exotic. Pin the revision instead of a moving branch. Checking the hash against what the repo claims should be routine, not one-off, and safetensors beats any format that unpickles arbitrary Python on load, since a weights file has no business being an execution vector. The model card is worth reading past the benchmark table, to the licensing and training-data notes everyone skips, and any converter or quantizer script that runs during setup deserves its own trust boundary, not a free pass for shipping next to the model.
the sandbox that misses the real risk
The common mistake, one I've made myself, is sandboxing inference carefully while running the unreviewed conversion script wide open on the host that produced the weights it's about to load. The same blind spot shows up with coding agents: lock down the thing that talks to the model, leave the tool it shells out to with full access. Inference gets watched because it's visible. The conversion step runs once, quietly, and nobody looks again.
'It loaded' is not a security check, and 'the output looked fine' is not an evaluation. Check the runtime logs and the operating-system metrics, not the flag you asked the tool to respect, since a script that ignores its sandbox will still report success. Change one variable at a time and say why you expect the result, or every comparison collapses into anecdote. Run cold once, the way a reboot hits it, then warm: a slow cold start disappears inside a warm-run average, exactly what a real user notices. Watch a slow percentile too: nine good runs and a bad tenth isn't fast, it's unreliable.
None of this survives neglect. A fragile gain evaporates the moment a driver or runtime shifts underneath it, and you won't notice until something breaks. Keep a small script and a few prompts you care about, then log results in a plain-text file, so retesting after an upgrade takes minutes, not an afternoon. Once provenance is on record and the setup clears your latency and quality bar, stop tuning and leave headroom for the next long prompt and the model you'll try next month.
The edge I haven't solved is what happens before the hash exists. Pinning a revision protects you from a swap after the fact, not from the artifact being wrong the moment it was first uploaded, and there's no cheap way to audit that gap yourself. Converters make it worse: they need real write access to disk, so you can't sandbox one into uselessness, and how much access is enough stays a judgment call I make case by case, not from a rule. I don't have a clean answer for either one yet.