in src/fmeval/model_runners/extractors/json_extractor.py [0:0]
def extract_log_probability(self, data: Union[List, Dict], num_records: int) -> Union[List[float], float]:
"""
Extract log probability from model response.
:param data: Model response. The log_probability_jmespath_expression is used to extract the log probabilities
of the input tokens. Each record in the extracted probabilities will be a float or list of floats.
Examples for the extracted probabilities:
- data: 0.1, num_records: 1, num tokens: 1 (or probabilities already summed up)
- data: [0.1], num_records: 1, num tokens: 1 (or probabilities already summed up)
- data: [0.1, 0.2], num_records: 1, num tokens: 2
:param num_records: number of inference records in the model output
:return: float or list of float where each float is sum of log probabilities.
"""
assert num_records == 1, "JSON extractor does not support batch requests"
util.require(
self.log_probability_jmespath_expression,
"Extractor cannot extract log_probability as log_probability_jmespath_expression is not provided",
)
log_probs = self.log_probability_jmespath.search(data)
util.require(
log_probs is not None, f"JMESpath {self.log_probability_jmespath_expression} could not find any data"
)
if isinstance(log_probs, float):
return log_probs
util.require(
isinstance(log_probs, List) and all(isinstance(value, float) for value in log_probs),
f"Extractor found: {log_probs} which does not match expected {float} or list of {float}",
)
return sum(log_probs)