Ctrl K
ComunidadGuías…

butler/prompt_eval/llm_rubric.py

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

Archivo original ↗Preguntar a KiBot
"""Optional auxiliary LLM rubric for prompt-eval cases (PEG P2 / 五报告 H)."""

from __future__ import annotations

from typing import TYPE_CHECKING, cast

from butler.utilities.env_parse import env_truthy, int_env

if TYPE_CHECKING:
    from butler.prompt_eval.runner import PromptEvalCase


def prompt_eval_llm_enabled() -> bool:
    return cast(bool, env_truthy("BUTLER_PROMPT_EVAL_LLM", default=False))


def prompt_eval_llm_min_score() -> int:

    try:
        return cast(int, int_env("BUTLER_PROMPT_EVAL_LLM_MIN", 70, min=0, max=100))
    except ValueError:
        return 70


def score_prompt_eval_llm(case: PromptEvalCase, text: str) -> tuple[int | None, str]:
    """Return (score 0–100, note) via auxiliary model, or (None, reason) on skip/failure."""
    if not prompt_eval_llm_enabled():
        return None, "disabled"
    body = str(text or "").strip()
    if not body:
        return None, "empty"
    from butler.prompt_eval.llm_rubric_ops import score_prompt_eval_llm_safe

    return cast(tuple[int | None, str], score_prompt_eval_llm_safe(case, body))


def llm_rubric_passes(score: int | None, *, min_score: int | None = None) -> bool:
    if score is None:
        return True
    floor = prompt_eval_llm_min_score() if min_score is None else min_score
    return score >= floor


__all__ = [
    "llm_rubric_passes",
    "prompt_eval_llm_enabled",
    "prompt_eval_llm_min_score",
    "score_prompt_eval_llm",
]