28 lines
896 B
Python
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
|