DEV Community

dubleCC
dubleCC

Posted on

How to Check an "Open Weights" Claim in 60 Seconds (and the Three Ways the Check Fools You)

A model gets announced. The post says "open weights." Someone drops a Hugging Face repo ID in the thread. You are about to plan a week of work around it.

The check takes one command. What takes longer is knowing how to read the answer, because all three of the obvious signals lie to you in different ways.

Everything below is real output from 2026-07-27. You can re-run all of it right now, unauthenticated.

Probe 1: does the repo resolve?

curl -s -o /dev/null -w '%{http_code}\n' \
  https://huggingface.co/api/models/moonshotai/Kimi-K3
Enter fullscreen mode Exit fullscreen mode
401
Enter fullscreen mode Exit fullscreen mode

Here is the trap. A 401 reads like "it exists, you just need to log in" — a gated release. So people log in, still see nothing, and conclude the gate is strict rather than that the shelf is empty.

Ask a repo that definitely does not exist:

curl -s https://huggingface.co/api/models/does-not-exist/nope
curl -s https://huggingface.co/api/models/moonshotai/Kimi-K3
Enter fullscreen mode Exit fullscreen mode
{"error":"Invalid username or password."}
{"error":"Invalid username or password."}
Enter fullscreen mode Exit fullscreen mode

Byte-identical. 401 carries zero information about existence.

And gating does not even produce a 401. A genuinely gated repo answers 200 and tells you it is gated:

curl -s https://huggingface.co/api/models/meta-llama/Llama-3.1-8B-Instruct \
  | jq '{gated, private, downloads}'
Enter fullscreen mode Exit fullscreen mode
{
  "gated": "manual",
  "private": false,
  "downloads": 8041649
}
Enter fullscreen mode Exit fullscreen mode

So the rule is the opposite of the intuitive one: gated releases are visible anonymously. A 401 means there is nothing there to be gated.

Probe 2: what did the org actually publish last?

Skip the rumoured ID entirely and ask the org what it has shipped:

curl -s 'https://huggingface.co/api/models?author=moonshotai&sort=lastModified&direction=-1&limit=5' \
  | jq -r '.[] | "\(.lastModified)  \(.id)"'
Enter fullscreen mode Exit fullscreen mode
2026-06-15T07:49:29.000Z  moonshotai/Kimi-K2.7-Code
2026-05-19T09:01:54.000Z  moonshotai/Kimi-K2.6
2026-04-30T03:56:40.000Z  moonshotai/Kimi-K2.5
2026-04-23T02:08:36.000Z  moonshotai/Kimi-K2-Instruct
2026-01-30T04:53:11.000Z  moonshotai/Kimi-VL-A3B-Thinking-2506
Enter fullscreen mode Exit fullscreen mode

The newest thing Moonshot has published is Kimi-K2.7-Code, six weeks old. Same question to Qwen:

2026-07-22T11:58:47.000Z  Qwen/Qwen3-ASR-0.6B-hf
2026-07-22T11:58:31.000Z  Qwen/Qwen3-ASR-1.7B-hf
2026-06-26T08:42:38.000Z  Qwen/Qwen3-ForcedAligner-0.6B-hf
2026-06-25T07:24:16.000Z  Qwen/Qwen-AgentWorld-35B-A3B
2026-05-28T08:07:27.000Z  Qwen/Qwen-Image-Bench
Enter fullscreen mode Exit fullscreen mode

Active orgs, shipping regularly. Neither has published the thing being discussed. This probe is the one that actually settles the question, because it cannot be defeated by a wrong guess at the repo ID.

Probe 3: search, and meet the two decoys

curl -s 'https://huggingface.co/api/models?search=Kimi-K3&limit=10' \
  | jq -r '.[] | "\(.id)  likes=\(.likes)  downloads=\(.downloads)"'
Enter fullscreen mode Exit fullscreen mode
audnai/penclaw-Kimi-K3.0-abliterated-GGUF  likes=82  downloads=0
HFVwr/kimi-k3-article-svg-preview          likes=2   downloads=0
StephYang/qwen3-32B-kimi-k3-8k             likes=0   downloads=0
Enter fullscreen mode Exit fullscreen mode

Three hits, and the two interesting ones fail in opposite directions.

Decoy 1 — the right name, no weights. audnai/penclaw-Kimi-K3.0-abliterated-GGUF, created 2026-07-18, 82 likes. Ask it what files it holds:

curl -s https://huggingface.co/api/models/audnai/penclaw-Kimi-K3.0-abliterated-GGUF \
  | jq -r '.siblings[].rfilename'
Enter fullscreen mode Exit fullscreen mode
.gitattributes
README.md
Enter fullscreen mode Exit fullscreen mode

Eighty-two people endorsed a repository containing no model. Likes are a social signal, not a storage signal, and on a page like this the two point in opposite directions.

Decoy 2 — real weights, wrong model. StephYang/qwen3-32B-kimi-k3-8k, created 2026-07-26, ships 14 genuine safetensors shards. It is a Qwen3-32B derivative wearing the name. If your check was "are there weight files," it passes.

The third hit is a bag of .svg diagrams. Search matches strings, not artifacts.

The positive control: what a real release looks like

Run the same probes against something indisputably released, so you know the shape you are looking for:

curl -s https://huggingface.co/api/models/openai/gpt-oss-120b \
  | jq '{gated, downloads, files: (.siblings|length),
         shards: ([.siblings[].rfilename | select(endswith(".safetensors"))] | length)}'
Enter fullscreen mode Exit fullscreen mode
{
  "gated": false,
  "downloads": 4380610,
  "files": 37,
  "shards": 22
}
Enter fullscreen mode Exit fullscreen mode

Twenty-two shards, a model.safetensors.index.json, a LICENSE blob, four million downloads. That is what "released" leaves behind. Not one of those is present on a repo that is only a name.

The checklist

REPO=org/model-name; ORG=org

# 1. Does it resolve at all? (401 == no information, not "gated")
curl -s -o /dev/null -w '%{http_code}\n' "https://huggingface.co/api/models/$REPO"

# 2. What has the org ACTUALLY published, most recent first?
curl -s "https://huggingface.co/api/models?author=$ORG&sort=lastModified&direction=-1&limit=5" \
  | jq -r '.[] | "\(.lastModified)  \(.id)"'

# 3. Is there storage behind the name — shards, a licence?
#    `.siblings // []` matters: on a 401 there is no siblings key, and bare
#    `.siblings[]` aborts with "Cannot iterate over null" on exactly the repos
#    you most want to check.
curl -s "https://huggingface.co/api/models/$REPO" \
  | jq '{gated, downloads,
         shards: ([(.siblings // [])[].rfilename | select(endswith(".safetensors"))] | length),
         licence: [(.siblings // [])[].rfilename | select(test("license"; "i"))]}'

# 4. Who else is squatting the name?
curl -s "https://huggingface.co/api/models?search=${REPO#*/}&limit=10" \
  | jq -r '.[] | "\(.id)  likes=\(.likes)  downloads=\(.downloads)"'
Enter fullscreen mode Exit fullscreen mode

Four commands, no auth, under a minute. The failure mode worth internalising is that an announcement, a benchmark table, and a repo with 82 likes can all exist while the weights do not. Downloads and shard counts are the only signals in that list that require someone to have actually uploaded a model.

I keep a running tracker of the Kimi K3 / Qwen 3.8 case specifically — which architecture claims are checkable, where each benchmark number originates, and an update log for when files do appear — over on my site. If you would rather just have the reproducible checks, the four commands above are the whole method.

The one habit worth keeping: when someone says open weights, ask the org what it published, not the rumour what it is called.

Top comments (0)