Source code for eval_framework.metrics.base
from abc import ABC, abstractmethod
from typing import Any
from pydantic import BaseModel, ConfigDict
from eval_framework.shared.types import Error
[docs]
class MetricResult(BaseModel):
model_config = ConfigDict(extra="forbid")
metric_name: str
value: float | None
higher_is_better: bool
llm_judge_prompt: str | None = None
llm_judge_response: str | None = None
code_execution_trace: str | None = None
error: Error | None = None
[docs]
class classproperty:
def __init__(self, method: Any) -> None:
self.method = method
def __get__(self, instance: Any, cls: Any) -> Any:
return self.method(cls)
[docs]
class BaseMetric[Response](ABC):
NAME: str
KEYS: list[str] | None = None
@classproperty
def NAMES(cls) -> list[str]:
if cls.KEYS is None:
return [cls.NAME]
return [f"{cls.NAME}/{k}" for k in cls.KEYS]
[docs]
@abstractmethod
def calculate(self, response: Response) -> list[MetricResult]:
raise NotImplementedError