feat: Add HallucinationsV1 evaluation metric

PiperOrigin-RevId: 813456369
This commit is contained in:
Joseph Pagadora
2025-09-30 15:39:10 -07:00
committed by Copybara-Service
parent a239716930
commit 8c73d29c75
5 changed files with 2294 additions and 1 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ class AgentDetails(EvalBaseModel):
class AppDetails(EvalBaseModel): class AppDetails(EvalBaseModel):
"""Contains details about the App (the agentic system). """Contains details about the App (the agentic system).
This structure is only a projection of the acutal app. Only details This structure is only a projection of the actual app. Only details
that are relevant to the Eval System are captured here. that are relevant to the Eval System are captured here.
""" """
+20
View File
@@ -52,6 +52,8 @@ class PrebuiltMetrics(Enum):
"rubric_based_final_response_quality_v1" "rubric_based_final_response_quality_v1"
) )
HALLUCINATIONS_V1 = "hallucinations_v1"
RUBRIC_BASED_TOOL_USE_QUALITY_V1 = "rubric_based_tool_use_quality_v1" RUBRIC_BASED_TOOL_USE_QUALITY_V1 = "rubric_based_tool_use_quality_v1"
@@ -130,6 +132,24 @@ class RubricsBasedCriterion(BaseCriterion):
) )
class HallucinationsCriterion(BaseCriterion):
"""Criterion to use when evaluating agents response for hallucinations."""
judge_model_options: JudgeModelOptions = Field(
default_factory=JudgeModelOptions,
description="Options for the judge model.",
)
evaluate_intermediate_nl_responses: bool = Field(
default=False,
description=(
"Whether any intermediate NL responses should be evaluated"
" for hallucinations or not. By default, the metric only evaluates"
" final response from the Agent for hallucinations."
),
)
class EvalMetric(EvalBaseModel): class EvalMetric(EvalBaseModel):
"""A metric used to evaluate a particular aspect of an eval case.""" """A metric used to evaluate a particular aspect of an eval case."""
File diff suppressed because it is too large Load Diff
@@ -23,6 +23,7 @@ from .eval_metrics import MetricInfo
from .eval_metrics import PrebuiltMetrics from .eval_metrics import PrebuiltMetrics
from .evaluator import Evaluator from .evaluator import Evaluator
from .final_response_match_v2 import FinalResponseMatchV2Evaluator from .final_response_match_v2 import FinalResponseMatchV2Evaluator
from .hallucinations_v1 import HallucinationsV1Evaluator
from .response_evaluator import ResponseEvaluator from .response_evaluator import ResponseEvaluator
from .rubric_based_final_response_quality_v1 import RubricBasedFinalResponseQualityV1Evaluator from .rubric_based_final_response_quality_v1 import RubricBasedFinalResponseQualityV1Evaluator
from .rubric_based_tool_use_quality_v1 import RubricBasedToolUseV1Evaluator from .rubric_based_tool_use_quality_v1 import RubricBasedToolUseV1Evaluator
@@ -117,6 +118,10 @@ def _get_default_metric_evaluator_registry() -> MetricEvaluatorRegistry:
metric_info=RubricBasedFinalResponseQualityV1Evaluator.get_metric_info(), metric_info=RubricBasedFinalResponseQualityV1Evaluator.get_metric_info(),
evaluator=RubricBasedFinalResponseQualityV1Evaluator, evaluator=RubricBasedFinalResponseQualityV1Evaluator,
) )
metric_evaluator_registry.register_evaluator(
metric_info=HallucinationsV1Evaluator.get_metric_info(),
evaluator=HallucinationsV1Evaluator,
)
metric_evaluator_registry.register_evaluator( metric_evaluator_registry.register_evaluator(
metric_info=RubricBasedToolUseV1Evaluator.get_metric_info(), metric_info=RubricBasedToolUseV1Evaluator.get_metric_info(),
evaluator=RubricBasedToolUseV1Evaluator, evaluator=RubricBasedToolUseV1Evaluator,
File diff suppressed because it is too large Load Diff