eval-framework 0.13.0__tar.gz → 0.13.2__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 (186) hide show
  1. {eval_framework-0.13.0 → eval_framework-0.13.2}/PKG-INFO +3 -3
  2. {eval_framework-0.13.0 → eval_framework-0.13.2}/pyproject.toml +3 -3
  3. {eval_framework-0.13.0 → eval_framework-0.13.2}/pyproject.toml.orig +3 -3
  4. eval_framework-0.13.2/src/eval_framework/benchmarks/arc.py +69 -0
  5. eval_framework-0.13.2/src/eval_framework/benchmarks/arc_ellamind.py +71 -0
  6. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/gpqa_ellamind.py +10 -3
  7. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/hle_ellamind.py +10 -3
  8. eval_framework-0.13.2/src/eval_framework/benchmarks/social_iqa.py +151 -0
  9. eval_framework-0.13.0/src/eval_framework/benchmarks/winogrande_ellamind.py → eval_framework-0.13.2/src/eval_framework/benchmarks/winogrande.py +18 -46
  10. eval_framework-0.13.2/src/eval_framework/benchmarks/winogrande_ellamind.py +65 -0
  11. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/composed.py +8 -17
  12. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/math_minerva_completion.py +6 -0
  13. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/multipl_e_assertion.py +13 -4
  14. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/response_generator.py +25 -3
  15. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/dataset_loading.py +64 -3
  16. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/eval_config.py +1 -11
  17. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -1
  18. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/task_names.py +12 -8
  19. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/utils.py +1 -1
  20. eval_framework-0.13.0/src/eval_framework/tasks/benchmarks/arc.py +0 -108
  21. eval_framework-0.13.0/src/eval_framework/tasks/benchmarks/arc_ellamind.py +0 -72
  22. eval_framework-0.13.0/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -248
  23. eval_framework-0.13.0/src/eval_framework/tasks/benchmarks/winogrande.py +0 -162
  24. {eval_framework-0.13.0 → eval_framework-0.13.2}/LICENSE +0 -0
  25. {eval_framework-0.13.0 → eval_framework-0.13.2}/README.md +0 -0
  26. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/__init__.py +0 -0
  27. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/base_config.py +0 -0
  28. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/__init__.py +0 -0
  29. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/arc_de.py +0 -0
  30. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/copa.py +0 -0
  31. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/csqa.py +0 -0
  32. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/csqa_ellamind.py +0 -0
  33. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/goldenswag.py +0 -0
  34. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/hellaswag.py +0 -0
  35. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/hellaswag_ellamind.py +0 -0
  36. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/medqa.py +0 -0
  37. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/mmlu.py +0 -0
  38. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/piqa.py +0 -0
  39. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/piqa_ellamind.py +0 -0
  40. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/sciq.py +0 -0
  41. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/simpleqa_ellamind.py +0 -0
  42. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/benchmarks/siqa_ellamind.py +0 -0
  43. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/choices.py +0 -0
  44. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/context/__init__.py +0 -0
  45. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/context/determined.py +0 -0
  46. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/context/eval.py +0 -0
  47. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/context/local.py +0 -0
  48. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/contract.py +0 -0
  49. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/eval_kind.py +0 -0
  50. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/evaluation_generator.py +0 -0
  51. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/exceptions.py +0 -0
  52. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/drop_process_results.py +0 -0
  53. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/ifeval_impl/README.md +0 -0
  54. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
  55. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
  56. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
  57. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
  58. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/fewshot.py +0 -0
  59. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/__init__.py +0 -0
  60. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/aleph_alpha.py +0 -0
  61. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/base.py +0 -0
  62. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/huggingface.py +0 -0
  63. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/models.py +0 -0
  64. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/llm/openai.py +0 -0
  65. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/logger.py +0 -0
  66. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/main.py +0 -0
  67. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/__init__.py +0 -0
  68. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
  69. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
  70. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/base.py +0 -0
  71. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/__init__.py +0 -0
  72. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
  73. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
  74. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
  75. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
  76. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/csv_format.py +0 -0
  77. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
  78. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
  79. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/f1.py +0 -0
  80. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/format_checker.py +0 -0
  81. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
  82. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/ifeval.py +0 -0
  83. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/json_format.py +0 -0
  84. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/language_checker.py +0 -0
  85. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/length_control.py +0 -0
  86. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
  87. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
  88. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
  89. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/repetition.py +0 -0
  90. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
  91. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
  92. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
  93. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
  94. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/completion/text_counter.py +0 -0
  95. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
  96. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
  97. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/efficiency/finish_reason.py +0 -0
  98. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/efficiency/token_counters.py +0 -0
  99. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/__init__.py +0 -0
  100. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/base.py +0 -0
  101. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
  102. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
  103. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
  104. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
  105. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
  106. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
  107. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
  108. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/language.py +0 -0
  109. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
  110. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/models.py +0 -0
  111. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
  112. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
  113. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
  114. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
  115. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
  116. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
  117. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
  118. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
  119. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
  120. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
  121. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
  122. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
  123. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
  124. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
  125. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
  126. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/llm/utils.py +0 -0
  127. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
  128. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
  129. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
  130. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
  131. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
  132. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
  133. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
  134. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
  135. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/py.typed +0 -0
  136. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/result_processors/__init__.py +0 -0
  137. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/result_processors/base.py +0 -0
  138. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/result_processors/hf_uploader.py +0 -0
  139. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/result_processors/result_processor.py +0 -0
  140. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
  141. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/run.py +0 -0
  142. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/run_direct.py +0 -0
  143. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/shared/errors.py +0 -0
  144. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/shared/types.py +0 -0
  145. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/subjects.py +0 -0
  146. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/suite.py +0 -0
  147. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
  148. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/__init__.py +0 -0
  149. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/base.py +0 -0
  150. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
  151. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
  152. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
  153. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
  154. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
  155. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
  156. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/gsm8k_ellamind.py +0 -0
  157. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/hendrycks_math_ellamind.py +0 -0
  158. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/humaneval.py +0 -0
  159. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/humaneval_ellamind.py +0 -0
  160. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/humaneval_plus.py +0 -0
  161. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
  162. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
  163. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
  164. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/mbpp_ellamind.py +0 -0
  165. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
  166. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
  167. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
  168. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
  169. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/dataset_revisions.py +0 -0
  170. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
  171. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/lazy.py +0 -0
  172. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/markdown_doc.py +0 -0
  173. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/registry.py +0 -0
  174. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/task_loader.py +0 -0
  175. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/tasks/task_style.py +0 -0
  176. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/constants.py +0 -0
  177. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/file_ops.py +0 -0
  178. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/helpers.py +0 -0
  179. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/logging.py +0 -0
  180. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/packaging.py +0 -0
  181. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/eval_framework/utils/tqdm_handler.py +0 -0
  182. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/template_formatting/README.md +0 -0
  183. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/template_formatting/__init__.py +0 -0
  184. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/template_formatting/formatter.py +0 -0
  185. {eval_framework-0.13.0 → eval_framework-0.13.2}/src/template_formatting/mistral_formatter.py +0 -0
  186. {eval_framework-0.13.0 → eval_framework-0.13.2}/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.13.0
3
+ Version: 0.13.2
4
4
  Summary: Evaluation Framework
5
5
  Author: Aleph Alpha Research
6
6
  License: Apache License
@@ -232,7 +232,7 @@ Requires-Dist: jsonlines>=4,<5
232
232
  Requires-Dist: lxml>=6.1.3,<7
233
233
  Requires-Dist: python-iso639>=2026.7.23
234
234
  Requires-Dist: wandb>=0.30.0,<1
235
- Requires-Dist: boto3>=1.43.93,<2
235
+ Requires-Dist: boto3>=1.43.94,<2
236
236
  Requires-Dist: numpy>=2.5.3
237
237
  Requires-Dist: antlr4-python3-runtime==4.11.0
238
238
  Requires-Dist: scipy>=1.18.1,<2
@@ -241,7 +241,7 @@ Requires-Dist: eval-framework[determined,api,openai,transformers,accelerate,opti
241
241
  Requires-Dist: aleph-alpha-client>=11.5.1 ; extra == 'api'
242
242
  Requires-Dist: determined>=0.38.1,<0.39 ; extra == 'determined'
243
243
  Requires-Dist: tensorboard==2.21.0 ; extra == 'determined'
244
- Requires-Dist: openai>=3.13.0,<4 ; extra == 'openai'
244
+ Requires-Dist: openai>=3.14.0,<4 ; extra == 'openai'
245
245
  Requires-Dist: tiktoken>=0.14.0,<1 ; extra == 'openai'
246
246
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'openai'
247
247
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'optional'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.13.0"
3
+ version = "0.13.2"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12,<3.15"
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "lxml>=6.1.3,<7",
36
36
  "python-iso639>=2026.7.23",
37
37
  "wandb>=0.30.0,<1",
38
- "boto3>=1.43.93,<2",
38
+ "boto3>=1.43.94,<2",
39
39
  "numpy>=2.5.3",
40
40
  "antlr4-python3-runtime==4.11.0",
41
41
  "scipy>=1.18.1,<2",
@@ -54,7 +54,7 @@ determined = [
54
54
  ]
55
55
  api = ["aleph-alpha-client>=11.5.1"]
56
56
  openai = [
57
- "openai>=3.13.0,<4",
57
+ "openai>=3.14.0,<4",
58
58
  "tiktoken>=0.14.0,<1",
59
59
  "transformers>=4.45.2,<5",
60
60
  ]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.13.0"
3
+ version = "0.13.2"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -39,7 +39,7 @@ dependencies = [
39
39
  "lxml>=6.1.3,<7",
40
40
  "python-iso639>=2026.7.23",
41
41
  "wandb>=0.30.0,<1",
42
- "boto3>=1.43.93,<2",
42
+ "boto3>=1.43.94,<2",
43
43
  "numpy>=2.5.3",
44
44
  # is a dependency of sympy, but not explicitly listed in the requirements.txt
45
45
  # https://github.com/sympy/sympy/blob/0204fa34e8f6f6f8ccb4de01209be9a2345c9d6e/doc/src/contributing/dependencies.md?plain=1#L125
@@ -55,7 +55,7 @@ determined = [
55
55
  ]
56
56
  api = ["aleph-alpha-client>=11.5.1"]
57
57
  openai = [
58
- "openai>=3.13.0,<4",
58
+ "openai>=3.14.0,<4",
59
59
  "tiktoken>=0.14.0,<1",
60
60
  "transformers>=4.45.2,<5",
61
61
  ]
@@ -0,0 +1,69 @@
1
+ """ARC (AI2 Reasoning Challenge): https://huggingface.co/datasets/allenai/ai2_arc
2
+
3
+ Grade-school science multiple-choice questions, split into the ARC-Easy and ARC-Challenge subjects. The
4
+ base task scores the full answer text (cloze); the OLMES variant shows the options as space-prefixed
5
+ lettered choices and scores the letters; the IDK variant lets the model abstain with "I do not know".
6
+ """
7
+
8
+ from typing import Any, final, override
9
+
10
+ from eval_framework.choices import ChoiceFields, ChoiceReader
11
+ from eval_framework.composed import ComposedBenchmark
12
+ from eval_framework.contract import Benchmark
13
+ from eval_framework.subjects import ListOfSubjects
14
+ from eval_framework.tasks.base import Language
15
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
16
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
17
+ from eval_framework.tasks.task_style import ClozeStyle, MCStyle, TaskStyler, answer_key_to_index
18
+
19
+ _IDK_PREAMBLE = (
20
+ "Answer only if you are confident, since mistakes may be penalised, while correct answers receive points. "
21
+ "It is acceptable to answer with 'I do not know' if you are unsure, and you will receive 0 points."
22
+ )
23
+
24
+
25
+ @final
26
+ class ArcReader(ChoiceReader):
27
+ """Reads an ARC item: the question and its answer options, with the correct one at ``answerKey`` —
28
+ a letter (A–E) or a 1-based number, both normalised to a 0-based index."""
29
+
30
+ @override
31
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
32
+ return ChoiceFields(
33
+ raw_question=item["question"],
34
+ choices=item["choices"]["text"],
35
+ correct_index=answer_key_to_index(item["answerKey"]),
36
+ )
37
+
38
+
39
+ def _arc_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
40
+ dataset_policy = dataset if dataset is not None else pinned_by_framework("allenai/ai2_arc")
41
+ return ComposedBenchmark.choice(
42
+ id=id,
43
+ reader=ArcReader(),
44
+ styler=styler,
45
+ sample_split="test",
46
+ fewshot_split="train",
47
+ subjects=ListOfSubjects(["ARC-Easy", "ARC-Challenge"]),
48
+ dataset_policy=dataset_policy,
49
+ language=Language.ENG,
50
+ )
51
+
52
+
53
+ def arc(dataset: DatasetPolicy | None = None) -> Benchmark:
54
+ return _arc_benchmark("ARC", ClozeStyle(question_prefix="Question: ", cue_text="Answer:"), dataset)
55
+
56
+
57
+ def arc_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
58
+ styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True)
59
+ return _arc_benchmark("ARC_OLMES", styler, dataset)
60
+
61
+
62
+ def arc_idk(dataset: DatasetPolicy | None = None) -> Benchmark:
63
+ styler = ClozeStyle(
64
+ question_prefix="Question: ", cue_text="Answer:", initial_prompt=lambda _subject: _IDK_PREAMBLE
65
+ ).with_abstention_option(" I do not know.")
66
+ return _arc_benchmark("ARC_IDK", styler, dataset)
67
+
68
+
69
+ ARC_BENCHMARKS: list[Benchmark] = [arc(), arc_olmes(), arc_idk()]
@@ -0,0 +1,71 @@
1
+ """German ARC (EllaMind): https://huggingface.co/datasets/ellamind/arc-multilingual
2
+
3
+ Grade-school science questions in German. Every slice loads the single German config (``deu``); the
4
+ ARC-Easy and ARC-Challenge subjects are the rows of that config tagged by the ``arc_config`` column. Cloze
5
+ scores the full answer text, MC the letter labels, BPB only the ground-truth answer's bits-per-byte.
6
+ """
7
+
8
+ from typing import Any, final, override
9
+
10
+ from eval_framework.choices import ChoiceFields, ChoiceReader
11
+ from eval_framework.composed import ComposedBenchmark
12
+ from eval_framework.contract import Benchmark
13
+ from eval_framework.subjects import ListOfSubjects
14
+ from eval_framework.tasks.base import Language
15
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
16
+ from eval_framework.tasks.dataset_revisions import pinned_by_framework
17
+ from eval_framework.tasks.task_style import BPBStyle, ClozeStyle, MCStyle, TaskStyler, answer_key_to_index
18
+
19
+
20
+ @final
21
+ class ArcEllamindReader(ChoiceReader):
22
+ """Reads a German ARC item: the question and its answer options, with the correct one at ``answer_key``
23
+ (a letter A–E or a 1-based number)."""
24
+
25
+ @override
26
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
27
+ return ChoiceFields(
28
+ raw_question=item["question"],
29
+ choices=item["choices"],
30
+ correct_index=answer_key_to_index(item["answer_key"]),
31
+ )
32
+
33
+
34
+ def _arc_ellamind_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
35
+ # ARC-Easy and ARC-Challenge share the single "deu" config, tagged by the ``arc_config`` column.
36
+ source = (
37
+ dataset
38
+ if dataset is not None
39
+ else pinned_by_framework("ellamind/arc-multilingual").subject_encoded_in_column(
40
+ config="deu", column="arc_config"
41
+ )
42
+ )
43
+ return ComposedBenchmark.choice(
44
+ id=id,
45
+ reader=ArcEllamindReader(),
46
+ styler=styler,
47
+ sample_split="test",
48
+ fewshot_split="test",
49
+ subjects=ListOfSubjects(["ARC-Easy", "ARC-Challenge"]),
50
+ dataset_policy=source,
51
+ language=Language.DEU,
52
+ )
53
+
54
+
55
+ def arc_ellamind_cloze_de(dataset: DatasetPolicy | None = None) -> Benchmark:
56
+ return _arc_ellamind_benchmark("ARC_ELLAMIND_CLOZE_DE", ClozeStyle.for_language(Language.DEU), dataset)
57
+
58
+
59
+ def arc_ellamind_mc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
60
+ return _arc_ellamind_benchmark("ARC_ELLAMIND_MC_DE", MCStyle.for_language(Language.DEU), dataset)
61
+
62
+
63
+ def arc_ellamind_bpb_de(dataset: DatasetPolicy | None = None) -> Benchmark:
64
+ return _arc_ellamind_benchmark("ARC_ELLAMIND_BPB_DE", BPBStyle.for_language(Language.DEU), dataset)
65
+
66
+
67
+ ARC_ELLAMIND_BENCHMARKS: list[Benchmark] = [
68
+ arc_ellamind_cloze_de(),
69
+ arc_ellamind_mc_de(),
70
+ arc_ellamind_bpb_de(),
71
+ ]
@@ -13,7 +13,7 @@ from eval_framework.composed import ComposedBenchmark
13
13
  from eval_framework.contract import Benchmark
14
14
  from eval_framework.subjects import ListOfSubjects
15
15
  from eval_framework.tasks.base import Language
16
- from eval_framework.tasks.dataset_loading import DatasetPolicy, Subset
16
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
17
17
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
18
18
  from eval_framework.tasks.task_style import BPBStyle, ClozeStyle, MCStyle, TaskStyler, shuffle_correct_with_distractors
19
19
 
@@ -47,8 +47,15 @@ def _gpqa_ellamind_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy
47
47
 
48
48
 
49
49
  def _gpqa_ellamind_diamond_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
50
- source = dataset if dataset is not None else pinned_by_framework("ellamind/gpqa-multilingual")
51
- return _gpqa_ellamind_benchmark(id, styler, Subset(source, keep=lambda row: row["is_diamond"]))
50
+ # The diamond variants keep only the ``is_diamond`` rows of the full dataset.
51
+ source = (
52
+ dataset
53
+ if dataset is not None
54
+ else pinned_by_framework("ellamind/gpqa-multilingual").subset(
55
+ lambda row: row["is_diamond"], description="the diamond subset"
56
+ )
57
+ )
58
+ return _gpqa_ellamind_benchmark(id, styler, source)
52
59
 
53
60
 
54
61
  def gpqa_ellamind_mc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
@@ -13,7 +13,7 @@ from eval_framework.composed import ComposedBenchmark
13
13
  from eval_framework.contract import Benchmark
14
14
  from eval_framework.subjects import ListOfSubjects
15
15
  from eval_framework.tasks.base import Language
16
- from eval_framework.tasks.dataset_loading import DatasetPolicy, Subset
16
+ from eval_framework.tasks.dataset_loading import DatasetPolicy
17
17
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
18
18
  from eval_framework.tasks.task_style import BPBStyle, ClozeStyle, MCStyle, TaskStyler, shuffle_correct_with_distractors
19
19
 
@@ -47,8 +47,15 @@ def _hle_ellamind_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy
47
47
 
48
48
 
49
49
  def _hle_ellamind_native_benchmark(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
50
- source = dataset if dataset is not None else pinned_by_framework("ellamind/hle-multilingual")
51
- return _hle_ellamind_benchmark(id, styler, Subset(source, keep=lambda row: row["answer_type"] == "multipleChoice"))
50
+ # The NATIVE variants keep only the items that are natively multiple-choice in the original benchmark.
51
+ source = (
52
+ dataset
53
+ if dataset is not None
54
+ else pinned_by_framework("ellamind/hle-multilingual").subset(
55
+ lambda row: row["answer_type"] == "multipleChoice", description="the natively multiple-choice items"
56
+ )
57
+ )
58
+ return _hle_ellamind_benchmark(id, styler, source)
52
59
 
53
60
 
54
61
  def hle_ellamind_mc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
@@ -0,0 +1,151 @@
1
+ """Social IQa (English): https://huggingface.co/datasets/allenai/social_i_qa
2
+
3
+ Commonsense reasoning about social situations: a context and question with three answer options
4
+ (``answerA``/``answerB``/``answerC``) and a 1-indexed ``label`` marking the correct one. The registered
5
+ variant is OLMES-style: options are shown as space-prefixed lettered choices (" A. …") and the model is
6
+ scored over the letter labels.
7
+
8
+ ``allenai/social_i_qa`` ships only a (no-longer-supported) loading script on its main branch, so it cannot
9
+ be loaded by a pinned commit under ``datasets`` >= 4. We load Hugging Face's auto-generated parquet branch
10
+ instead, falling back to the original AI2 Mosaic source if that branch is unavailable.
11
+ """
12
+
13
+ import json
14
+ import os
15
+ import zipfile
16
+ from pathlib import Path
17
+ from typing import Any, final, override
18
+ from urllib.request import urlretrieve
19
+
20
+ from datasets import Dataset, DatasetDict, DownloadConfig, load_dataset
21
+
22
+ from eval_framework.choices import ChoiceFields, ChoiceReader
23
+ from eval_framework.composed import ComposedBenchmark
24
+ from eval_framework.contract import Benchmark
25
+ from eval_framework.tasks.base import Language
26
+ from eval_framework.tasks.dataset_loading import DatasetLoader, DatasetPolicy
27
+ from eval_framework.tasks.task_style import MCStyle
28
+
29
+ SOCIAL_I_QA_DATASET_PATH = "allenai/social_i_qa"
30
+ # Hugging Face auto-generates a parquet copy of every dataset on this hidden branch; we load from it
31
+ # because the dataset itself only ships a loading script (unsupported since datasets 4.x) on its main branch.
32
+ _PARQUET_REVISION = "refs/convert/parquet"
33
+ _SOURCE_ZIP_URL = "https://storage.googleapis.com/ai2-mosaic/public/socialiqa/socialiqa-train-dev.zip"
34
+ _ZIP_SUBDIR = "socialiqa-train-dev"
35
+
36
+
37
+ def _cache_dir() -> str:
38
+ return os.environ.get("HF_DATASET_CACHE_DIR", f"{Path.home()}/.cache/huggingface/datasets")
39
+
40
+
41
+ def _load_from_ai2_source(cache_dir: str) -> DatasetDict:
42
+ """Rebuild train/validation from AI2 Mosaic's original zip (jsonl rows paired with label files),
43
+ used only if the Hugging Face parquet branch cannot be reached."""
44
+ root = Path(cache_dir) / "social_i_qa_direct"
45
+ extract_dir = root / _ZIP_SUBDIR
46
+ if not extract_dir.exists() or not list(extract_dir.glob("*.jsonl")):
47
+ zip_path = root / "socialiqa-train-dev.zip"
48
+ zip_path.parent.mkdir(parents=True, exist_ok=True)
49
+ if not zip_path.exists():
50
+ urlretrieve(_SOURCE_ZIP_URL, zip_path)
51
+ with zipfile.ZipFile(zip_path, "r") as zf:
52
+ zf.extractall(zip_path.parent)
53
+
54
+ def read_split(jsonl_path: Path, labels_path: Path) -> list[dict[str, Any]]:
55
+ labels = labels_path.read_text(encoding="utf-8").splitlines()
56
+ rows = []
57
+ for idx, line in enumerate(jsonl_path.read_text(encoding="utf-8").splitlines()):
58
+ data = json.loads(line)
59
+ rows.append(
60
+ {
61
+ "context": data["context"],
62
+ "question": data["question"],
63
+ "answerA": data["answerA"],
64
+ "answerB": data["answerB"],
65
+ "answerC": data["answerC"],
66
+ "label": labels[idx].strip(),
67
+ }
68
+ )
69
+ return rows
70
+
71
+ return DatasetDict(
72
+ {
73
+ "train": Dataset.from_list(read_split(extract_dir / "train.jsonl", extract_dir / "train-labels.lst")),
74
+ "validation": Dataset.from_list(read_split(extract_dir / "dev.jsonl", extract_dir / "dev-labels.lst")),
75
+ }
76
+ )
77
+
78
+
79
+ @final
80
+ class _SocialIqaLoader(DatasetLoader):
81
+ """Loads social_i_qa from Hugging Face's parquet branch, falling back to the original AI2 source."""
82
+
83
+ def __init__(self, revision: str) -> None:
84
+ self._revision = revision
85
+
86
+ @override
87
+ def load(self, name: str | None) -> DatasetDict:
88
+ cache_dir = _cache_dir()
89
+ try:
90
+ return load_dataset(
91
+ SOCIAL_I_QA_DATASET_PATH,
92
+ revision=self._revision,
93
+ cache_dir=cache_dir,
94
+ download_config=DownloadConfig(cache_dir=cache_dir, max_retries=5),
95
+ )
96
+ except Exception:
97
+ return _load_from_ai2_source(cache_dir)
98
+
99
+ @override
100
+ def metadata(self) -> dict[str, str]:
101
+ return {"dataset_path": SOCIAL_I_QA_DATASET_PATH}
102
+
103
+
104
+ @final
105
+ class _SocialIqaDataset(DatasetPolicy):
106
+ """social_i_qa's data policy — see the module docstring for why it can't use a plain ``Pinned``."""
107
+
108
+ @override
109
+ def loader(self, custom_hf_revision: str | None) -> DatasetLoader:
110
+ return _SocialIqaLoader(custom_hf_revision or _PARQUET_REVISION)
111
+
112
+ @override
113
+ def documentation(self) -> str:
114
+ url = f"https://huggingface.co/datasets/{SOCIAL_I_QA_DATASET_PATH}"
115
+ return (
116
+ f"- Link to dataset: [{url}]({url})\n"
117
+ "- This dataset ships only a loading script on its `main` branch, which newer `datasets` versions no "
118
+ f"longer support; it is therefore loaded from Hugging Face's auto-generated parquet branch "
119
+ f"`{_PARQUET_REVISION}` instead."
120
+ )
121
+
122
+
123
+ @final
124
+ class SocialIqaReader(ChoiceReader):
125
+ """Reads a Social IQa item: the shown question is the context followed by the question, with the correct
126
+ option at the 1-indexed ``label``."""
127
+
128
+ @override
129
+ def read(self, item: dict[str, Any]) -> ChoiceFields:
130
+ return ChoiceFields(
131
+ raw_question=f"{item['context']} {item['question']}".strip(),
132
+ choices=[item["answerA"], item["answerB"], item["answerC"]],
133
+ correct_index=int(item["label"]) - 1,
134
+ )
135
+
136
+
137
+ def social_iqa_mc_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
138
+ styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True)
139
+ dataset_policy = dataset if dataset is not None else _SocialIqaDataset()
140
+ return ComposedBenchmark.choice(
141
+ id="SocialIQAMC_OLMES",
142
+ reader=SocialIqaReader(),
143
+ styler=styler,
144
+ sample_split="train",
145
+ fewshot_split="train",
146
+ dataset_policy=dataset_policy,
147
+ language=Language.ENG,
148
+ )
149
+
150
+
151
+ SOCIAL_IQA_BENCHMARKS: list[Benchmark] = [social_iqa_mc_olmes()]
@@ -1,10 +1,9 @@
1
- """German Winogrande (EllaMind) tasks.
1
+ """Winogrande: https://huggingface.co/datasets/allenai/winogrande
2
2
 
3
- https://huggingface.co/datasets/ellamind/winogrande-multilingual
4
-
5
- The sentence contains a blank ``_`` filled by ``option1`` or ``option2``; ``answer`` selects the correct
6
- one. Cloze and MC score the two full "option + suffix" completions; partial evaluation instead scores the
7
- shared suffix under each option-augmented prefix.
3
+ Pronoun-resolution sentences with a blank ``_`` filled by ``option1`` or ``option2``; ``answer`` selects
4
+ the correct one. The registered task uses partial evaluation: each item becomes two samples that score the
5
+ shared sentence suffix under each option-augmented prefix ``p(suffix | prefix + option)``. ``WinograndeReader``
6
+ and ``PartialEval`` live here and are reused by the multilingual EllaMind variants.
8
7
  """
9
8
 
10
9
  from typing import TYPE_CHECKING, Any, final, override
@@ -20,7 +19,7 @@ from eval_framework.subjects import ListOfSubjects
20
19
  from eval_framework.tasks.base import Language
21
20
  from eval_framework.tasks.dataset_loading import DatasetPolicy
22
21
  from eval_framework.tasks.dataset_revisions import pinned_by_framework
23
- from eval_framework.tasks.task_style import ClozeStyle, MCStyle, TaskStyler
22
+ from eval_framework.tasks.task_style import ClozeStyle
24
23
  from template_formatting.formatter import Message
25
24
 
26
25
  if TYPE_CHECKING:
@@ -99,48 +98,21 @@ class PartialEval(EvalKind):
99
98
  return completion_text # partial evaluation is scored by loglikelihood; no completion path
100
99
 
101
100
 
102
- def _winogrande_dataset(dataset: DatasetPolicy | None) -> DatasetPolicy:
103
- return dataset if dataset is not None else pinned_by_framework("ellamind/winogrande-multilingual")
104
-
105
-
106
- def _winogrande_choice(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
107
- return ComposedBenchmark.choice(
108
- id=id,
109
- reader=WinograndeReader(),
110
- styler=styler,
111
- sample_split="validation",
112
- fewshot_split="validation",
113
- subjects=ListOfSubjects(["deu"]),
114
- dataset_policy=_winogrande_dataset(dataset),
115
- language=Language.DEU,
116
- )
117
-
118
-
119
- def winogrande_ellamind_cloze_de(dataset: DatasetPolicy | None = None) -> Benchmark:
120
- styler = ClozeStyle(question_prefix="", trailing_newline=False, cue_text="")
121
- return _winogrande_choice("WINOGRANDE_ELLAMIND_CLOZE_DE", styler, dataset)
122
-
123
-
124
- def winogrande_ellamind_mc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
125
- return _winogrande_choice("WINOGRANDE_ELLAMIND_MC_DE", MCStyle.for_language(Language.DEU), dataset)
126
-
127
-
128
- def winogrande_ellamind_partial_eval_de(dataset: DatasetPolicy | None = None) -> Benchmark:
129
- # Partial evaluation scores the suffix directly; its few-shot demonstrations render as ordinary cloze.
101
+ def winogrande_cloze(dataset: DatasetPolicy | None = None) -> Benchmark:
102
+ # "Cloze" is the registered name, but the task is partial evaluation; its few-shot demonstrations
103
+ # render as ordinary cloze (the prefix, then the correct option + suffix).
130
104
  fewshot_styler = ClozeStyle(question_prefix="", trailing_newline=False, cue_text="")
105
+ dataset_policy = dataset if dataset is not None else pinned_by_framework("allenai/winogrande")
131
106
  return ComposedBenchmark.compose(
132
- id="WINOGRANDE_ELLAMIND_PARTIAL_EVAL_DE",
107
+ id="WINOGRANDECloze",
108
+ display_name="WinograndeCloze",
133
109
  kind=PartialEval(),
134
- sample_split="validation",
135
- fewshot=SampledFewShot(WinograndeReader(), fewshot_styler, "validation"),
136
- subjects=ListOfSubjects(["deu"]),
137
- dataset_policy=_winogrande_dataset(dataset),
138
- language=Language.DEU,
110
+ sample_split="train",
111
+ fewshot=SampledFewShot(WinograndeReader(), fewshot_styler, "train"),
112
+ subjects=ListOfSubjects(["winogrande_xl"]),
113
+ dataset_policy=dataset_policy,
114
+ language=Language.ENG,
139
115
  )
140
116
 
141
117
 
142
- WINOGRANDE_ELLAMIND_BENCHMARKS: list[Benchmark] = [
143
- winogrande_ellamind_cloze_de(),
144
- winogrande_ellamind_mc_de(),
145
- winogrande_ellamind_partial_eval_de(),
146
- ]
118
+ WINOGRANDE_BENCHMARKS: list[Benchmark] = [winogrande_cloze()]
@@ -0,0 +1,65 @@
1
+ """German Winogrande (EllaMind) tasks.
2
+
3
+ https://huggingface.co/datasets/ellamind/winogrande-multilingual
4
+
5
+ The sentence contains a blank ``_`` filled by ``option1`` or ``option2``; ``answer`` selects the correct
6
+ one. Cloze and MC score the two full "option + suffix" completions; partial evaluation instead scores the
7
+ shared suffix under each option-augmented prefix.
8
+ """
9
+
10
+ from eval_framework.benchmarks.winogrande import PartialEval, WinograndeReader
11
+ from eval_framework.composed import ComposedBenchmark
12
+ from eval_framework.contract import Benchmark
13
+ from eval_framework.fewshot import SampledFewShot
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 ClozeStyle, MCStyle, TaskStyler
19
+
20
+
21
+ def _winogrande_dataset(dataset: DatasetPolicy | None) -> DatasetPolicy:
22
+ return dataset if dataset is not None else pinned_by_framework("ellamind/winogrande-multilingual")
23
+
24
+
25
+ def _winogrande_choice(id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None) -> Benchmark:
26
+ return ComposedBenchmark.choice(
27
+ id=id,
28
+ reader=WinograndeReader(),
29
+ styler=styler,
30
+ sample_split="validation",
31
+ fewshot_split="validation",
32
+ subjects=ListOfSubjects(["deu"]),
33
+ dataset_policy=_winogrande_dataset(dataset),
34
+ language=Language.DEU,
35
+ )
36
+
37
+
38
+ def winogrande_ellamind_cloze_de(dataset: DatasetPolicy | None = None) -> Benchmark:
39
+ styler = ClozeStyle(question_prefix="", trailing_newline=False, cue_text="")
40
+ return _winogrande_choice("WINOGRANDE_ELLAMIND_CLOZE_DE", styler, dataset)
41
+
42
+
43
+ def winogrande_ellamind_mc_de(dataset: DatasetPolicy | None = None) -> Benchmark:
44
+ return _winogrande_choice("WINOGRANDE_ELLAMIND_MC_DE", MCStyle.for_language(Language.DEU), dataset)
45
+
46
+
47
+ def winogrande_ellamind_partial_eval_de(dataset: DatasetPolicy | None = None) -> Benchmark:
48
+ # Partial evaluation scores the suffix directly; its few-shot demonstrations render as ordinary cloze.
49
+ fewshot_styler = ClozeStyle(question_prefix="", trailing_newline=False, cue_text="")
50
+ return ComposedBenchmark.compose(
51
+ id="WINOGRANDE_ELLAMIND_PARTIAL_EVAL_DE",
52
+ kind=PartialEval(),
53
+ sample_split="validation",
54
+ fewshot=SampledFewShot(WinograndeReader(), fewshot_styler, "validation"),
55
+ subjects=ListOfSubjects(["deu"]),
56
+ dataset_policy=_winogrande_dataset(dataset),
57
+ language=Language.DEU,
58
+ )
59
+
60
+
61
+ WINOGRANDE_ELLAMIND_BENCHMARKS: list[Benchmark] = [
62
+ winogrande_ellamind_cloze_de(),
63
+ winogrande_ellamind_mc_de(),
64
+ winogrande_ellamind_partial_eval_de(),
65
+ ]
@@ -5,8 +5,6 @@ import typing
5
5
  from collections.abc import Iterable, Sequence
6
6
  from typing import TYPE_CHECKING, Any, Self, final, override
7
7
 
8
- from datasets import DatasetDict
9
-
10
8
  from eval_framework.choices import ChoiceReader
11
9
  from eval_framework.contract import Benchmark, Eval, ResponseType, Sample
12
10
  from eval_framework.eval_kind import Choice, EvalKind, SampleBody
@@ -63,26 +61,19 @@ class ComposedEval(Eval):
63
61
  self.language = language
64
62
  self.rnd = rnd
65
63
 
66
- def _shuffle_splits(self, hf_dataset: DatasetDict) -> dict[str, list[dict[str, Any]]]:
67
- dataset: dict[str, list[dict[str, Any]]] = {}
68
-
69
- for split, data in hf_dataset.items():
70
- if split not in {self.sample_split, self._fewshot.split()}:
71
- continue
72
-
73
- data_list = list(data)
64
+ def _load_dataset(self, load_key: str | None) -> dict[str, list[dict[str, Any]]]:
65
+ hf_dataset = self.loader.load(load_key)
74
66
 
75
- if split == self.sample_split:
76
- self.rnd.shuffle(data_list)
67
+ sample_rows = list(hf_dataset[self.sample_split])
68
+ self.rnd.shuffle(sample_rows)
69
+ dataset = {self.sample_split: sample_rows}
77
70
 
78
- dataset[split] = data_list
71
+ fewshot_split = self._fewshot.split()
72
+ if self.num_fewshot > 0 and fewshot_split is not None and fewshot_split != self.sample_split:
73
+ dataset[fewshot_split] = list(hf_dataset[fewshot_split])
79
74
 
80
75
  return dataset
81
76
 
82
- def _load_dataset(self, load_key: str | None) -> dict[str, list[dict[str, Any]]]:
83
- hf_dataset = self.loader.load(load_key)
84
- return self._shuffle_splits(hf_dataset=hf_dataset)
85
-
86
77
  @override
87
78
  def iterate_samples(self, num_samples: int | None = None) -> Iterable[Sample]:
88
79
  for subject in self._subjects:
@@ -2,6 +2,8 @@
2
2
  Minerva-style MATH completion metric: exact_match and exact_match_flex.
3
3
  """
4
4
 
5
+ import logging
6
+
5
7
  from eval_framework.metrics.aggregators.aggregators import PassAtK
6
8
  from eval_framework.metrics.base import BaseMetric, MetricResult
7
9
  from eval_framework.metrics.completion.minerva_math_utils import (
@@ -11,6 +13,8 @@ from eval_framework.metrics.completion.minerva_math_utils import (
11
13
  )
12
14
  from eval_framework.shared.types import Completion
13
15
 
16
+ logger = logging.getLogger(__name__)
17
+
14
18
 
15
19
  class MathMinervaCompletion(BaseMetric[Completion]):
16
20
  """
@@ -73,6 +77,8 @@ class MathMinervaCompletion(BaseMetric[Completion]):
73
77
  cot_style=self.cot_style,
74
78
  relaxed=self.relaxed,
75
79
  )
80
+ # Grading can be killed by the pod's memory limit; the last line seen names the sample.
81
+ logger.info("Grading %s_%s gold=%r candidates=%r", response.subject, response.id, gold, all_candidates)
76
82
 
77
83
  exact_match = 0.0
78
84
  if all_candidates: