Ctrl K
ComunidadGuías…

butler/eval_integration/suites/capability_suite.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Capability baseline suite (quarterly read/delegate/workflow)."""

from __future__ import annotations

import json
import subprocess
from pathlib import Path
from typing import Any

from butler.contracts.eval_ports import SuiteRunResult

ROOT = Path(__file__).resolve().parents[3]


class CapabilitySuite:
    suite_id = "capability"
    layer = "L-D"

    def run(
        self,
        *,
        warn_only: bool = False,
        sync_dataset: bool = False,
        push_langfuse: bool | None = None,
    ) -> SuiteRunResult:
        script = ROOT / "scripts" / "butler-capability-baseline.sh"
        proc = subprocess.run(
            ["bash", str(script)],
            cwd=str(ROOT),
            env={**__import__("os").environ, "PYTHONPATH": str(ROOT)},
        )
        report_path = ROOT / ".butler" / "reports" / "capability-baseline.json"
        metrics: dict[str, Any] = {}
        if report_path.is_file():
            metrics = json.loads(report_path.read_text(encoding="utf-8"))
        ok = proc.returncode == 0
        return SuiteRunResult(
            suite_id=self.suite_id,
            ok=ok,
            layer=self.layer,
            metrics={"ok": metrics.get("ok"), "components": metrics.get("components")},
            error="" if ok else "capability baseline failed",
        )