overview / coverage.py
Johannes Janosovits
foo
96adbdd
Raw
History Blame Contribute Delete
9.83 kB
"""
Folder-level eval coverage for lm-evaluation-harness tasks.
SKIP_LIST: folders intentionally excluded from evaluation, with reasons.
Run as __main__ to regenerate coverage_summary.json from the HF dataset.
"""
from __future__ import annotations
# ── All task folders from lm_eval/tasks/ ─────────────────────────────────────
# (lm-evaluation-harness @ current HEAD, non-folder entries excluded)
ALL_FOLDERS: list[str] = [
"aclue", "acpbench", "aexams", "afrimgsm", "afrimmlu", "afrixnli",
"afrobench", "agieval", "aime", "alghafa", "anli", "arab_culture",
"arab_culture_completion", "arabic_leaderboard_complete",
"arabic_leaderboard_light", "arabicmmlu", "aradice", "arc", "arc_mt",
"arithmetic", "asdiv", "babi", "babilong", "bangla", "basque_bench",
"basqueglue", "bbh", "bbq", "bear", "belebele", "benchmarks", "bertaqa",
"bhs", "bigbench", "blimp", "blimp_nl", "c4", "cabbq", "careqa",
"catalan_bench", "ceval", "chartqa", "click", "cmmlu", "cnn_dailymail",
"code_x_glue", "commonsense_qa", "common_voice", "copal_id", "coqa",
"crows_pairs", "csatqa", "darija_bench", "darijahellaswag", "darijammlu",
"discrim_eval", "drop", "e2lmc", "egyhellaswag", "egymmlu", "eq_bench",
"esbbq", "eus_exams", "eus_proficiency", "eus_reading", "eus_trivia",
"evalita_llm", "fda", "fld", "french_bench", "galician_bench",
"glianorex", "global_mmlu", "global_piqa", "glue", "gpqa", "graphwalks",
"groundcocoa", "gsm8k", "gsm8k_platinum", "gsm_plus", "haerae",
"headqa", "hellaswag", "hendrycks_ethics", "hendrycks_math",
"histoires_morales", "hrm8k", "humaneval", "humaneval_infilling",
"icelandic_winogrande", "ifeval", "inverse_scaling",
"japanese_leaderboard", "jfinqa", "jsonschema_bench", "kbl", "kmmlu",
"kobest", "kormedmcqa", "lambada", "lambada_cloze",
"lambada_multilingual", "lambada_multilingual_stablelm", "leaderboard",
"libra", "lingoly", "llama3", "lm_syneval", "logiqa", "logiqa2",
"longbench", "longbench2", "mastermind", "mathqa", "mbpp", "mc_taco",
"med_concepts_qa", "meddialog", "mediqa_qa2019", "medmcqa",
"med_prescriptions", "medqa", "medtext", "med_text_classification",
"mela", "meqsum", "metabench", "mgsm", "mimic_repsum", "minerva_math",
"mlqa", "mmlu", "mmlu_pro", "mmlu-pro-plus", "mmlu_prox", "mmlu-redux",
"mmlu-redux-spanish", "mmlusr", "mmmu", "model_written_evals",
"moral_stories", "mts_dialog", "multiblimp", "mutual", "noreval",
"noticia", "nq_open", "okapi", "olaph", "openai-mmmlu", "openbookqa",
"paloma", "paws-x", "pile", "pile_10k", "piqa", "pisa", "polemo2",
"portuguese_bench", "prost", "pubmedqa", "qa4mre", "qasper", "race",
"realtoxicityprompts", "ruler", "sciq", "score", "scrolls",
"simple_cooccurrence_bias", "siqa", "slr_bench", "spanish_bench",
"squad_completion", "squadv2", "storycloze", "super_glue", "swag",
"swde", "tinyBenchmarks", "tmlu", "tmmluplus", "toxigen", "translation",
"triviaqa", "truthfulqa", "truthfulqa-multi", "turblimp", "turkishmmlu",
"ulqa", "unitxt", "unscramble", "webqs", "wikitext", "winogender",
"winogrande", "wmdp", "wmt2016", "wsc273", "xcopa", "xnli", "xnli_eu",
"xquad", "xstorycloze", "xwinograd", "zhoblimp",
]
# ── Skip list ─────────────────────────────────────────────────────────────────
# Value = human-readable reason (fill in as needed).
SKIP_LIST: dict[str, str] = {
# ── Non-English / regional ────────────────────────────────────────────────
"aclue": "",
"afrimgsm": "",
"afrimmlu": "",
"afrixnli": "",
"afrobench": "",
"alghafa": "",
"arab_culture": "",
"arab_culture_completion": "",
"arabic_leaderboard_complete": "",
"arabic_leaderboard_light": "",
"arabicmmlu": "",
"aradice": "",
"arc_mt": "",
"bangla": "",
"basque_bench": "",
"basqueglue": "",
"belebele": "",
"bertaqa": "",
"bhs": "",
"cabbq": "",
"catalan_bench": "",
"ceval": "",
"cmmlu": "",
"copal_id": "",
"darija_bench": "",
"darijahellaswag": "",
"darijammlu": "",
"egyhellaswag": "",
"egymmlu": "",
"esbbq": "",
"eus_exams": "",
"eus_proficiency": "",
"eus_reading": "",
"eus_trivia": "",
"evalita_llm": "",
"french_bench": "",
"galician_bench": "",
"haerae": "",
"histoires_morales": "",
"hrm8k": "",
"icelandic_winogrande": "",
"japanese_leaderboard": "",
"jfinqa": "",
"kbl": "",
"kmmlu": "",
"kobest": "",
"kormedmcqa": "",
"lambada_multilingual": "",
"lambada_multilingual_stablelm": "",
"libra": "",
"lingoly": "",
"mela": "",
"mgsm": "",
"mlqa": "",
"noreval": "",
"noticia": "",
"okapi": "",
"openai-mmmlu": "",
"paws-x": "",
"polemo2": "",
"portuguese_bench": "",
"spanish_bench": "",
"tmlu": "",
"tmmluplus": "",
"turkishmmlu": "",
"turblimp": "",
"xcopa": "",
"xnli_eu": "",
"xwinograd": "",
"zhoblimp": "",
# ── Code execution required ───────────────────────────────────────────────
"code_x_glue": "",
"humaneval": "",
"humaneval_infilling": "",
"mbpp": "",
# ── Aggregate / meta benchmark collections ────────────────────────────────
"benchmarks": "",
"leaderboard": "",
"llama3": "",
"metabench": "",
"tinyBenchmarks": "",
# ── Large corpus / perplexity-only ────────────────────────────────────────
"c4": "",
"paloma": "",
"pile": "",
"pile_10k": "",
"wikitext": "",
}
# ── Core logic ────────────────────────────────────────────────────────────────
def _folder_for_task(task: str, folder_set: set[str]) -> str | None:
"""Return the longest folder name that is a prefix of task (with separator)."""
best: str | None = None
for folder in folder_set:
if task == folder or task.startswith(folder + "_") or task.startswith(folder + "-"):
if best is None or len(folder) > len(best):
best = folder
return best
def compute_coverage(evaluated_tasks: set[str]) -> dict[str, dict]:
"""
Returns a dict mapping each folder name to its coverage info:
status: "evaluated" | "partial" | "skipped" | "not_started"
skip_reason: str | None
matched_tasks: list[str] (evaluated task names mapped to this folder)
"""
folder_set = set(ALL_FOLDERS)
# Map every evaluated task to its folder
folder_hits: dict[str, list[str]] = {f: [] for f in ALL_FOLDERS}
for task in evaluated_tasks:
folder = _folder_for_task(task, folder_set)
if folder:
folder_hits[folder].append(task)
result: dict[str, dict] = {}
for folder in ALL_FOLDERS:
hits = folder_hits[folder]
if folder in SKIP_LIST:
status = "skipped"
elif not hits:
status = "not_started"
elif folder in evaluated_tasks:
# The group task itself was evaluated β†’ full run
status = "evaluated"
else:
status = "partial"
result[folder] = {
"status": status,
"skip_reason": SKIP_LIST.get(folder),
"matched_tasks": sorted(hits),
}
return result
def summary_stats(coverage: dict[str, dict]) -> dict[str, int]:
counts: dict[str, int] = {"evaluated": 0, "partial": 0, "skipped": 0, "not_started": 0}
for info in coverage.values():
counts[info["status"]] += 1
return counts
# ── CLI: regenerate coverage_summary.json ────────────────────────────────────
if __name__ == "__main__":
import json, os
from datetime import datetime, timezone
from pathlib import Path
from pathlib import PurePosixPath
from huggingface_hub import HfApi, hf_hub_download
REPO = "MIMIR-AI-ROUTER/harness_evals"
TOKEN = os.getenv("HF_TOKEN")
print("Fetching file list...")
api = HfApi(token=TOKEN)
all_files = sorted(api.list_repo_files(REPO, repo_type="dataset"))
result_files = [
f for f in all_files
if PurePosixPath(f).name.startswith("results_") and f.endswith(".json")
]
print(f" {len(result_files)} result files found")
evaluated: set[str] = set()
for filename in result_files:
local = hf_hub_download(REPO, filename, repo_type="dataset", token=TOKEN)
data = json.load(open(local))
evaluated.update(data.get("results", {}).keys())
print(f" {len(evaluated)} unique evaluated tasks")
coverage = compute_coverage(evaluated)
stats = summary_stats(coverage)
out = {
"generated_at": datetime.now(timezone.utc).isoformat(),
"stats": stats,
"folders": coverage,
}
dest = Path(__file__).parent / "coverage_summary.json"
dest.write_text(json.dumps(out, indent=2))
print(f"\nWrote {dest}")
print(f" evaluated: {stats['evaluated']}")
print(f" partial: {stats['partial']}")
print(f" skipped: {stats['skipped']}")
print(f" not_started: {stats['not_started']}")