| import random |
| from typing import List |
|
|
| import numpy as np |
| import pytest |
|
|
| from lm_eval import tasks |
| from lm_eval.tasks import TaskManager |
| from lm_eval.utils import join_iters |
|
|
|
|
| MMLU_ANATOMY_ZERO_SHOT = """The following are multiple choice questions (with answers) about anatomy. |
| |
| A lesion causing compression of the facial nerve at the stylomastoid foramen will cause ipsilateral |
| A. paralysis of the facial muscles. |
| B. paralysis of the facial muscles and loss of taste. |
| C. paralysis of the facial muscles, loss of taste and lacrimation. |
| D. paralysis of the facial muscles, loss of taste, lacrimation and decreased salivation. |
| Answer:""" |
|
|
| MMLU_ANATOMY_FIVE_SHOT = """The following are multiple choice questions (with answers) about anatomy. |
| |
| What is the embryological origin of the hyoid bone? |
| A. The first pharyngeal arch |
| B. The first and second pharyngeal arches |
| C. The second pharyngeal arch |
| D. The second and third pharyngeal arches |
| Answer: D |
| |
| Which of these branches of the trigeminal nerve contain somatic motor processes? |
| A. The supraorbital nerve |
| B. The infraorbital nerve |
| C. The mental nerve |
| D. None of the above |
| Answer: D |
| |
| The pleura |
| A. have no sensory innervation. |
| B. are separated by a 2 mm space. |
| C. extend into the neck. |
| D. are composed of respiratory epithelium. |
| Answer: C |
| |
| In Angle's Class II Div 2 occlusion there is |
| A. excess overbite of the upper lateral incisors. |
| B. negative overjet of the upper central incisors. |
| C. excess overjet of the upper lateral incisors. |
| D. excess overjet of the upper central incisors. |
| Answer: C |
| |
| Which of the following is the body cavity that contains the pituitary gland? |
| A. Abdominal |
| B. Cranial |
| C. Pleural |
| D. Spinal |
| Answer: B |
| |
| A lesion causing compression of the facial nerve at the stylomastoid foramen will cause ipsilateral |
| A. paralysis of the facial muscles. |
| B. paralysis of the facial muscles and loss of taste. |
| C. paralysis of the facial muscles, loss of taste and lacrimation. |
| D. paralysis of the facial muscles, loss of taste, lacrimation and decreased salivation. |
| Answer:""" |
|
|
|
|
| @pytest.mark.parametrize( |
| "task_names,sets,num_fewshot,seed,num_examples,expected_prompt", |
| [ |
| (["mmlu_anatomy"], "test", 0, 42, 1, MMLU_ANATOMY_ZERO_SHOT), |
| (["mmlu_anatomy"], "test", 5, 42, 1, MMLU_ANATOMY_FIVE_SHOT), |
| ], |
| ) |
| def test_mmlu_prompt_rendering( |
| task_names: List[str], |
| sets: str, |
| num_fewshot: int, |
| seed: int, |
| num_examples: int, |
| expected_prompt: str, |
| ): |
| np.random.seed(seed) |
|
|
| task_manager = TaskManager() |
| task_dict = tasks.get_task_dict(task_names, task_manager) |
|
|
| for task_name, task in task_dict.items(): |
| if isinstance(task, tuple): |
| _, task = task |
|
|
| rnd = random.Random() |
| rnd.seed(seed) |
|
|
| iters = [] |
|
|
| for set in sets.split(","): |
| docs = None |
| if set == "train" and task.has_training_docs(): |
| docs = task.training_docs() |
| if set == "val" and task.has_validation_docs(): |
| docs = task.validation_docs() |
| if set == "test" and task.has_test_docs(): |
| docs = task.test_docs() |
| if docs is not None: |
| iters.append(docs) |
|
|
| if len(iters) == 0: |
| raise ValueError |
|
|
| docs = join_iters(iters) |
|
|
| for i, doc in ( |
| zip(range(num_examples), docs) if num_examples > 0 else enumerate(docs) |
| ): |
| ctx = task.fewshot_context( |
| doc=doc, |
| num_fewshot=num_fewshot, |
| ) |
|
|
| assert ctx == expected_prompt |
|
|