1
from dataclasses import dataclass
2
from typing import TYPE_CHECKING, Dict, List, Tuple
4
from llmtuner.extras.constants import CHOICES
7
from datasets import Dataset
20
example: Dict[str, str]
22
candidates = [self.choice.format(choice=ch, content=example[ch]) for ch in CHOICES if ch in example]
23
return "".join([example["question"]] + candidates + [self.answer]), example["answer"]
27
target_data: Dict[str, str],
28
support_set: "Dataset",
31
) -> Tuple[str, str, List[Tuple[str, str]]]:
32
query, resp = self.parse_example(target_data)
33
history = [self.parse_example(support_set[k]) for k in range(len(support_set))]
37
history.insert(0, (self.system.format(subject=subject_name) + temp[0], temp[1]))
39
query = self.system.format(subject=subject_name) + query
42
query = "\n\n".join(["".join(item) for item in history] + [query])
44
return query.strip(), resp, history
47
eval_templates: Dict[str, EvalTemplate] = {}
50
def register_eval_template(
57
eval_templates[name] = EvalTemplate(
65
def get_eval_template(name: str) -> EvalTemplate:
66
eval_template = eval_templates.get(name, None)
67
assert eval_template is not None, "Template {} does not exist.".format(name)
71
register_eval_template(
73
system="The following are multiple choice questions (with answers) about {subject}.\n\n",
74
choice="\n{choice}. {content}",
80
register_eval_template(
82
system="以下是中国关于{subject}考试的单项选择题,请选出其中的正确答案。\n\n",
83
choice="\n{choice}. {content}",