zcbot/evaluation/suite.py

28 lines
896 B
Python

"""任务集读取与静态校验。"""
from __future__ import annotations
import json
from pathlib import Path
from .models import EvalConfigError, EvalSuite
from .scoring import validate_assertion
def load_suite(path: Path) -> EvalSuite:
try:
raw = json.loads(path.read_text(encoding="utf-8"))
except FileNotFoundError as exc:
raise EvalConfigError(f"suite 文件不存在: {path}") from exc
except json.JSONDecodeError as exc:
raise EvalConfigError(
f"suite JSON 解析失败: {path}:{exc.lineno}:{exc.colno}: {exc.msg}"
) from exc
suite = EvalSuite.from_dict(raw)
for case in suite.cases:
for assertion in case.assertions:
try:
validate_assertion(assertion)
except ValueError as exc:
raise EvalConfigError(f"case {case.id!r}: {exc}") from exc
return suite