import json, urllib.request, urllib.parse, sys # number -> explicit repos, or "?search term" M = {47787:["BlinkDL/rwkv7-g1","?rwkv7"],47692:["amazon/chronos-2"],45099:["naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B"], 43671:["?Qwen3-TTS"],42758:["microsoft/VibeVoice-1.5B"],42209:["?evo2"],41081:["lmms-lab/LLaVA-OneVision-1.5-8B-Instruct"], 40649:["StarJiaxing/HumanOmni-7B"],38708:["yigitbekir/Bert2D-cased-Turkish-128K-WWM-NSW2"],37165:["?QLIP"],36817:["EuroBERT/EuroBERT-210m"], 36398:["?TransPixar"],36205:["?dino-detr"],36111:["deepseek-ai/deepseek-vl2"],35882:["?co-detr"],34651:["LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct"], 32164:["dereksiyuanli/masa"],30995:["nomic-ai/nomic-embed-text-v1.5","nomic-ai/nomic-embed-code"],30791:["deepseek-ai/DeepSeek-V2"], 29823:["?MoAI"],29482:["?LargeWorldModel"],27453:["?audiomae"],27031:["GLIPModel/GLIP"],26628:["lj1995/VoiceConversionWebUI"], 26269:["tensorgirl/TFaugvit"],25293:["?massformer"],25123:["charactr/vocos-mel-24khz","charactr/vocos-encodec-24khz"],23846:["?LaVIN"], 22315:["?megatron-t5"],22178:["?beit3"],20133:["?compact-transformer"],19081:["?unified-io"],17339:["?trillsson"],17224:["?albef"], 16466:["?teams-electra"],15763:["?tunet"],12807:["?blenderbot2"],9526:["?smith"],7675:["?performer"]} API="https://huggingface.co/api/models" def get(u): try: return json.load(urllib.request.urlopen(u, timeout=20)) except Exception as e: return None out={} for i,(n,specs) in enumerate(M.items(),1): res=[] for s in specs: if s.startswith("?"): hits=get(f"{API}?search={urllib.parse.quote(s[1:])}&sort=downloads&direction=-1&limit=3") or [] res+= [h["id"] for h in hits] else: res.append(s) stats=[] for rid in res[:3]: d=get(f"{API}/{rid}?expand[]=downloads&expand[]=likes&expand[]=createdAt&expand[]=safetensors&expand[]=cardData&expand[]=tags") if d: stats.append({"id":rid,"dl":d.get("downloads"),"likes":d.get("likes"),"created":(d.get("createdAt") or "")[:7], "params":(d.get("safetensors") or {}).get("total"),"license":((d.get("cardData") or {}).get("license")),"remote":"custom_code" in (d.get("tags") or [])}) out[n]=stats print(f"[{i}/{len(M)}] #{n} " + "; ".join(f"{s['id']} dl={s['dl']} likes={s['likes']} {s['created']} p={s['params']} lic={s['license']} rc={s['remote']}" for s in stats), flush=True) json.dump(out,open("nm2_stats.json","w"),indent=1)