Conversation
LM-Harmony publishes one file holding 24 benchmarks x 61 open-weights models x 2 evaluation protocols, with a standard error for every cell. The two protocols are the reason the source exists and the reason it needs care: direct_eval is an ordinary zero-shot lm-evaluation-harness number, while train_before_test fine-tunes the model on the task's own training split first. They share an evaluation_name because they are the same benchmark, and only direct_eval takes a canonical metric_id, so a consumer joining on accuracy cannot pool a zero-shot score with a task-trained one. Task metadata comes from the `task:` field of the vendored lm_eval task yamls at the pinned commit rather than from filenames, because qnli.yaml also exists under basqueglue/ and social_iqa.yaml under bigbench/ -- path matching would have converted the wrong dataset. Eleven of sixteen dataset paths are legacy Hub names, so hf_repo carries the resolved repo and the string the harness asked for stays beside it. cola is scored by Matthews correlation on [-1, 1] and nine models score below zero, so its bounds are not the [0, 1] the other metrics use. acc_norm resolves to no registry metric under any spelling tried and keeps the harness key rather than being folded into accuracy, which measures something else; registering it upstream is the better fix and is a separate PR. The three post-cutoff perplexity corpora in the matrix have no committed task definition, so the dataset their scores cover cannot be named. They are recorded as exclusions rather than published under an invented dataset. A task that appears upstream and is absent from the table is a failure that exits non-zero, not a silent skip. Coverage: 3,087 source cells -> 61 records carrying 2,928 results, 0 dropped, 3 tasks excluded. All 61 pass the CLI validator with semantic checks on and no warnings.
The registry carries length-normalized accuracy as `normalized-accuracy`, reviewed, with `acc_norm` already among its aliases. The hosted resolver returns no_match for every spelling of it because the live Space lags the seed data, and reading that as absence gave the nine acc_norm tasks -- mathqa and sciq among them -- a bare harness key instead of a joinable canonical id. Resolve metric ids against the seed, not the API.
borgr
force-pushed
the
adapter/lm-harmony
branch
from
September 6, 2026 11:18
97eff02 to
3e23a45
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Converts the results matrix behind Train-before-Test Harmonizes Language Model Rankings (arXiv:2507.05195) into
data/lm-harmony/.The source is one file —
notebooks/all_results.jsonin socialfoundations/lm-harmony — shaped{block: {task: {hf_model_id: score}}}over four blocks, 27 tasks and 61 models, with a published standard error for every cell. Model ids are already HFdeveloper/modelstrings, so no developer inference is involved.Coverage: 3,087 source cells → 61 records carrying 2,928 results, 0 dropped, 3 tasks excluded. All 61 pass the CLI validator with semantic checks on and no warnings.
Decision log
Two protocols, one benchmark, and they must not join.
direct_evalis an ordinary zero-shot lm-eval number.train_before_testfine-tunes the model on the task's own training split first, which is the paper's contribution and a different quantity. Both are published, so both are converted. They share anevaluation_namebecause they are the same benchmark, and onlydirect_evaltakes a canonicalmetric_id— the fine-tuned protocol getslm_harmony.train_before_test.<metric>. A consumer joining onaccuracytherefore cannot pool a zero-shot score with a task-trained one. Alternative rejected: onemetric_idwith the protocol only inadditional_details, which leaves the wrong join one carelessGROUP BYaway. Confidence high.Task metadata read from the
task:field, never from filenames. Every dataset, config and split comes from the vendoredlm_eval/tasks/**.yamlat the pinned commit, matched on the yaml's owntask:value. Matching by filename would have converted BasqueGLUE'sqnliand BigBench'ssocial_iqa— right name, wrong dataset, and the record would have validated. Confidence high.colais bounded[-1, 1]. It is scored by Matthews correlation, and nine of the 61 models score below zero. Under the[0, 1]the other metrics use, those nine are a hard validator error. Confidence high.acc_norm→normalized-accuracy. This one I got wrong first. The hosted resolver returnsno_matchfor every spelling ofacc_norm, so the first version emitted the bare harness key as themetric_id. The registry does carry it, asnormalized-accuracywithacc_normalready an alias — the live Space simply lags the seed data. Nine tasks includingmathqaandsciqnow carry a joinable canonical id instead of a fragmenting one. Worth generalising: an APIno_matchis not evidence a registry entity is absent. Confidence high after correction.Legacy dataset paths resolved, and the source's own spelling kept. Eleven of sixteen
dataset_pathvalues are legacy Hub names that redirect (sciq→allenai/sciq,glue→nyu-mll/glue,math_qa→allenai/math_qa).hf_repocarries the resolved repo;additional_details.lm_eval_dataset_pathkeeps what the harness actually asked for. Confidence high.Three tasks deliberately not published.
wiki_2025,arxiv_2025andstackexchange_2025are the paper's post-cutoff perplexity corpora, scored asbits_per_bytefor 53 of the 61 models. The repository commits no task definition for them, so the dataset the scores cover cannot be named, andbits_per_bytehas no registry metric. They areSourceRecordExclusions in the report rather than records under an invented dataset. Confidence medium — a maintainer may prefer them published withsource_type: other. This is the one place I would welcome a different call.An unrecognised task is a failure, not a skip. A task appearing upstream and absent from the adapter's table exits non-zero rather than being dropped, because its dataset, split and metric would otherwise be guesses. Confidence high.
Two provenance caveats travel with every result rather than being tidied away. lm-eval scores what it calls a task's test docs, which for a benchmark withholding test labels is its validation split. And the published runs cap the scored split with
--dataset_param.max_num_testunder a seeded permutation, so a split larger than the cap was scored on a random subsample. The source does not state the resulting n per task, sonum_samplesis left unset rather than derived from the stderr. Confidence high — deriving n would have been inference dressed as data.Automation
Registered in
catalog.pyas a daily unit.--emit-source-versionresolves and prints the upstream commit without downloading the results file, so an unchanged repository is skipped. The revision is resolved to a sha before anything is fetched, and--allow-unpinned-sourceis required to proceed without one, so no record cites a moving reference.--input-jsonreplays a saved payload and requires an explicit--revision, so replayed bytes cannot be attributed to whatevermainis at conversion time.Verification
uv run python -m every_eval_ever validate '<out>/data/lm-harmony/*/*/*.json'— 61 passed, 0 errors, 0 warnings, at the final datastore path with semantic checks on.uv run python -m every_eval_ever.check_duplicate_entries— clean.uv run pytest tests/test_lm_harmony_adapter.py— 21 passed. Offline and fixture-based, including a merge-gate assertion withrun_semantic_checks=True, the[-1, 1]bound, the protocol-separation invariant, exact score and stderr round-trips, and the CLI guards.uv run pytest tests— 1,029 passed, 45 skipped.uv run ruff check— clean.Related
evaleval/EEE_datastorefollows