Source code for eval_framework.metrics.completion.placeholder_checker
import re
from eval_framework.metrics.base import BaseMetric, MetricResult
from eval_framework.shared.types import BaseMetricContext, Completion, extract_context_metric
[docs]
class PlaceholderCheckerMetricContext(BaseMetricContext):
num_placeholders: int
[docs]
class PlaceholderChecker(BaseMetric[Completion]):
NAME = "Placeholder Check"
[docs]
def calculate(self, response: Completion) -> list[MetricResult]:
if response.error is not None:
return [MetricResult(metric_name=self.NAME, value=None, higher_is_better=True, error=response.error)]
context = extract_context_metric(response, PlaceholderCheckerMetricContext)
assert context.num_placeholders is not None, "Expected 'num_placeholders' in context"
assert isinstance(context.num_placeholders, int), (
f"'num_placeholders' has incorrect type: {type(context.num_placeholders)}"
)
placeholders = re.findall(r"\[.*?\]", response.completion)
value = float(len(placeholders) >= context.num_placeholders)
return [MetricResult(metric_name=self.NAME, value=value, higher_is_better=True, error=response.error)]