Repository navigation
v0.9.0
A minor bump for four breaking changes, none of which raise on an old input: a
report.json key unification, a config-format change where a dialect must now
be named rather than inferred, a request-audit contract that only an out-of-tree
dialect can notice, and two new ci95_units rules. The largest theme is
execution-graded evaluation — text-to-SQL, shell, C++ and multi-language
code now run and are judged by what they produce, which is what most of the new
infrastructure exists to support.
Added
- New benchmark tasks & datasets:
- BFCL v3 (single-turn) —
bfcl_v3_{non_live,live}_0shot_genand their_fctwins over 3,641 rows, sieval's first native-function-calling protocol._fcis a new variant word: it changes which model capability is exercised, so Prompt and FC are separate tasks the way BFCL's own leaderboard reports them side by side. Multi-turn is not implemented (#143). - LiveOIBench — 380 of 403 informatics-olympiad problems graded in C++ with IOI-style subtask partial credit and ranked against the contests' real human contestants. The 23 interactive problems are excluded rather than scored zero, so numbers are not comparable to the paper's 403-problem table (#121).
- Ag-LiveCodeBench-X — LiveCodeBench v5's stdin/stdout subset made language-agnostic, with
languagea required task argument because the benchmark measures a different thing per language (#123). - QuoteBench — 56 Bash tasks graded by exact final program state, shipped as two tasks because
rawandnested_shellare two command-path contracts, and the paper's finding is that they reverse the order of 5 of 26 model pairs (#140). - NL2SH-ALFA — natural language to Bash, execution-graded, as an unqualified task and a
_parsetwin; the gap between the two readings reaches 32% on small models (#139). - MultiPL-E — HumanEval in 24 languages and MBPP in 23, with the chat task grading the model's own copy of the prefix, as upstream does deliberately (#138).
- Spider 1.0 — sieval's first in-process SQL execution substrate, with the hardened reading carried by the unqualified task and the delta measured at 99.903% verdict parity against upstream (#124).
- Spider 2.0-lite — all 547 questions over three engines; a credential-less run caps near 24.7%, so a per-backend breakdown always ships beside the headline (#125).
- WikiSQL — upstream's own logical-form protocol, so no model-authored SQL is executed; the grader is anchored on upstream's shipped example predictions (#122).
- MATH-Perturb — 279 Level-5 problems each under simple and hard perturbation, promoted to
stableon a measured deepseek-math-7b-rl alignment run (#130). - SysBench — 500 Chinese 5-turn sessions, LLM-judged (#103).
- SciTaRC — composite QA over raw LaTeX tables (#119).
- BFCL v3 (single-turn) —
- Every metric that can carry an interval now carries its own —
<metric>_ci95, with a new nestedci95_unitsobject saying which population each is clustered on. A headline interval now reaches 52 of 58 reports, and five new population keys ship (n_versions,n_problems_wo_critical_thinking,n_subjects,n_subsets, andn_problemson SimpleQA-Verified). Purely additive:score_ci95andn_problemskeep their spelling and their values, verified over 3,216 paired emitter comparisons (#126). ifeval/multi_if/ifbench_fixedvariants — seven repaired constraint checkers across the family, each with a quantified score delta (#104, #105).report.jsongainsn_truncated+n_scored_rolloutson everygentask, injected by the runner so a task cannot report zero by having forgotten to look. Reported as a pair, because the count alone is unreadable (#113).filtergains composite keys, derived (callable) keys, avalues_file, and arequire_allflag — each pinned intoeffective_config.yamlby a provenance digest that participates in the strict--resumecomparison (#106).- OpenAI Responses API dialect (#141).
TaskRequirements.function_tools, so a task can demand the tools API and be rejected at construction;ModelOutput.tool_callsnow forwards through the legacy bridge, which is what makes the declaration satisfiable (#143).DEFAULT_REQUEST_TIMEOUTis declared instead of inherited — openai's SDK andhttpxdisagree by 120x on the default, so a dialect's connection family used to decide how long a generation could take. No behavioural change today; a trap defused ahead of the first native transport (#112).- Repeated rows record which copy they are, both in the dataset and per sample (#114).
ihevalrecords carry a per-rowkey;extrapreviously named only a cell, so two rows of one cell produced byte-identical records (#111).sysbenchreports every breakdown rate's denominator, and counts what it used to drop (#110).sieval infer startexposes the readiness budget onrun(#135).
Fixed
- IFBench stopped scoring a biased subset when its NLTK corpora are missing.
nltk.downloaddefaults toraise_on_error=False, so offline the import completed as if the data were there and the absence surfaced oneLookupErrorat a time — landing those samples infailswhiledenominator_policy: judgedscored the remainder. The published number was computed over the subset whose constraints never touched NLTK (#109). - A broken grader no longer reads as a wrong answer (#131).
- One task's crash no longer cancels the rest of the batch — a single task raising used to take every sibling runner down with it, losing even tasks that had already finished computing their reports (#117).
t_eval_before_calling_0shot_genomits an axis with no samples behind it instead of writingnull, and reportsn_graded/n_parsedso an absent axis can be read (#116).- A missing split is reported from every dataset transform, not just
filter(#108). - A
--resumeno longer aborts on a field explicitly declared non-matching (#137). - A deploy that never becomes ready says why (#134); a hardware key matches when the GPU reports no memory size (#133).
- Deterministic request seeds are dialect-aware (#118); legacy model provenance is stable (#132).
- A timeout is read off the message prefix rather than by substring match (#142).
Changed
- BREAKING — the LLM-judged family's grader-parse metric is unified to
n_grader_unparsed, replacing four spellings across five tasks. A consumer reading an old name gets a missing key, which reads as "not reported" rather than erroring.judgeis now confined to upstream contract names and prose, never a record field or metric key (#103). - BREAKING — SysBench
ssrchanges meaning under an unchanged key. It is now the paper's mean normalised count of consecutive fully-satisfied turns from a session's start; the old reading reported only the final term and ran ~20 points low. Same key, different number — a consumer diffing an oldreport.jsonagainst a new one sees a silent 20-point jump, not a missing key. SysBench never shipped a run, so no published sieval number is invalidated (#103). - BREAKING (config format) — engine identity no longer selects the request dialect.
infer.backend: sglangno longer activates the native/generatebypass. Atype: genconfig that relied on the implicit native path must declaredialect: sglang_legacyexplicitly. Migration is guarded, not silent: the omitted-dialect case raises pre-I/O and names both options (#120). - BREAKING — the dialect request-audit contract is source-bound.
consumed(path, *wire_evidence)now requires evidence,PreparedRequest.consumed_paths/.passthroughare gone, andbodyis recursively frozen. Both shipped dialects were migrated; a third-party dialect implementingprepare()will not load unmigrated (#129). - BREAKING for a strict consumer of
ci95_units— two rules are now enforced at report-write time: every entry's value must be a population count (n_…), and two metrics sharing one interval must publish the same number within 0.005 points.metric_intervalalso raises on a non-countunitbefore it estimates anything, because the corrupted rate would otherwise reach disk presented as a percentage (#126). vendor/code-evaluatorgains four execution sources — C++ (liveoibench),agnostics,quotebench, and a declarative language table backingcpp/bash/perlfor MultiPL-E — plus its first stateful route (POST /shell-evaluations) and a newGET /languagesprobe, called atsetup()before any inference so an unsupported language cannot burn a full generation budget and reportpass@1 = 0. The three existing executors are untouched, so no existing task's grading moves.- CI's test step cut from 4m41 to 2m07 (#107).
Docs
- Recipe comments trimmed to what they have to carry (#136).