Repository navigation
2.5.0
What's Changed
A suite can declare the modules it needs imported.
Added
-
plugins:on a suite: a list of module paths the runner imports before it looks up anytype, so a suite that names a custom adapter or grader resolves it without a flag at the call site. Registration is an import side effect and nothing in the engine imports a consumer's module on its own, so until now every entry point had to remember--plugins my.graders(CLI) or a bareimport my.graders(Python API) - and the two could disagree. A suite is now self-contained: the same file runs from the CLI, from a consumer's ownrun_eval.py, and from a test with nothing to remember.--pluginsis unchanged and still the way to add a module without editing the suite, which would changesuite_hash.The import happens when a run starts, never in
load_suite. Parsing, hashing, diffing or reporting on a suite executes no consumer code, so a suite you have not decided to run is still only data.compareandreporttherefore do not import a suite's plugins - they do not need the registries.A module that cannot be imported raises
ConfigErrornaming it, rather than the unknown-typeerror one lookup later.
Fixed
examples/quickstart/run_eval.pycalledJsonlOutboxExporter.export(), removed when 2.2.0 named the exporter seam, sojust example-apihad been failing withAttributeErrorsince. It now exports score rows only, which is the one grain the store has: a scorecard is a read-time aggregation over those rows, so exporting it too would persist something derived that could disagree with them.
Changed
examples/quickstartdeclares its ownplugins:and no longer needs--pluginson the command line, nor theimport ... # noqa: F401that three of its entry points carried to force registration.graders.pyno longer importsadapter.pyfor the side effect either. The example is the same eval; it just stops demonstrating the workaround.
Upgrading: nothing breaks. Existing suites have no plugins: key and keep working exactly as before, with --plugins or an explicit import. Adding the key to a suite changes its suite_hash, which is correct - it changes what code runs - so expect one re-baseline on the suites you convert.