33 lines
876 B
Python
33 lines
876 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
|
|
@dataclass(slots=True, frozen=True)
|
|
class DocsGoldenCase:
|
|
case_id: str
|
|
query: str
|
|
expected_intent: str
|
|
expected_sub_intent: str
|
|
expected_layers: tuple[str, ...]
|
|
rows: tuple[dict, ...]
|
|
|
|
|
|
def load_cases(path: Path) -> list[DocsGoldenCase]:
|
|
payload = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
|
|
items = payload.get("cases") or []
|
|
return [
|
|
DocsGoldenCase(
|
|
case_id=str(item["id"]),
|
|
query=str(item["query"]),
|
|
expected_intent=str(item["expected_intent"]),
|
|
expected_sub_intent=str(item["expected_sub_intent"]),
|
|
expected_layers=tuple(item.get("expected_layers") or ()),
|
|
rows=tuple(item.get("rows") or ()),
|
|
)
|
|
for item in items
|
|
]
|