File size: 6,037 Bytes
e7d8c8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
"""Sweep v2: exact HF repo ids + GitHub clones, from all four dataset documents.
Licence/firewall gating is explicit and enforced."""
import os,json,time,subprocess,shutil
from concurrent.futures import ThreadPoolExecutor, as_completed
os.environ.setdefault("HF_HOME","/workspace/.hf_home")
from huggingface_hub import snapshot_download
TOK=os.environ.get("HF_TOKEN"); OUT="/workspace/aditi/webdata"; GHD="/workspace/aditi/gh"
os.makedirs(OUT,exist_ok=True); os.makedirs(GHD,exist_ok=True)

HF=[  # (repo_id, local, allow_patterns or None)
 ("ai4bharat/IndicCorpV2","indiccorp_v2",["*hi*","*bn*","*ta*","*te*","*mr*","*gu*","*kn*","*ml*","*pa*","*or*","*as*","*ur*","*.json","*.md"]),
 ("ai4bharat/sangraha","sangraha",["verified/hin/*","verified/ben/*","verified/tam/*","verified/urd/*","*.md"]),
 ("CohereForAI/aya_collection","aya_collection",["*templated_indic*","*.md"]),
 ("manueltonneau/india-hate-speech-superset","india_hate_superset",None),
 ("cfilt/HiNER-original","hiner_original",None),
 ("cfilt/HiNER-collapsed","hiner_collapsed",None),
 ("ai4bharat/IN22-Gen","in22_gen_EVAL",None),
 ("bharatgenai/IndicParam","indicparam_EVAL",None),
 ("ai4bharat/MILU","milu_EVAL",None),
 ("haoranxu/FLORES-200","flores200_EVAL",None),
 ("hrshihab/BanFakeNews-2.0","banfakenews2",None),
 ("Nithiwat/claimbuster","claimbuster2",None),
 ("liamdugan/raid","raid2",None),
 ("haoranxu/ALMA-Human-Parallel","alma_parallel",None),
 ("uonlp/CulturaX","culturax",["*hi*","*bn*","*ur*","*ta*","*.md"]),
]
GIT=[ # (url, local)
 ("https://github.com/AI4Bharat/IndicLLMSuite","IndicLLMSuite"),
 ("https://github.com/l3cube-pune/indic-nlp","l3cube-indic-nlp"),
 ("https://github.com/l3cube-pune/MarathiNLP","l3cube-MarathiNLP"),
 ("https://github.com/l3cube-pune/code-mixed-nlp","l3cube-code-mixed-nlp"),
 ("https://github.com/ShareChatAI/MACD","MACD"),
 ("https://github.com/microsoft/GLUECoS","GLUECoS"),
 ("https://github.com/THU-BPM/CHEF","CHEF"),
 ("https://github.com/IKMLab/CFEVER-data","CFEVER-data"),
 ("https://github.com/AliWazir/SiNER-dataset","SiNER-dataset"),
 ("https://github.com/Sheetal83/Ax-to-Grind-Urdu-Dataset","Ax-to-Grind-Urdu"),
 ("https://github.com/haroonshakeel/roman_urdu_hate_speech","roman_urdu_hate_speech"),
 ("https://github.com/rezacsedu/Bengali-Hate-Speech-Dataset","Bengali-Hate-Speech"),
 ("https://github.com/hate-alert/HateCheckHIn","HateCheckHIn"),
 ("https://github.com/LCS2-IIITD/MOMENTA","MOMENTA"),
 ("https://github.com/ramybaly/Article-Bias-Prediction","Article-Bias-Prediction"),
 ("https://github.com/Tariq60/LIAR-PLUS","LIAR-PLUS"),
 ("https://github.com/google-research-datasets/dakshina","dakshina"),
 ("https://github.com/AI4Bharat/IndicBERT","IndicBERT"),
 ("https://github.com/AI4Bharat/indicnlp_catalog","indicnlp_catalog"),
 ("https://github.com/google-research-datasets/indic-gen-bench","indic-gen-bench_EVAL"),
]
# NEVER fetched into the training tree
FIREWALL={"FLORES-200":"NO-TRAIN (publisher) - fetched to *_EVAL only",
 "Bhasha-Abhijnaanam":"NO-TRAIN IndicLID benchmark","IndicGenBench":"Tier-6 eval firewall",
 "IndicParam":"EVAL-ONLY P4 regression tracker","MILU":"EVAL-ONLY",
 "IN22/FLORES":"EVAL-ONLY MT","IndicNLP Corpus":"EXCLUDED CC-BY-NC-SA",
 "Balochi/Saraiki (BECO, NAWA-E-WATAN, Jhoke)":"LICENCE-BLOCKED CC-BY-NC",
 "L3Cube MahaSent/MahaHate/MahaNER":"NC - owner approval required",
 "WikiANN/PAN-X":"SILVER - warm-start only, never eval",
 "MuMiN/TwiBot-22/TweetEval/GoEmotions/Higgs":"excluded per Handover Master"}

def hf_grab(it):
    repo,name,pats=it; t0=time.time(); dest=os.path.join(OUT,name)
    try:
        snapshot_download(repo_id=repo,repo_type="dataset",local_dir=dest,
                          allow_patterns=pats,max_workers=6,token=TOK)
        b=sum(os.path.getsize(os.path.join(d,f)) for d,_,fs in os.walk(dest) for f in fs)
        return {"src":"hf","repo":repo,"local":name,"status":"verified","bytes":b,"secs":round(time.time()-t0)}
    except Exception as e:
        k="gated" if "Gated" in type(e).__name__ or "403" in str(e) else "failed"
        return {"src":"hf","repo":repo,"status":k,"error":f"{type(e).__name__}: {str(e)[:120]}"}

def git_grab(it):
    url,name=it; t0=time.time(); dest=os.path.join(GHD,name)
    if os.path.isdir(dest): shutil.rmtree(dest,ignore_errors=True)
    try:
        r=subprocess.run(["git","clone","--depth","1","--quiet",url,dest],
                         capture_output=True,text=True,timeout=900)
        if r.returncode!=0:
            return {"src":"git","repo":url,"status":"failed","error":r.stderr[:160]}
        b=sum(os.path.getsize(os.path.join(d,f)) for d,_,fs in os.walk(dest)
              for f in fs if os.path.exists(os.path.join(d,f)))
        return {"src":"git","repo":url,"local":name,"status":"verified","bytes":b,"secs":round(time.time()-t0)}
    except Exception as e:
        return {"src":"git","repo":url,"status":"failed","error":str(e)[:160]}

if __name__=="__main__":
    res=[]
    with ThreadPoolExecutor(max_workers=8) as ex:
        futs=[ex.submit(hf_grab,i) for i in HF]+[ex.submit(git_grab,i) for i in GIT]
        for i,f in enumerate(as_completed(futs),1):
            r=f.result(); res.append(r)
            print(f"[{i}/{len(futs)}] {r['status']:9s} {r['src']:3s} {r['repo'][-56:]:56s} "
                  f"{r.get('bytes',0)/1e6:8.0f}MB {r.get('error','')[:60]}",flush=True)
    ok=[r for r in res if r['status']=='verified']
    gated=[r for r in res if r['status']=='gated']
    json.dump({"generated":time.strftime("%Y-%m-%dT%H:%M:%SZ",time.gmtime()),
        "verified":len(ok),"gated":len(gated),"failed":len(res)-len(ok)-len(gated),
        "bytes":sum(r.get('bytes',0) for r in ok),"firewall":FIREWALL,"items":res},
        open("/workspace/aditi/ghdata/_reports/sweep2_ledger.json","w"),indent=2)
    print(f"\nSWEEP2 verified={len(ok)} gated={len(gated)} failed={len(res)-len(ok)-len(gated)} "
          f"{sum(r.get('bytes',0) for r in ok)/1e9:.1f}GB",flush=True)
    for g in gated: print("  GATED (needs licence acceptance):",g['repo'])