from mmengine.config import read_base from opencompass.openicl.icl_prompt_template import PromptTemplate from opencompass.openicl.icl_retriever import ZeroRetriever from opencompass.openicl.icl_inferencer import GenInferencer from opencompass.openicl.icl_evaluator import AccEvaluator from opencompass.datasets import MMLUProDataset from opencompass.utils.text_postprocessors import match_answer_pattern with read_base(): from .mmlu_pro_categories import categories QUERY_TEMPLATE = """ Answer the following multiple choice question. Your response should be of the following format: 'ANSWER: $LETTER' (without quotes) where LETTER is one of Options(e.g. one of ABCDEFGHIJKLMNOP). Please answer directly without additional explanations. Question:\n {question} Options:\n {options_str} """.strip() mmlu_pro_datasets = [] for category in categories: mmlu_pro_reader_cfg = dict( input_columns=['question', 'cot_content', 'options_str'], output_column='answer', train_split='validation', test_split='test', ) mmlu_pro_infer_cfg = dict( prompt_template=dict( type=PromptTemplate, template=dict( round=[ dict(role='HUMAN', prompt=QUERY_TEMPLATE), ], ), ), retriever=dict(type=ZeroRetriever), inferencer=dict(type=GenInferencer), ) mmlu_pro_eval_cfg = dict( evaluator=dict(type=AccEvaluator), pred_postprocessor=dict( type=match_answer_pattern, answer_pattern=r'(?i)ANSWER\s*:\s*([A-P])') ) mmlu_pro_datasets.append( dict( abbr=f'mmlu_pro_{category.replace(" ", "_")}', type=MMLUProDataset, path='opencompass/mmlu_pro', category=category, reader_cfg=mmlu_pro_reader_cfg, infer_cfg=mmlu_pro_infer_cfg, eval_cfg=mmlu_pro_eval_cfg, ))