port-evals-to-hub
Skill315 starsChanged 22 days agoApache-2.0View on GitHub
Port Papers With Code evaluation results to Hugging Face Hub benchmark leaderboards (`benchmark:official` datasets) by opening `.eval_results/*.yaml` pull requests on model repos, then keep those PRs visible as ranks drift. Use this whenever the user asks which PwC evals can go to the Hub, to open eval-results PRs for model repos or rows of a candidate CSV, to "port", "migrate", or "push" evals from PwC or a paper/model card to an HF dataset leaderboard, to check why a Hub leaderboard lacks results PwC has, or to re-check, sweep, or clean up open eval-results PRs. Not for adding evals to PwC itself (use add-evals).
- Reads credentials
In this repository35 other files it gives its agents.
- AGENTS.mdAGENTS.md
- frontend/public/llms.txtllms.txt
- add-benchmarkSkill
- add-conferenceSkill
- add-evalsSkill
- add-external-paperSkill
- add-methodSkill
- add-taskSkill
- complete-task-based-on-hfSkill
- complete-taskSkill
- complete-task-v2Skill
- create-thumbnailSkill
- create-trendsSkill
- curate-daily-papersSkill
- enrich-paperSkill
- grill-meSkill
- handoffSkill
- hf-cliSkill
- implementSkill
- lean-code-cleanupSkill
- process-x-bookmarksSkill
- pwc-brandSkill
- pwc-chat-healthSkill
- pwc-cliSkill
- pwc-cron-healthSkill
- pwc-deploySkill
- remote-paper-curationSkill
- reply-github-issueSkill
- resolve-model-paperSkill
- s2-cliSkill
- skill-creatorSkill
- to-ticketsSkill
- update-ai-deadlinesSkill
- verify-evalsSkill
- s2-cliSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 5 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 16
All scripts live in .agents/skills/port-evals-to-hub/scripts/ and run from the repository root.
- Very specific: line 25
Run find_candidates.py with uv run --env-file backend/keys.env python ….
- Very specific: line 32
Run find_candidates.py and work from the candidate rows.
- Distinctive: line 33
When the user works in batches ("rows 46–65"), keep row numbers stable within a CSV, and report every skipped row with its reason.
- Distinctive: line 51
Use the number exactly as the source prints it, in the board's units.
- Distinctive: line 57
if it appears only in an image or chart, say which figure and bar.
- Distinctive: line 58
if the source hides it behind a control (DeepSWE's Models picker, a chart's benchmark toggle), say how to reveal it.
- Distinctive: line 103
every skipped row with its reason (third-party, protocol, checkpoint, contamination, personal account, already declared, outside the top …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Port PwC evals to Hub leaderboards
The Hub's evaluation results feature builds a leaderboard on each official benchmark dataset from .eval_results/*.yaml files in model repos, including files in open PRs. This skill finds PwC results that belong on those leaderboards, verifies each one against its source, and opens one PR per model repo that a maintainer can review and merge in a minute.
A PR is only worth opening if the reviewer can see the result on the leaderboard and find the number at the cited source. Most of the rules below exist because one of those two failed.
Scripts
All scripts live in .agents/skills/port-evals-to-hub/scripts/ and run from the repository root. Write scripts guard their side effects with --apply; without it they only print.
| Script | Purpose |
hub_leaderboard.py | Library: leaderboard views, predicted and live ranks, view links, exact benchmark names, eval.yaml task ids, org vs personal account, benchmarks already declared on a repo. |
find_candidates.py OUT.csv | Read-only DB query. Lists PwC evals with an hf_model_url on the mapped leaderboards, with status candidate, on_board, already_declared, personal_account, discussions_disabled, or repo_missing; candidates from major labs first, newest models first. |
open_eval_prs.py SPEC.json [--apply] | Checks every result in a spec, prints the PRs, and with --apply opens them and appends them to the registry. |
sweep_eval_prs.py [--apply] | Re-checks every registered PR: repoints links to a view where the result is visible, removes invisible results, closes PRs left with none. |
Run find_candidates.py with uv run --env-file backend/keys.env python …; the Hub-only scripts need just uv run python …. The registry defaults to reports/hf-eval-results-prs.json (local, not committed).
Opening, editing, or closing PRs posts publicly on other people's repos. The auto-mode classifier may block --apply; if it does, show the user the exact command and let them run it, then verify the result.
1. Find candidates
- Check the official benchmark list at
https://huggingface.co/api/datasets?filter=benchmark:official&limit=200. If a benchmark is missing fromMAPPINGinfind_candidates.py, read itseval.yaml, find the matching PwC dataset and metric, and add a row. Make sure the PwC metric is the one the Hub task measures (for example MMMU-Pro'smmmu_pro_visiontask is the vision split, not the overall score). - Run
find_candidates.pyand work from thecandidaterows. When the user gives a model, paper, or release instead, collect candidates from its sources directly; the PwC rows are a lead, not the evidence. - When the user works in batches ("rows 46–65"), keep row numbers stable within a CSV, and report every skipped row with its reason.
Repo eligibility:
- Organizations only. Results in personal-account repos never appear on leaderboards.
namespace_kindtells them apart. The user prefers major labs (MAJOR), but any other Hub organization is fine. - The exact evaluated checkpoint. The repo must hold the weights that produced the number. Skip it when the card says the reported results came from another checkpoint (NorthCUA: scores from SFT checkpoints, repo holds a later post-training step), and don't attach a sibling's or base model's score.
- Not already declared. Skip benchmarks the repo declares on main or in any open PR, including PRs from other people.
2. Verify every value at its primary source
Read the model card, paper, README, or blog yourself. Never rely only on the PwC row: PwC values have been wrong (tool-integrated scores stored for no-tool boards, fractions for percent boards, a typo'd digit). When PwC is wrong, fix PwC with the add-evals or verify-evals conventions as well.
Skip a result, or the whole repo, when:
- The score is third-party. For example a card's † numbers from Artificial Analysis, or scores for the model taken from a benchmark's own paper. The source must be the model's authors.
- The protocol differs from the board. Examples: with tools or code execution on a no-tools board (AIME tool-integrated reasoning), inference tricks such as zoom, cropping, verifiers, or agentic refinement on a direct-inference board (ScreenSpot-Pro), a subset of the benchmark (Terminal-Bench run on 88 of 89 tasks), or a different metric or scale. Use the no-tools number when the source gives both, and say so in
notes. - The benchmark is contaminated or may be. For example a tech report admitting overlap, or training data that visibly contains test items. Raise possible contamination with the user rather than deciding silently.
- The board mixes metrics or protocols. For now that means Video-MME-v2: skip it.
- The checkpoint is unfinished ("still training", "under revision").
Use the number exactly as the source prints it, in the board's units. DeepSWE uses percent, so a PwC 0.627 becomes 62.7. When the source shows the same score at two precisions, the model card's precise value wins (44.94 over the blog's 44.9).
3. Make the number findable
The reviewer must be able to find each number at the cited source. open_eval_prs.py warns when the value string is not in the source text. Then write origin so the reviewer can find it anyway:
- name the table, row, and column (
Table 6 … (NorthCUA-Pro row, SSP column)), or quote the sentence (the model card ("On Terminal-Bench 2.0 it scores 9.36%")); - if it appears only in an image or chart, say which figure and bar;
- if the source hides it behind a control (DeepSWE's Models picker, a chart's benchmark toggle), say how to reveal it.
Cite the most direct surface: model card over paper over blog. Use the source.name the Hub shows, such as Model Card, Paper (Table 4), or TMax v1.1 blog.
4. Check top-50 visibility
The leaderboard UI shows ranks 1–50 of the selected view only. A view is a "Parameters Size" tier (max_params: 1B, 3B, 6B, 12B, 32B, 128B, 500B) plus the "Base only" toggle. That toggle is on by default and hides every model whose card declares base_model, which covers most fine-tunes (GUI agents, RL'd terminal agents). predicted_view returns the broadest view where a new result would rank in the top 50, and the PR link opens that view (leaderboard_max_params=…&leaderboard_base_model=false). Drop a result that is visible nowhere.
Gotchas:
- A model without safetensors
num_parametersdrops out of every size-filtered view. A wrong count misplaces it: tmax-27b-v1.1's index claims 2.6M parameters, so it lands in the ≤1B view. Mention metadata bugs like this to the user. - A card that lists itself as its own
base_modelis hidden in the default view. - A PR that edits an existing
.eval_resultsfile previews main's version until merged, so its result is not on the board yet. That doesn't make it invisible: never close such a PR in a sweep. task_idmust be a task in the benchmark'seval.yaml(terminalbench_2,swe_bench_%_resolved), not the split name. A wrong id returns an empty board, which looks like rank 1.open_eval_prs.pyrefuses unknown ids.
5. Open the PRs
Write a spec (see the open_eval_prs.py docstring), with one entry per repo and every eligible benchmark in it. Use notes for the protocol a reviewer needs in order to judge comparability: harness and version, number of tasks and trials, sandbox, no tools, direct inference on the full input. Then:
uv run python .agents/skills/port-evals-to-hub/scripts/open_eval_prs.py /path/spec.json # dry run
uv run python .agents/skills/port-evals-to-hub/scripts/open_eval_prs.py /path/spec.json --applyThe PR format follows meta-models/Muse-Glimmer-30B discussion 8:
- Title: "Add community evaluation results for
<exact benchmark names>". - Body: one bold link per benchmark to the leaderboard view with the result highlighted (
eval_result=<repo>), followed by "These results were extracted from<origin>." and the feature link and automated-PR note. - Benchmark names are written the way their authors write them:
SWE-Bench Pro,olmOCR-Bench,Terminal-Bench 2.0. Add new names toNAMESinhub_leaderboard.pywhen theeval.yamlname differs.
To change a file in an existing PR (for example pointing .eval_results/terminal_bench_2_1.yaml at the right dataset), commit to refs/pr/<num> with HfApi.create_commit(revision=…). Don't open a second PR.
6. Verify and sweep
Right after opening, confirm each PR's results with visible_view (live rank, which can sit a few places below the prediction), and report a table with PR link, benchmark, value, live rank, and view. Ranks drift as other PRs land, so after each batch run:
uv run python .agents/skills/port-evals-to-hub/scripts/sweep_eval_prs.py # dry run
uv run python .agents/skills/port-evals-to-hub/scripts/sweep_eval_prs.py --applyReview the dry run before applying. A sweep may remove a result or close a PR, but only one whose previewable results all fell out of every view. Tell the user which ones it touched.
Report
For each batch, report:
- the PRs opened, with benchmark, value, rank, and view;
- every skipped row with its reason (third-party, protocol, checkpoint, contamination, personal account, already declared, outside the top 50);
- any PwC corrections made;
- metadata problems seen on model repos;
- where the batch stopped, so the next batch starts at the right row.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

