eval-framework 0.12.0__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. {eval_framework-0.12.0 → eval_framework-0.13.0}/PKG-INFO +1 -1
  2. {eval_framework-0.12.0 → eval_framework-0.13.0}/pyproject.toml +1 -1
  3. {eval_framework-0.12.0 → eval_framework-0.13.0}/pyproject.toml.orig +1 -1
  4. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/arc_de.py +3 -4
  5. eval_framework-0.13.0/src/eval_framework/benchmarks/copa.py +59 -0
  6. eval_framework-0.13.0/src/eval_framework/benchmarks/csqa.py +46 -0
  7. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/csqa_ellamind.py +3 -4
  8. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/goldenswag.py +3 -4
  9. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/gpqa_ellamind.py +3 -4
  10. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/hellaswag.py +3 -4
  11. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/hellaswag_ellamind.py +3 -4
  12. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/hle_ellamind.py +3 -4
  13. eval_framework-0.13.0/src/eval_framework/benchmarks/medqa.py +45 -0
  14. eval_framework-0.13.0/src/eval_framework/benchmarks/mmlu.py +266 -0
  15. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/piqa.py +3 -4
  16. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/piqa_ellamind.py +3 -4
  17. eval_framework-0.13.0/src/eval_framework/benchmarks/sciq.py +50 -0
  18. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/simpleqa_ellamind.py +3 -4
  19. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/siqa_ellamind.py +3 -4
  20. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/winogrande_ellamind.py +53 -23
  21. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/composed.py +69 -44
  22. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/eval_kind.py +52 -18
  23. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/evaluation_generator.py +63 -32
  24. eval_framework-0.13.0/src/eval_framework/fewshot.py +150 -0
  25. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/base.py +3 -0
  26. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/base.py +4 -0
  27. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/bigcodebench.py +3 -32
  28. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/global_mmlu.py +1 -1
  29. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/humaneval_ellamind.py +42 -2
  30. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/mbpp_ellamind.py +26 -1
  31. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/registry.py +1 -1
  32. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/task_names.py +15 -7
  33. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/utils.py +20 -0
  34. eval_framework-0.12.0/src/eval_framework/benchmarks/mmlu.py +0 -116
  35. eval_framework-0.12.0/src/eval_framework/tasks/benchmarks/copa.py +0 -119
  36. eval_framework-0.12.0/src/eval_framework/tasks/benchmarks/csqa.py +0 -116
  37. eval_framework-0.12.0/src/eval_framework/tasks/benchmarks/medqa.py +0 -101
  38. eval_framework-0.12.0/src/eval_framework/tasks/benchmarks/mmlu.py +0 -175
  39. eval_framework-0.12.0/src/eval_framework/tasks/benchmarks/sciq.py +0 -165
  40. {eval_framework-0.12.0 → eval_framework-0.13.0}/LICENSE +0 -0
  41. {eval_framework-0.12.0 → eval_framework-0.13.0}/README.md +0 -0
  42. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/__init__.py +0 -0
  43. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/base_config.py +0 -0
  44. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/benchmarks/__init__.py +0 -0
  45. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/choices.py +0 -0
  46. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/context/__init__.py +0 -0
  47. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/context/determined.py +0 -0
  48. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/context/eval.py +0 -0
  49. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/context/local.py +0 -0
  50. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/contract.py +0 -0
  51. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/exceptions.py +0 -0
  52. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/drop_process_results.py +0 -0
  53. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/ifeval_impl/README.md +0 -0
  54. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
  55. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
  56. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
  57. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
  58. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/__init__.py +0 -0
  59. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/aleph_alpha.py +0 -0
  60. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/base.py +0 -0
  61. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/huggingface.py +0 -0
  62. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/models.py +0 -0
  63. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/llm/openai.py +0 -0
  64. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/logger.py +0 -0
  65. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/main.py +0 -0
  66. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/__init__.py +0 -0
  67. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
  68. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
  69. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/__init__.py +0 -0
  70. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
  71. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
  72. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
  73. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
  74. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/csv_format.py +0 -0
  75. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
  76. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
  77. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/f1.py +0 -0
  78. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/format_checker.py +0 -0
  79. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
  80. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/ifeval.py +0 -0
  81. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/json_format.py +0 -0
  82. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/language_checker.py +0 -0
  83. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/length_control.py +0 -0
  84. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
  85. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
  86. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
  87. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
  88. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
  89. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/repetition.py +0 -0
  90. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
  91. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
  92. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
  93. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
  94. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/completion/text_counter.py +0 -0
  95. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
  96. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
  97. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/efficiency/finish_reason.py +0 -0
  98. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/efficiency/token_counters.py +0 -0
  99. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/__init__.py +0 -0
  100. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
  101. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
  102. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
  103. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
  104. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
  105. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
  106. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
  107. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/language.py +0 -0
  108. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
  109. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/models.py +0 -0
  110. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
  111. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
  112. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
  113. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
  114. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
  115. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
  116. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
  117. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
  118. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
  119. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
  120. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
  121. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
  122. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
  123. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
  124. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
  125. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/llm/utils.py +0 -0
  126. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
  127. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
  128. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
  129. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
  130. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
  131. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
  132. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
  133. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
  134. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/py.typed +0 -0
  135. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/response_generator.py +0 -0
  136. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/result_processors/__init__.py +0 -0
  137. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/result_processors/base.py +0 -0
  138. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/result_processors/hf_uploader.py +0 -0
  139. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/result_processors/result_processor.py +0 -0
  140. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
  141. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/run.py +0 -0
  142. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/run_direct.py +0 -0
  143. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/shared/errors.py +0 -0
  144. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/shared/types.py +0 -0
  145. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/subjects.py +0 -0
  146. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/suite.py +0 -0
  147. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
  148. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/__init__.py +0 -0
  149. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/base.py +0 -0
  150. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
  151. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
  152. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/arc_ellamind.py +0 -0
  153. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
  154. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
  155. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
  156. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/gsm8k_ellamind.py +0 -0
  157. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/hendrycks_math_ellamind.py +0 -0
  158. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/humaneval.py +0 -0
  159. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/humaneval_plus.py +0 -0
  160. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
  161. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
  162. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
  163. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
  164. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
  165. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
  166. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -0
  167. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
  168. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/benchmarks/winogrande.py +0 -0
  169. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/dataset_loading.py +0 -0
  170. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/dataset_revisions.py +0 -0
  171. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/eval_config.py +0 -0
  172. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
  173. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -0
  174. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/lazy.py +0 -0
  175. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/markdown_doc.py +0 -0
  176. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/task_loader.py +0 -0
  177. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/tasks/task_style.py +0 -0
  178. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/constants.py +0 -0
  179. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/file_ops.py +0 -0
  180. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/helpers.py +0 -0
  181. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/logging.py +0 -0
  182. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/packaging.py +0 -0
  183. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/eval_framework/utils/tqdm_handler.py +0 -0
  184. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/template_formatting/README.md +0 -0
  185. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/template_formatting/__init__.py +0 -0
  186. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/template_formatting/formatter.py +0 -0
  187. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/template_formatting/mistral_formatter.py +0 -0
  188. {eval_framework-0.12.0 → eval_framework-0.13.0}/src/template_formatting/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: eval-framework
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: Evaluation Framework
5
5
  Author: Aleph Alpha Research
6
6
  License: Apache License
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.12.0"
3
+ version = "0.13.0"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.15"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.12.0"
3
+ version = "0.13.0"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -5,7 +5,6 @@ from typing import Any, final, override
5
5
  from eval_framework.choices import ChoiceFields, ChoiceReader
6
6
  from eval_framework.composed import ComposedBenchmark
7
7
  from eval_framework.contract import Benchmark
8
- from eval_framework.eval_kind import Choice
9
8
  from eval_framework.tasks.base import Language
10
9
  from eval_framework.tasks.dataset_loading import DatasetPolicy
11
10
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
@@ -34,12 +33,12 @@ def arc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
34
33
 
35
34
  https://huggingface.co/datasets/LeoLM/ArcChallenge_de
36
35
  """
37
- kind = Choice(reader=ArcDeReader(), styler=ClozeStyle(question_prefix="Frage: ", cue_text="Antwort:"))
38
36
  dataset_policy = dataset if dataset is not None else pinned_by_framework("LeoLM/ArcChallenge_de")
39
- return ComposedBenchmark.compose(
37
+ return ComposedBenchmark.choice(
40
38
  id="ARC_DE",
41
39
  display_name="ARC German",
42
- kind=kind,
40
+ reader=ArcDeReader(),
41
+ styler=ClozeStyle(question_prefix="Frage: ", cue_text="Antwort:"),
43
42
  sample_split="test",
44
43
  fewshot_split="validation",
45
44
  dataset_policy=dataset_policy,
@@ -0,0 +1,59 @@
1
+ """COPA (Choice of Plausible Alternatives): https://huggingface.co/datasets/aps/super_glue
2
+
3
+ Causal-reasoning items: a premise, a cause/effect cue, and two alternatives. The registered variant is
4
+ OLMES-style: the premise is recast as a sentence stem (its final period replaced by the causal connector),
5
+ the two alternatives are shown as space-prefixed lettered options (" A. …"), and the model is scored over
6
+ the letter labels. The prompt carries no assistant cue — the options directly continue the stem.
7
+ """
8
+
9
+ from typing import Any, final, override
10
+
11
+ from eval_framework.choices import ChoiceFields, ChoiceReader
12
+ from eval_framework.composed import ComposedBenchmark
13
+ from eval_framework.contract import Benchmark
14
+ from eval_framework.subjects import ListOfSubjects
15
+ from eval_framework.tasks.base import Language
16
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
17
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
18
+ from eval_framework.tasks.task_style import MCStyle
19
+
20
+ # The premise becomes a sentence stem: its trailing period is replaced by the causal connector, so each
21
+ # alternative continues it (e.g. "The man broke his toe because" + " he dropped a hammer on it.").
22
+ _COPA_CONNECTOR = {"cause": "because", "effect": "therefore"}
23
+
24
+
25
+ def _decapitalize(text: str) -> str:
26
+ return text[0].lower() + text[1:]
27
+
28
+
29
+ @final
30
+ class CopaReader(ChoiceReader):
31
+ """Reads a COPA item: the premise recast as a stem (final period → connector) and its two alternatives,
32
+ each lower-cased to continue the stem."""
33
+
34
+ @override
35
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
36
+ premise = item["premise"].strip()[:-1] + f" {_COPA_CONNECTOR[item['question']]}"
37
+ return ChoiceFields(
38
+ raw_question=premise,
39
+ choices=[_decapitalize(item["choice1"]), _decapitalize(item["choice2"])],
40
+ correct_index=item["label"],
41
+ )
42
+
43
+
44
+ def copa_mc_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
45
+ styler = MCStyle(question_prefix="", cue_text="", space_prefixed_labels=True)
46
+ dataset_policy = dataset if dataset is not None else pinned_by_framework("aps/super_glue")
47
+ return ComposedBenchmark.choice(
48
+ id="COPA_OLMES",
49
+ reader=CopaReader(),
50
+ styler=styler,
51
+ sample_split="validation",
52
+ fewshot_split="test",
53
+ subjects=ListOfSubjects(["copa"]),
54
+ dataset_policy=dataset_policy,
55
+ language=Language.ENG,
56
+ )
57
+
58
+
59
+ COPA_BENCHMARKS: list[Benchmark] = [copa_mc_olmes()]
@@ -0,0 +1,46 @@
1
+ """CommonsenseQA (English): https://huggingface.co/datasets/tau/commonsense_qa
2
+
3
+ Five-way multiple-choice commonsense questions. The registered variant is OLMES-style: the options are
4
+ shown as space-prefixed lettered choices (" A. …") and the model is scored over the letter labels.
5
+ """
6
+
7
+ from typing import Any, final, override
8
+
9
+ from eval_framework.choices import ChoiceFields, ChoiceReader
10
+ from eval_framework.composed import ComposedBenchmark
11
+ from eval_framework.contract import Benchmark
12
+ from eval_framework.tasks.base import Language
13
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
14
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
15
+ from eval_framework.tasks.task_style import MCStyle
16
+
17
+
18
+ @final
19
+ class CommonsenseQaReader(ChoiceReader):
20
+ """Reads a CommonsenseQA item: the question and its labelled options, with the correct one at ``answerKey``."""
21
+
22
+ @override
23
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
24
+ labels = item["choices"]["label"]
25
+ return ChoiceFields(
26
+ raw_question=item["question"],
27
+ choices=item["choices"]["text"],
28
+ correct_index=labels.index(item["answerKey"]),
29
+ )
30
+
31
+
32
+ def csqa_mc_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
33
+ styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True)
34
+ dataset_policy = dataset if dataset is not None else pinned_by_framework("tau/commonsense_qa")
35
+ return ComposedBenchmark.choice(
36
+ id="CommonsenseQAMC_OLMES",
37
+ reader=CommonsenseQaReader(),
38
+ styler=styler,
39
+ sample_split="train",
40
+ fewshot_split="train",
41
+ dataset_policy=dataset_policy,
42
+ language=Language.ENG,
43
+ )
44
+
45
+
46
+ CSQA_BENCHMARKS: list[Benchmark] = [csqa_mc_olmes()]
@@ -10,7 +10,6 @@ from typing import Any, Literal, final, override
10
10
  from eval_framework.choices import ChoiceFields, ChoiceReader
11
11
  from eval_framework.composed import ComposedBenchmark
12
12
  from eval_framework.contract import Benchmark
13
- from eval_framework.eval_kind import Choice
14
13
  from eval_framework.subjects import ListOfSubjects
15
14
  from eval_framework.tasks.base import Language
16
15
  from eval_framework.tasks.dataset_loading import DatasetPolicy
@@ -39,11 +38,11 @@ class CsqaReader(ChoiceReader):
39
38
  def _csqa_ellamind_benchmark(
40
39
  id: str, styler: TaskStyler, distractor_level: Literal["easy", "hard"], dataset: DatasetPolicy | None = None
41
40
  ) -> Benchmark:
42
- kind = Choice(reader=CsqaReader(distractor_level), styler=styler)
43
41
  dataset_policy = dataset if dataset is not None else pinned_by_framework("ellamind/csqa-multilingual")
44
- return ComposedBenchmark.compose(
42
+ return ComposedBenchmark.choice(
45
43
  id=id,
46
- kind=kind,
44
+ reader=CsqaReader(distractor_level),
45
+ styler=styler,
47
46
  sample_split="validation",
48
47
  fewshot_split="validation",
49
48
  subjects=ListOfSubjects(["deu"]),
@@ -7,7 +7,6 @@ A curated subset of HellaSwag, read identically (sentence completion, scored as
7
7
  from eval_framework.benchmarks.hellaswag import HellaswagReader
8
8
  from eval_framework.composed import ComposedBenchmark
9
9
  from eval_framework.contract import Benchmark
10
- from eval_framework.eval_kind import Choice
11
10
  from eval_framework.tasks.base import Language
12
11
  from eval_framework.tasks.dataset_loading import DatasetPolicy
13
12
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
@@ -21,11 +20,11 @@ _IDK_PREAMBLE = (
21
20
 
22
21
 
23
22
  def _goldenswag_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
24
- kind = Choice(reader=HellaswagReader(), styler=styler)
25
23
  dataset_policy = dataset if dataset is not None else pinned_by_framework("PleIAs/GoldenSwag")
26
- return ComposedBenchmark.compose(
24
+ return ComposedBenchmark.choice(
27
25
  id=id,
28
- kind=kind,
26
+ reader=HellaswagReader(),
27
+ styler=styler,
29
28
  sample_split="validation",
30
29
  fewshot_split="validation",
31
30
  dataset_policy=dataset_policy,
@@ -11,7 +11,6 @@ from typing import Any, final, override
11
11
  from eval_framework.choices import ChoiceFields, ChoiceReader
12
12
  from eval_framework.composed import ComposedBenchmark
13
13
  from eval_framework.contract import Benchmark
14
- from eval_framework.eval_kind import Choice
15
14
  from eval_framework.subjects import ListOfSubjects
16
15
  from eval_framework.tasks.base import Language
17
16
  from eval_framework.tasks.dataset_loading import DatasetPolicy, Subset
@@ -34,11 +33,11 @@ class GpqaReader(ChoiceReader):
34
33
 
35
34
 
36
35
  def _gpqa_ellamind_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
37
- kind = Choice(reader=GpqaReader(), styler=styler)
38
36
  dataset_policy = dataset if dataset is not None else pinned_by_framework("ellamind/gpqa-multilingual")
39
- return ComposedBenchmark.compose(
37
+ return ComposedBenchmark.choice(
40
38
  id=id,
41
- kind=kind,
39
+ reader=GpqaReader(),
40
+ styler=styler,
42
41
  sample_split="train",
43
42
  fewshot_split="train",
44
43
  subjects=ListOfSubjects(["deu"]),
@@ -12,7 +12,6 @@ from typing import Any, final, override
12
12
  from eval_framework.choices import ChoiceFields, ChoiceReader
13
13
  from eval_framework.composed import ComposedBenchmark
14
14
  from eval_framework.contract import Benchmark
15
- from eval_framework.eval_kind import Choice
16
15
  from eval_framework.tasks.base import Language
17
16
  from eval_framework.tasks.dataset_loading import DatasetPolicy
18
17
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
@@ -47,11 +46,11 @@ class HellaswagReader(ChoiceReader):
47
46
  def _hellaswag_benchmark(
48
47
  id: str, *, sample_split: str, fewshot_split: str, dataset: DatasetPolicy | None = None
49
48
  ) -> Benchmark:
50
- kind = Choice(reader=HellaswagReader(), styler=ClozeStyle(question_prefix="", cue_text="", trailing_newline=False))
51
49
  dataset_policy = dataset if dataset is not None else pinned_by_framework("Rowan/hellaswag")
52
- return ComposedBenchmark.compose(
50
+ return ComposedBenchmark.choice(
53
51
  id=id,
54
- kind=kind,
52
+ reader=HellaswagReader(),
53
+ styler=ClozeStyle(question_prefix="", cue_text="", trailing_newline=False),
55
54
  sample_split=sample_split,
56
55
  fewshot_split=fewshot_split,
57
56
  dataset_policy=dataset_policy,
@@ -12,7 +12,6 @@ from typing import Any, Literal, final, override
12
12
  from eval_framework.choices import ChoiceFields, ChoiceReader
13
13
  from eval_framework.composed import ComposedBenchmark
14
14
  from eval_framework.contract import Benchmark
15
- from eval_framework.eval_kind import Choice
16
15
  from eval_framework.subjects import ListOfSubjects
17
16
  from eval_framework.tasks.base import Language
18
17
  from eval_framework.tasks.dataset_loading import DatasetPolicy
@@ -46,11 +45,11 @@ class HellaswagReader(ChoiceReader):
46
45
  def _hellaswag_ellamind_benchmark(
47
46
  id: str, styler: TaskStyler, distractor_level: Literal["easy", "hard"], dataset: DatasetPolicy | None = None
48
47
  ) -> Benchmark:
49
- kind = Choice(reader=HellaswagReader(distractor_level), styler=styler)
50
48
  dataset_policy = dataset if dataset is not None else pinned_by_framework("ellamind/hellaswag-multilingual")
51
- return ComposedBenchmark.compose(
49
+ return ComposedBenchmark.choice(
52
50
  id=id,
53
- kind=kind,
51
+ reader=HellaswagReader(distractor_level),
52
+ styler=styler,
54
53
  sample_split="validation",
55
54
  fewshot_split="validation",
56
55
  subjects=ListOfSubjects(["deu"]),
@@ -11,7 +11,6 @@ from typing import Any, final, override
11
11
  from eval_framework.choices import ChoiceFields, ChoiceReader
12
12
  from eval_framework.composed import ComposedBenchmark
13
13
  from eval_framework.contract import Benchmark
14
- from eval_framework.eval_kind import Choice
15
14
  from eval_framework.subjects import ListOfSubjects
16
15
  from eval_framework.tasks.base import Language
17
16
  from eval_framework.tasks.dataset_loading import DatasetPolicy, Subset
@@ -34,11 +33,11 @@ class HleReader(ChoiceReader):
34
33
 
35
34
 
36
35
  def _hle_ellamind_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
37
- kind = Choice(reader=HleReader(), styler=styler)
38
36
  dataset_policy = dataset if dataset is not None else pinned_by_framework("ellamind/hle-multilingual")
39
- return ComposedBenchmark.compose(
37
+ return ComposedBenchmark.choice(
40
38
  id=id,
41
- kind=kind,
39
+ reader=HleReader(),
40
+ styler=styler,
42
41
  sample_split="test",
43
42
  fewshot_split="test",
44
43
  subjects=ListOfSubjects(["deu"]),
@@ -0,0 +1,45 @@
1
+ """MedQA (English): https://huggingface.co/datasets/davidheineman/medqa-en
2
+
3
+ Multiple-choice questions from medical licensing exams. The registered variant is OLMES-style: the options
4
+ are shown as space-prefixed lettered choices (" A. …") and the model is scored over the letter labels.
5
+ """
6
+
7
+ from typing import Any, final, override
8
+
9
+ from eval_framework.choices import ChoiceFields, ChoiceReader
10
+ from eval_framework.composed import ComposedBenchmark
11
+ from eval_framework.contract import Benchmark
12
+ from eval_framework.tasks.base import Language
13
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
14
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
15
+ from eval_framework.tasks.task_style import MCStyle
16
+
17
+
18
+ @final
19
+ class MedqaReader(ChoiceReader):
20
+ """Reads a MedQA item: the exam question and its options, with the correct one at ``answer_idx``."""
21
+
22
+ @override
23
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
24
+ return ChoiceFields(
25
+ raw_question=item["question"],
26
+ choices=item["choices"],
27
+ correct_index=int(item["answer_idx"]),
28
+ )
29
+
30
+
31
+ def medqa_mc_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
32
+ styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True)
33
+ dataset_policy = dataset if dataset is not None else pinned_by_framework("davidheineman/medqa-en")
34
+ return ComposedBenchmark.choice(
35
+ id="MedQAMC_OLMES",
36
+ reader=MedqaReader(),
37
+ styler=styler,
38
+ sample_split="test",
39
+ fewshot_split="train",
40
+ dataset_policy=dataset_policy,
41
+ language=Language.ENG,
42
+ )
43
+
44
+
45
+ MEDQA_BENCHMARKS: list[Benchmark] = [medqa_mc_olmes()]
@@ -0,0 +1,266 @@
1
+ """MMLU: https://huggingface.co/datasets/cais/mmlu
2
+
3
+ Multiple-choice knowledge questions across 57 subjects (each an HF config, loaded per subject); every
4
+ prompt is prefaced by a subject-templated preamble. The composed variants:
5
+
6
+ * ``MMLU`` / ``MMLU_OLMES`` — score the letter labels; OLMES adds a space before each option label.
7
+ * ``Full Text MMLU`` — shows the options as a bulleted list and scores the full answer text.
8
+ * ``MMLU_IDK`` — lets the model abstain with ``"?"`` and reports confidence-aware metrics.
9
+ * ``MMLU_COT`` — the model reasons freely and concludes with the answer, which is regex-extracted from
10
+ the generation (free-form completion, 0-shot).
11
+ """
12
+
13
+ import re
14
+ from typing import TYPE_CHECKING, Any, final, override
15
+
16
+ from eval_framework.choices import ChoiceFields, ChoiceReader
17
+ from eval_framework.composed import ComposedBenchmark
18
+ from eval_framework.contract import Benchmark, ResponseType
19
+ from eval_framework.eval_kind import EvalKind, SampleBody
20
+ from eval_framework.fewshot import NoFewShot
21
+ from eval_framework.metrics.completion.accuracy_completion import AccuracyCompletion
22
+ from eval_framework.shared.types import BaseMetricContext
23
+ from eval_framework.subjects import ListOfSubjects
24
+ from eval_framework.tasks.base import Language
25
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
26
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
27
+ from eval_framework.tasks.task_style import ClozeStyle, MCStyle, TaskStyler
28
+ from eval_framework.tasks.utils import get_n_letters
29
+ from template_formatting.formatter import Message
30
+
31
+ if TYPE_CHECKING:
32
+ from eval_framework.metrics.base import BaseMetric
33
+
34
+
35
+ # The 57 MMLU subjects; each is an HF config of ``cais/mmlu`` (also reused by GlobalMMLU).
36
+ MMLU_SUBJECTS = [
37
+ "abstract_algebra",
38
+ "anatomy",
39
+ "astronomy",
40
+ "business_ethics",
41
+ "clinical_knowledge",
42
+ "college_biology",
43
+ "college_chemistry",
44
+ "college_computer_science",
45
+ "college_mathematics",
46
+ "college_medicine",
47
+ "college_physics",
48
+ "computer_security",
49
+ "conceptual_physics",
50
+ "econometrics",
51
+ "electrical_engineering",
52
+ "elementary_mathematics",
53
+ "formal_logic",
54
+ "global_facts",
55
+ "high_school_biology",
56
+ "high_school_chemistry",
57
+ "high_school_computer_science",
58
+ "high_school_european_history",
59
+ "high_school_geography",
60
+ "high_school_government_and_politics",
61
+ "high_school_macroeconomics",
62
+ "high_school_mathematics",
63
+ "high_school_microeconomics",
64
+ "high_school_physics",
65
+ "high_school_psychology",
66
+ "high_school_statistics",
67
+ "high_school_us_history",
68
+ "high_school_world_history",
69
+ "human_aging",
70
+ "human_sexuality",
71
+ "international_law",
72
+ "jurisprudence",
73
+ "logical_fallacies",
74
+ "machine_learning",
75
+ "management",
76
+ "marketing",
77
+ "medical_genetics",
78
+ "miscellaneous",
79
+ "moral_disputes",
80
+ "moral_scenarios",
81
+ "nutrition",
82
+ "philosophy",
83
+ "prehistory",
84
+ "professional_accounting",
85
+ "professional_law",
86
+ "professional_medicine",
87
+ "professional_psychology",
88
+ "public_relations",
89
+ "security_studies",
90
+ "sociology",
91
+ "us_foreign_policy",
92
+ "virology",
93
+ "world_religions",
94
+ ]
95
+
96
+
97
+ @final
98
+ class MmluReader(ChoiceReader):
99
+ """Reads an MMLU item: the question and its four answer choices, with the correct one at ``answer``."""
100
+
101
+ @override
102
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
103
+ return ChoiceFields(
104
+ raw_question=item["question"].strip(),
105
+ choices=item["choices"],
106
+ correct_index=item["answer"],
107
+ )
108
+
109
+
110
+ @final
111
+ class _FullTextMmluStyle(ClozeStyle):
112
+ """Cloze scoring (full answer text) that additionally shows the options as a bulleted list."""
113
+
114
+ @override
115
+ def get_instruction_text(self, raw_question: str, choices: list[str]) -> str:
116
+ options = "".join(f"- {choice}\n" for choice in choices)
117
+ return f"{self.question_prefix}{raw_question}\nPossible answers:\n{options}"
118
+
119
+
120
+ def _humanized(subject_label: str) -> str:
121
+ # Subject labels are underscored config names ("abstract_algebra"); read them as prose.
122
+ return " ".join(subject_label.split("_"))
123
+
124
+
125
+ def _mc_preamble(subject_label: str) -> str:
126
+ return f"The following are multiple choice questions (with answers) about {_humanized(subject_label)}."
127
+
128
+
129
+ def _full_text_preamble(subject_label: str) -> str:
130
+ return (
131
+ f"The following are multiple choice questions (with possible answers) about {_humanized(subject_label)}.\n"
132
+ "Answer with the full text of the correct answer."
133
+ )
134
+
135
+
136
+ def _idk_preamble(subject_label: str) -> str:
137
+ # Unlike the other variants, the IDK preamble names the subject by its raw (underscored) key.
138
+ return (
139
+ f"The following are multiple choice questions (with answers) about {subject_label}. "
140
+ "Answer only if you are confident, since mistakes may be penalised, while correct answers receive points. "
141
+ "It is acceptable to answer with '?' if you are unsure, and you will receive 0 points."
142
+ )
143
+
144
+
145
+ @final
146
+ class _MmluCotKind(EvalKind):
147
+ """MMLU chain-of-thought: the model reasons freely and concludes with "Therefore, the answer is: X",
148
+ and the answer letter is extracted from the generation. Free-form (completion), 0-shot only."""
149
+
150
+ def __init__(self) -> None:
151
+ self._reader = MmluReader()
152
+ self._answer_re = re.compile(r"Therefore, the answer is: ([ABCD])")
153
+
154
+ @override
155
+ def response_type(self) -> ResponseType:
156
+ return ResponseType.COMPLETION
157
+
158
+ @override
159
+ def metrics(self) -> list[type["BaseMetric"]]:
160
+ return [AccuracyCompletion]
161
+
162
+ @override
163
+ def stop_sequences(self) -> list[str]:
164
+ return ["Question:"]
165
+
166
+ @override
167
+ def max_tokens(self) -> int | None:
168
+ return None
169
+
170
+ @override
171
+ def initial_prompt(self, subject_label: str) -> str | None:
172
+ return (
173
+ f"The following are multiple choice questions about {_humanized(subject_label)}. "
174
+ 'Summarize your reasoning concisely, then conclude with "Therefore, the answer is: X", where X is '
175
+ "one of A, B, C, or D."
176
+ )
177
+
178
+ @override
179
+ def samples(self, item: dict[str, Any]) -> list[SampleBody]:
180
+ fields = self._reader.read(item)
181
+ keys = get_n_letters(len(fields.choices))
182
+ options = "\n".join(f"{key}. {choice}" for key, choice in zip(keys, fields.choices))
183
+ return [
184
+ SampleBody(
185
+ prompt=f"Question: {fields.raw_question}\n{options}",
186
+ cue="", # no assistant cue — the model continues with its reasoning
187
+ possible_completions=[], # free-form generation (normalized to None by ComposedEval)
188
+ ground_truth=keys[fields.correct_index], # the bare answer letter
189
+ )
190
+ ]
191
+
192
+ @override
193
+ def extract_answer(
194
+ self,
195
+ completion_text: str,
196
+ *,
197
+ context: BaseMetricContext | list[BaseMetricContext] | None,
198
+ ground_truth: str | list[str] | None,
199
+ messages: list[Message],
200
+ ) -> str:
201
+ for stop in self.stop_sequences():
202
+ completion_text = completion_text.split(stop)[0]
203
+ match = self._answer_re.search(completion_text)
204
+ return match.group(1) if match else "[invalid]"
205
+
206
+
207
+ def _mmlu_dataset(dataset: DatasetPolicy | None) -> DatasetPolicy:
208
+ return dataset if dataset is not None else pinned_by_framework("cais/mmlu")
209
+
210
+
211
+ def _mmlu_choice(
212
+ id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None, display_name: str | None = None
213
+ ) -> Benchmark:
214
+ # The loglikelihood variants differ only in their styler; MmluReader and the dev fewshot split are shared.
215
+ return ComposedBenchmark.choice(
216
+ id=id,
217
+ display_name=display_name,
218
+ reader=MmluReader(),
219
+ styler=styler,
220
+ sample_split="test",
221
+ fewshot_split="dev",
222
+ subjects=ListOfSubjects(MMLU_SUBJECTS),
223
+ dataset_policy=_mmlu_dataset(dataset),
224
+ language=Language.ENG,
225
+ )
226
+
227
+
228
+ def mmlu(dataset: DatasetPolicy | None = None) -> Benchmark:
229
+ styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", initial_prompt=_mc_preamble)
230
+ return _mmlu_choice("MMLU", styler, dataset)
231
+
232
+
233
+ def mmlu_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
234
+ styler = MCStyle(
235
+ question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True, initial_prompt=_mc_preamble
236
+ )
237
+ return _mmlu_choice("MMLU_OLMES", styler, dataset)
238
+
239
+
240
+ def mmlu_full_text(dataset: DatasetPolicy | None = None) -> Benchmark:
241
+ styler = _FullTextMmluStyle(question_prefix="Question: ", cue_text="Answer:", initial_prompt=_full_text_preamble)
242
+ # The registry/hash identity is the compact "FullTextMMLU"; the display name keeps the spelled-out form.
243
+ return _mmlu_choice("FullTextMMLU", styler, dataset, display_name="Full Text MMLU")
244
+
245
+
246
+ def mmlu_idk(dataset: DatasetPolicy | None = None) -> Benchmark:
247
+ styler = MCStyle(
248
+ question_prefix="Question: ", cue_text="Answer:", initial_prompt=_idk_preamble
249
+ ).with_abstention_option(" ?")
250
+ return _mmlu_choice("MMLU_IDK", styler, dataset)
251
+
252
+
253
+ def mmlu_cot(dataset: DatasetPolicy | None = None) -> Benchmark:
254
+ # Free-form (completion) and 0-shot only, so it takes the general compose path with its own kind.
255
+ return ComposedBenchmark.compose(
256
+ id="MMLU_COT",
257
+ kind=_MmluCotKind(),
258
+ sample_split="test",
259
+ fewshot=NoFewShot(),
260
+ subjects=ListOfSubjects(MMLU_SUBJECTS),
261
+ dataset_policy=_mmlu_dataset(dataset),
262
+ language=Language.ENG,
263
+ )
264
+
265
+
266
+ MMLU_BENCHMARKS: list[Benchmark] = [mmlu(), mmlu_olmes(), mmlu_full_text(), mmlu_idk(), mmlu_cot()]
@@ -12,7 +12,6 @@ from typing import Any, final, override
12
12
  from eval_framework.choices import ChoiceFields, ChoiceReader
13
13
  from eval_framework.composed import ComposedBenchmark
14
14
  from eval_framework.contract import Benchmark
15
- from eval_framework.eval_kind import Choice
16
15
  from eval_framework.tasks.base import Language
17
16
  from eval_framework.tasks.dataset_loading import DatasetPolicy
18
17
  from eval_framework.tasks.dataset_revisions import pinned_frozen
@@ -46,11 +45,11 @@ def _piqa_benchmark(
46
45
  fewshot_split: str,
47
46
  dataset: DatasetPolicy | None = None,
48
47
  ) -> Benchmark:
49
- kind = Choice(reader=PiqaReader(), styler=styler)
50
48
  dataset_policy = dataset if dataset is not None else pinned_frozen("ybisk/piqa")
51
- return ComposedBenchmark.compose(
49
+ return ComposedBenchmark.choice(
52
50
  id=id,
53
- kind=kind,
51
+ reader=PiqaReader(),
52
+ styler=styler,
54
53
  sample_split=sample_split,
55
54
  fewshot_split=fewshot_split,
56
55
  dataset_policy=dataset_policy,
@@ -10,7 +10,6 @@ from typing import Any, Literal, final, override
10
10
  from eval_framework.choices import ChoiceFields, ChoiceReader
11
11
  from eval_framework.composed import ComposedBenchmark
12
12
  from eval_framework.contract import Benchmark
13
- from eval_framework.eval_kind import Choice
14
13
  from eval_framework.subjects import ListOfSubjects
15
14
  from eval_framework.tasks.base import Language
16
15
  from eval_framework.tasks.dataset_loading import DatasetPolicy
@@ -43,11 +42,11 @@ _CUE_TEXT = "Antwort:"
43
42
  def _piqa_ellamind_benchmark(
44
43
  id: str, styler: TaskStyler, distractor_level: Literal["easy", "hard"], dataset: DatasetPolicy | None = None
45
44
  ) -> Benchmark:
46
- kind = Choice(reader=PiqaReader(distractor_level), styler=styler)
47
45
  dataset_policy = dataset if dataset is not None else pinned_by_framework("ellamind/piqa-multilingual")
48
- return ComposedBenchmark.compose(
46
+ return ComposedBenchmark.choice(
49
47
  id=id,
50
- kind=kind,
48
+ reader=PiqaReader(distractor_level),
49
+ styler=styler,
51
50
  sample_split="validation",
52
51
  fewshot_split="validation",
53
52
  subjects=ListOfSubjects(["deu"]),