Source code for eval_framework.metrics.loglikelihood.bpb_variants_prefix

"""Deprecated wrapper for prefix BPB. Use ``BitsPerByteVariantsLoglikelihood``."""

from eval_framework.metrics.base import BaseMetric, MetricResult
from eval_framework.metrics.loglikelihood.bpb_variants_common import (
    ALIAS_RULE,
    K0,
    K_ENTRY,
    K_RATE,
    compute_prefix_bpb_results,
    select_ground_truth,
)
from eval_framework.shared.types import Error, Loglikelihood

__all__ = [
    "ALIAS_RULE",
    "K0",
    "K_ENTRY",
    "K_RATE",
    "PrefixBitsPerByte",
    "compute_prefix_bpb_results",
]


[docs] class PrefixBitsPerByte(BaseMetric[Loglikelihood]): """Use ``BitsPerByteVariantsLoglikelihood`` instead.""" NAME = "PrefixBPB" _SIDECARS = ("PrefixBPB_rate", "PrefixBPB_entryCost", "PrefixBPB_contentBytes") def _all_error(self, message: str, response: Loglikelihood) -> list[MetricResult]: err = response.error or Error(error_class="ValueError", message=message, traceback="") names = (self.NAME, *self._SIDECARS) return [MetricResult(metric_name=n, value=None, higher_is_better=False, error=err) for n in names]
[docs] def calculate(self, response: Loglikelihood) -> list[MetricResult]: if response.error: return self._all_error("upstream error", response) ground_truth = select_ground_truth(response) if ground_truth is None: return self._all_error("No ground-truth answer found in loglikelihoods", response) results = compute_prefix_bpb_results(response, ground_truth) if not results: return self._all_error( "No per-token logprobs available for the ground truth (backend did not emit them)", response ) return results