Repository navigation
v0.11.0
A minor bump: sieval leaderboard is removed and SiEval is scoped to an
evaluation engine, and a resume is now admitted by the result schema version
instead of the package version. No stage identity changes: IDENTITY_SCHEMA
and RESULT_SCHEMA_VERSION are both 1, every built-in task's grader digest is
the one 0.10.2 computes, and 0.10.0, 0.10.1 and 0.10.2 result directories,
local builds included, resume. anomalies.json's rules_hash changes, since
the rule set gained context_overflow.
Migrating from 0.10.x
sieval leaderboard runis nowsieval eval, with the same options.sieval leaderboard report/list, alignment cards and the shipped leaderboard specs are gone; compare runs from their result files andmeta.json. A config'salignment:block loads with a warning and is ignored.- Import the engine from
sieval.cli.session.sieval.cli.leaderboard.sessionstill works for this release, with aDeprecationWarning, and forwards every name. - Each task directory gains
requests.jsonl, one line per model request attempt. Setrunner_config.record_requests: falseto turn it off. - A prompt longer than the context window scores as wrong and is flagged by the
context_overflowanomaly, instead of failing the sample; it counts underreport.jsonsieval.context_overflowandanomalies, notfailed. A task declarescontext_overflow = "fail"to keep the failure. - The resume gate reads
meta.jsonresult_schema_version. A directory without it maps from itsversion(0.10.0 or later is schema 1), so 0.10.x directories resume as they are. Replaceresume_version_verdictwithresume_schema_verdict.
Added
requests.jsonl: every model request attempt is recorded. One line per attempt beside a task's shards: phase, role, model, sample, attempt number, timings (connect_sis the wait for a pooled connection), HTTP status or exception class, provider request id, retry wait, usage, and the occupancy of every limiter it ran under. Judges and extractors are covered without task code.profile.jsongains a per-phase, per-modelrequestssummary,report.json'ssievalblock its counts and limiter peaks, and eachmeta.jsonruns[]entry the run's own counts. The file is append-only, rotated (request_log_max_bytes,request_log_max_files), and read by nothing: no identity, digest or score depends on it.record_requests: falseturns it off (#197, #201).sieval run --checkpoint <path>andsieval run|eval --api-base <url> --model <name>add the onemodels:entry a config with onlydatasets:andtasks:lacks, andeffective_config.yamlrecords it, so a rerun or resume needs no flags. Both flags together,--api-basewithout--model, or either on a config that defines models is refused before anything launches;--dry-runreports it as thecli_modelcheck (#195, #198).result_schema_versioninmeta.json(RESULT_SCHEMA_VERSION, starting at 1) versions the result directory a resume reads, separately fromidentity.schema. The package version stays inversionandruns[].sievalas provenance (#202, #203).context_overflowanomaly rule (gen tasks), andModel.context_overflow_outputfor a task that measures its own prompt and records the overflow without sending it (#206, #207).
Changed
- BREAKING — SiEval is an evaluation engine. The
leaderboardcommand group is removed withrun,reportandlist;sieval eval(cli/eval.py) replacessieval leaderboard runand always reportscommand="eval"/eval.dry_run. The engine moves tosieval.cli.session.card.py,catalog.py,scanner.py,annotation.py, the leaderboard renderers andleaderboards/are deleted;examples/leaderboard-math-sft.yamlis nowexamples/math-suite.yaml(#194, #199). - BREAKING — resume compatibility is keyed on the result schema version, not the package version. A resume refuses another schema version, naming both schema versions and both SiEval versions. A directory without the field maps from its
version: 0.10.0 and later, local builds included, is 1; older, unparseable or0.0.0ones are refused as before. Dev and local builds (0.10.2+gc18745b) now resume across builds when the schema matches.resume_version_verdictis replaced byresume_schema_verdict(#202, #203). - A prompt longer than the model's context window is scored as wrong, not failed. When the server refuses the model under test's prompt as too long (SGLang's "is longer than the model's context length" or "Requested token count exceeds the model's maximum context length", vLLM's and OpenAI's "maximum context length", a 400 or 413), the call inside
inferreturns one empty text per rollout with finish reasoncontext_overflow. The task grades it like any blank answer, thecontext_overflowrule flags it, andreport.json'ssievalblock counts it underanomaliesand the newcontext_overflowkey, not underfailed. It used to fail the sample on every resume, so a run with one never completed. A task declarescontext_overflow = "fail"to keep the failure, now recorded with reasoncontext_overflowand never retried. Timeouts, connection errors, 5xx and a judge's own overflow still fail; a logprob call fails ascontext_overflow. A task that catches the refusal itself (Multi-IF's and SysBench's walks) is unchanged.extraction_failureandempty_postprocessleave such rollouts to the new rule. Inrequests.jsonland the request summaries the refused attempt keeps its status and is counted under outcomecontext_overflowinstead of4xx(#206, #207). - A resume scores a recorded overflow without asking again. A directory whose samples failed with a context-overflow refusal at
infer(as 0.10.x recorded them) resumes them from the recorded refusal when the inference identity matches: no request is sent, no retry is spent, and the sample is graded and counted as above. The recorded message must name a 400 or 413 (or no status, as a stream error does), as live: a 429 or 5xx quoting the words stays a retriable failure. A task whoseinfercalls the model under test more than once, in turn or concurrently, is inferred again instead, since the record cannot say which call was refused. Because a refusal that escapesinfermakes the runner callinferonce more with refusals converted, aninfershould have no side effects beyond its model calls (#206, #207). max_retriesmeans the same on every connection family. The Anthropic and Google clients used to retry only connect failures, so a 429 or 503 from such a judge failed its sample at once. They now retry as the OpenAI SDK does: 408/409/429/5xx and transport errors,x-should-retry,retry-after(-ms)within 60 s, 0.5 s doubling to 8 s with the SDK's jitter. Both families get the SDK's connection limits (1000/100; httpx's default of 100 queued requests past a higher concurrency limit) and follow redirects, and Anthropic's HTTP errors name the provider's reason, as Google's do. The retry policy is renamedsieval-http:max-retries=, so a binding plan made under the old meaning is refused rather than reread (#201).progress.jsonis written off the event loop, asreport.jsonandmeta.jsonare; on a network filesystem its fsync used to stall every task in a session (#196, #200).
Fixed
- The deprecated
sieval.cli.leaderboard.sessionalias forwards every global ofsieval.cli.sessionandsieval.cli.resolution, not only its ten__all__names;getattr(alias, "DETERMINISTIC_DEFAULT_SEED", None)returnedNoneand silently droppedseedin deterministic runs (#204, #205).
Deprecated
sieval.cli.leaderboard.session, kept for one release (#199). The resume aliases deprecated in 0.10.0 (--resume-from,auto_resume,resume_from) are still accepted and still warn.
Identity
RESULT_SCHEMA_VERSION stays 1 although scoring an overflow is a core change that alters results: 0.10.x never finalized an overflowed sample, so a resume reuses no result the change would have made differently, and it builds that sample as a fresh run would. A reused 0.10.x report.json gains context_overflow in its sieval block. Every built-in task's grader digest is 0.10.2's, and inference digests are unchanged.