48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
"""evalharness.eval -- the evaluation layer.
|
|
|
|
Pipeline: extract -> score -> aggregate, all plugin-driven.
|
|
|
|
from evalharness.eval import evaluate, get_eval
|
|
from evalharness import get_dataset
|
|
|
|
ds = get_dataset('gsm8k')
|
|
report = evaluate(ds, predictions) # recipe auto-resolved by dataset name
|
|
report.save('gsm8k.report.json')
|
|
|
|
Four scoring paradigms: text-compare (implemented), llm-judge (wired via
|
|
runner judge= once ModelAdapter exists), execution & env-reward (slots raise
|
|
LayerNotReady until sandbox/agent layers land).
|
|
"""
|
|
|
|
from .aggregator import AGGREGATOR_REGISTRY, get_aggregator, register_aggregator
|
|
from .extractor import EXTRACTOR_REGISTRY, get_extractor, make_extractor, register_extractor
|
|
from .recipe import EVAL_REGISTRY, EvalRecipe, JudgeConfig, get_eval, list_evals, register_eval
|
|
from .record import EvalReport, SampleResult
|
|
from .registry import EvalRegistry
|
|
from .runner import evaluate
|
|
from .scorer import SCORER_REGISTRY, LayerNotReady, ScoreContext, get_scorer, register_scorer
|
|
|
|
__all__ = [
|
|
'evaluate', 'EvalRecipe', 'JudgeConfig', 'get_eval', 'list_evals', 'register_eval',
|
|
'EvalReport', 'SampleResult', 'LayerNotReady', 'ScoreContext',
|
|
'EXTRACTOR_REGISTRY', 'SCORER_REGISTRY', 'AGGREGATOR_REGISTRY', 'EvalRegistry',
|
|
'register_extractor', 'get_extractor', 'make_extractor',
|
|
'register_scorer', 'get_scorer', 'register_aggregator', 'get_aggregator',
|
|
]
|
|
|
|
|
|
def _discover_builtin_recipes() -> None:
|
|
"""Import every recipe module under ./recipes (import = register)."""
|
|
import importlib
|
|
import pkgutil
|
|
from pathlib import Path
|
|
|
|
pkg_dir = Path(__file__).parent / 'recipes'
|
|
if not pkg_dir.exists():
|
|
return
|
|
for info in pkgutil.iter_modules([str(pkg_dir)]):
|
|
importlib.import_module(f'{__name__}.recipes.{info.name}')
|
|
|
|
|
|
_discover_builtin_recipes()
|