in src/alpaca_eval/completion_parsers.py [0:0]
def ranking_parser(completion: str, model_1_name: str = "model_1") -> list[Any]:
r"""Parse a completion that contains a list of dictionary and returns the name of the preferred model.
Examples
--------
>>> ranking_parser("[{'model': 'model_1', 'rank': 1}, {'model': 'model_2', 'rank': 2}]")
[1]
>>> ranking_parser("[{'model': 'model_1', 'rank': 2}, {'model': 'model_2', 'rank': 1}]")
[2]
>>> ranking_parser("[{'model': 'model_1', 'rank': 3}, {'model': 'model_2', 'rank': 1}]")
[nan]
"""
if completion == "":
raise ValueError("The completion is empty.")
try:
if isinstance(completion, str):
ordered_completions = ast.literal_eval(completion)
else:
ordered_completions = completion
rank = [c for c in ordered_completions if c["model"] == model_1_name][0]["rank"]
assert rank in [1, 2]
return [rank]
except Exception as e:
logging.error(f"{e}\nContent: {completion}\n" "You must manually fix the score pair.")
return [np.nan]