Download verify_submission.py from SinhalaMMLU-SharedTask/team-riswan: direct link, hf CLI and curl.
- Browser
- Download file 6.05 kB
-
https://huggingface.co/SinhalaMMLU-SharedTask/team-riswan/resolve/main/verify_submission.py
- Command line
-
hf download hf://SinhalaMMLU-SharedTask/team-riswan/verify_submission.py
-
curl -L -o verify_submission.py https://huggingface.co/SinhalaMMLU-SharedTask/team-riswan/resolve/main/verify_submission.py
6.05 kB
| """Audit historical artifacts without calling a model or using gold answers.""" | |
| import argparse | |
| import ast | |
| import hashlib | |
| import importlib.util | |
| import json | |
| from pathlib import Path | |
| HERE = Path(__file__).resolve().parent | |
| def load_module(name, path): | |
| spec = importlib.util.spec_from_file_location(name, path) | |
| m = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(m) | |
| return m | |
| def check(condition, message): | |
| if not condition: | |
| raise ValueError(message) | |
| def audit(data=None): | |
| merger = load_module('v9_merge', HERE / 'training/ensemble_v9.py') | |
| runner = load_module('v9_runner', HERE / 'inference.py') | |
| manifest = json.loads((HERE / 'submission_manifest.json').read_text()) | |
| submitted = (HERE / 'predictions.jsonl').read_bytes() | |
| check(hashlib.sha256(submitted).hexdigest() == manifest['predictions_sha256'], 'Submitted prediction hash changed') | |
| maps = {} | |
| for name, entry in manifest['passes'].items(): | |
| path = HERE / entry['file'] | |
| check(hashlib.sha256(path.read_bytes()).hexdigest() == entry['sha256'], f'Pass hash changed: {name}') | |
| maps[name] = merger.load_map(path) | |
| check(len(maps[name]) == entry['rows'], f'Pass row count changed: {name}') | |
| records = [json.loads(line) for line in submitted.splitlines() if line.strip()] | |
| keys = [merger.key_of(r) for r in records] | |
| check(len(keys) == len(set(keys)), 'Duplicate submitted key') | |
| check(all(r['answer'] in {'1','2','3','4'} for r in records), 'Invalid submitted answer') | |
| check(set(keys) == set(maps['p1']), 'Pass 1 and submission keys differ') | |
| check(all(set(m) <= set(keys) for m in maps.values()), 'Unknown key in a pass') | |
| pos = {tuple(k) for k in json.loads((HERE / 'training/passes/positional_option_keys.json').read_text())} | |
| check(pos <= set(keys), 'Unknown positional key') | |
| rebuilt = ''.join(json.dumps({**r, 'answer': merger.merge_one(merger.key_of(r), pos, **maps)}, ensure_ascii=False)+'\n' for r in records).encode() | |
| check(rebuilt == submitted, 'Archival vote does not reproduce submitted bytes') | |
| check(all(runner.merge_one(k, pos, **maps) == merger.merge_one(k, pos, **maps) for k in keys), 'Runner and archive merger disagree') | |
| result = {'submission_id': manifest['codabench_submission_id'], 'rows':len(records), 'sha256':manifest['predictions_sha256'], | |
| 'saved_pass_merge_byte_identical':True, 'pass_counts':{k:len(v) for k,v in maps.items()}, | |
| 'fresh_model_inference_verified':False, 'rules_compliance_certified':False} | |
| if data: | |
| qs = runner.prepare(runner.load_questions('', local_data=data)) | |
| check({runner.kof(q) for q in qs} == set(keys), 'Dataset key set differs') | |
| actual_pos = {runner.kof(q) for q in qs if runner.POS_RE.search(' '.join(map(str,q['choices'])))} | |
| check(actual_pos == pos, 'Recorded positional filter differs from input text') | |
| priority = runner.priority_order(qs, maps['cot'], maps['dr']) | |
| t2 = {runner.kof(q) for q in priority if q['_level']=='hard' or maps['cot'][runner.kof(q)] != maps['dr'][runner.kof(q)]} | |
| t3 = {runner.kof(q) for q in qs if (maps['p1'][runner.kof(q)] != maps['p2'][runner.kof(q)] if runner.kof(q) in maps['p2'] else maps['p1'][runner.kof(q)] != maps['cot'][runner.kof(q)] or maps['p1'][runner.kof(q)] != maps['dr'][runner.kof(q)])} | |
| check(t2 == set(maps['p2']), 'Pass 2 target rule mismatch') | |
| check(t3 == set(maps['p3']), 'Pass 3 target rule mismatch') | |
| mac_rows = [json.loads(l) for l in (HERE / manifest['passes']['mac']['file']).read_text().splitlines() if l.strip()] | |
| check([merger.key_of(r) for r in mac_rows] == [runner.kof(q) for q in priority[:len(mac_rows)]], 'Mac prefix does not match original scheduler') | |
| source = ast.parse((HERE / 'training/evidence/original_cell5_pass4_pass5.py').read_text()) | |
| literal = None | |
| for node in source.body: | |
| if isinstance(node, ast.Assign) and any(isinstance(t, ast.Name) and t.id=='TARGET_IDX' for t in node.targets): | |
| literal = next(n.value for n in ast.walk(node.value) if isinstance(n,ast.Constant) and isinstance(n.value,str) and ',' in n.value and len(n.value) > 10) | |
| check(literal is not None, 'Original target indices not found') | |
| indices = {int(v.strip()) for v in literal.split(',') if v.strip()} | |
| canonical = sorted(qs, key=lambda q:(runner.LEVEL_RANK[q['_level']],q['_file'])) | |
| check({runner.kof(q) for j,q in enumerate(canonical) if j in indices} == t3, 'Original literal target set differs') | |
| t45 = t3 - pos | |
| for n in ['p4','p5']: | |
| check(set(maps[n]) <= t45, f'Unexpected {n} key') | |
| examples = json.loads((HERE / 'data/few_shot_examples.json').read_text()) | |
| qtexts = {' '.join(q['question'].split()) for q in qs} | |
| overlap = [{'category':cat,'index':j} for cat,exs in examples.items() for j,ex in enumerate(exs) if ' '.join(ex['question'].split()) in qtexts] | |
| result['input_checks'] = {'pass2_targets':len(t2),'pass3_targets':len(t3),'literal_notebook_targets_match':True, | |
| 'pass45_targets':len(t45),'mac_priority_prefix_match':True, | |
| 'omitted_keys':{n:sorted([list(k) for k in t45-set(maps[n])],key=str) for n in ['p4','p5']}, | |
| 'few_shot_exact_text_overlaps':overlap, | |
| 'overlap_check_limit':'Exact normalized question text only; not semantic overlap or contamination certification.'} | |
| return result | |
| def main(): | |
| ap = argparse.ArgumentParser(description=__doc__) | |
| ap.add_argument('--data', help='optional local folder containing easy/medium/hard question JSON') | |
| ap.add_argument('--report', help='optional JSON report path') | |
| args = ap.parse_args() | |
| result = audit(args.data) | |
| text = json.dumps(result, ensure_ascii=False, indent=2)+'\n' | |
| if args.report: | |
| Path(args.report).write_text(text) | |
| print(text) | |
| if __name__ == '__main__': | |
| main() | |