eval-framework 0.6.3__tar.gz → 0.7.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 (167) hide show
  1. {eval_framework-0.6.3 → eval_framework-0.7.2}/PKG-INFO +7 -6
  2. {eval_framework-0.6.3 → eval_framework-0.7.2}/README.md +3 -1
  3. {eval_framework-0.6.3 → eval_framework-0.7.2}/pyproject.toml +9 -10
  4. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/context/determined.py +6 -0
  5. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/context/eval.py +2 -0
  6. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/context/local.py +1 -0
  7. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/language_checker.py +6 -0
  8. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/response_generator.py +7 -2
  9. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/run.py +8 -0
  10. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/suite.py +2 -0
  11. eval_framework-0.7.2/src/eval_framework/tasks/__init__.py +6 -0
  12. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/base.py +41 -35
  13. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/copa.py +3 -0
  14. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/csqa.py +6 -0
  15. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/drop.py +6 -0
  16. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/gpqa.py +3 -0
  17. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/humaneval.py +3 -0
  18. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/math_reasoning.py +9 -0
  19. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/mbpp.py +1 -0
  20. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/medqa.py +4 -0
  21. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +2 -0
  22. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/piqa.py +4 -5
  23. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/sciq.py +2 -0
  24. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/social_iqa.py +2 -0
  25. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/squad.py +5 -3
  26. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/winogrande.py +2 -0
  27. eval_framework-0.7.2/src/eval_framework/tasks/dataset_revisions.py +84 -0
  28. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/eval_config.py +4 -0
  29. eval_framework-0.7.2/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +3 -0
  30. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/hf-dataset-revisions.json +1 -2
  31. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/registry.py +32 -25
  32. eval_framework-0.7.2/src/eval_framework/tasks/task_names.py +85 -0
  33. eval_framework-0.6.3/src/eval_framework/metrics/completion/bleu.py +0 -76
  34. eval_framework-0.6.3/src/eval_framework/metrics/completion/chrf.py +0 -62
  35. eval_framework-0.6.3/src/eval_framework/metrics/completion/ter.py +0 -67
  36. eval_framework-0.6.3/src/eval_framework/tasks/__init__.py +0 -12
  37. eval_framework-0.6.3/src/eval_framework/tasks/dataset_revisions.py +0 -145
  38. eval_framework-0.6.3/src/eval_framework/tasks/task-dataset-revisions.json +0 -66
  39. eval_framework-0.6.3/src/eval_framework/tasks/task_names.py +0 -283
  40. {eval_framework-0.6.3 → eval_framework-0.7.2}/LICENSE +0 -0
  41. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/__init__.py +0 -0
  42. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/base_config.py +0 -0
  43. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/context/__init__.py +0 -0
  44. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/evaluation_generator.py +0 -0
  45. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/exceptions.py +0 -0
  46. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/drop_process_results.py +0 -0
  47. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/ifeval_impl/README.md +0 -0
  48. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
  49. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
  50. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
  51. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
  52. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/__init__.py +0 -0
  53. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/aleph_alpha.py +0 -0
  54. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/base.py +0 -0
  55. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/huggingface.py +0 -0
  56. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/mistral.py +0 -0
  57. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/models.py +0 -0
  58. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/openai.py +0 -0
  59. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/vllm.py +0 -0
  60. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/llm/vllm_local_server.py +0 -0
  61. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/logger.py +0 -0
  62. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/main.py +0 -0
  63. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/__init__.py +0 -0
  64. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
  65. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
  66. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/base.py +0 -0
  67. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/__init__.py +0 -0
  68. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
  69. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
  70. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
  71. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
  72. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/csv_format.py +0 -0
  73. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
  74. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
  75. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/f1.py +0 -0
  76. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/format_checker.py +0 -0
  77. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
  78. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/ifeval.py +0 -0
  79. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/json_format.py +0 -0
  80. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/length_control.py +0 -0
  81. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
  82. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
  83. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
  84. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
  85. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
  86. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/repetition.py +0 -0
  87. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
  88. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
  89. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
  90. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
  91. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/completion/text_counter.py +0 -0
  92. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
  93. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
  94. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/__init__.py +0 -0
  95. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/base.py +0 -0
  96. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
  97. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
  98. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
  99. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
  100. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
  101. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
  102. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
  103. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/language.py +0 -0
  104. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
  105. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/models.py +0 -0
  106. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
  107. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
  108. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
  109. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
  110. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
  111. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
  112. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
  113. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
  114. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
  115. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
  116. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
  117. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
  118. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
  119. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
  120. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
  121. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/llm/utils.py +0 -0
  122. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
  123. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
  124. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
  125. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
  126. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
  127. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
  128. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
  129. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
  130. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/py.typed +0 -0
  131. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/result_processors/__init__.py +0 -0
  132. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/result_processors/base.py +0 -0
  133. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/result_processors/hf_uploader.py +0 -0
  134. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/result_processors/result_processor.py +0 -0
  135. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
  136. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/run_direct.py +0 -0
  137. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/shared/types.py +0 -0
  138. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
  139. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
  140. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
  141. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/arc_de.py +0 -0
  142. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
  143. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
  144. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/goldenswag.py +0 -0
  145. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
  146. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/hellaswag.py +0 -0
  147. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
  148. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/mmlu.py +0 -0
  149. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
  150. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
  151. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/benchmarks/triviaqa.py +0 -0
  152. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/perturbation.py +0 -0
  153. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/task_loader.py +0 -0
  154. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/task_style.py +0 -0
  155. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/tasks/utils.py +0 -0
  156. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/constants.py +0 -0
  157. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/file_ops.py +0 -0
  158. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/generate_task_docs.py +0 -0
  159. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/helpers.py +0 -0
  160. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/logging.py +0 -0
  161. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/packaging.py +0 -0
  162. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/eval_framework/utils/tqdm_handler.py +0 -0
  163. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/template_formatting/README.md +0 -0
  164. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/template_formatting/__init__.py +0 -0
  165. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/template_formatting/formatter.py +0 -0
  166. {eval_framework-0.6.3 → eval_framework-0.7.2}/src/template_formatting/mistral_formatter.py +0 -0
  167. {eval_framework-0.6.3 → eval_framework-0.7.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.6.3
3
+ Version: 0.7.2
4
4
  Summary: Evaluation Framework
5
5
  Author: Aleph Alpha Research
6
6
  License: Apache License
@@ -215,7 +215,6 @@ Requires-Dist: pyyaml>=6.0.3,<7
215
215
  Requires-Dist: xmltodict>=1.0.4,<1.1
216
216
  Requires-Dist: pydantic>=2.13.4,<3
217
217
  Requires-Dist: datasets>=5.0.0,<6
218
- Requires-Dist: sacrebleu>=2.6.0,<3
219
218
  Requires-Dist: pycountry>=26.2.16,<27
220
219
  Requires-Dist: nltk>=3.10.0,<4
221
220
  Requires-Dist: python-dotenv>=1.2.2,<2
@@ -231,7 +230,7 @@ Requires-Dist: llm-sandbox[docker]==0.3.39
231
230
  Requires-Dist: jsonlines>=4,<5
232
231
  Requires-Dist: lxml>=6.1.1,<7
233
232
  Requires-Dist: python-iso639>=2026.4.20
234
- Requires-Dist: wandb>=0.28.0,<1
233
+ Requires-Dist: wandb>=0.28.1,<1
235
234
  Requires-Dist: boto3>=1.43.19,<2
236
235
  Requires-Dist: numpy>=2.2.6
237
236
  Requires-Dist: antlr4-python3-runtime==4.11.0
@@ -241,10 +240,10 @@ Requires-Dist: eval-framework[determined,api,openai,transformers,accelerate,vllm
241
240
  Requires-Dist: aleph-alpha-client>=11.5.1 ; extra == 'api'
242
241
  Requires-Dist: determined>=0.38.1,<0.39 ; extra == 'determined'
243
242
  Requires-Dist: tensorboard==2.21.0 ; extra == 'determined'
244
- Requires-Dist: mistral-common>=1.11.5,<2 ; extra == 'mistral'
243
+ Requires-Dist: mistral-common>=1.11.6,<2 ; extra == 'mistral'
245
244
  Requires-Dist: huggingface-hub>=0.36.2,<0.37 ; extra == 'mistral'
246
245
  Requires-Dist: eval-framework[vllm] ; extra == 'mistral'
247
- Requires-Dist: openai>=1.109.1,<3 ; extra == 'openai'
246
+ Requires-Dist: openai>=2.46.0,<3 ; extra == 'openai'
248
247
  Requires-Dist: tiktoken>=0.13.0,<1 ; extra == 'openai'
249
248
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'openai'
250
249
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'optional'
@@ -523,8 +522,10 @@ If you use `eval-framework` in your research, please cite:
523
522
 
524
523
  ```bibtex
525
524
  @software{eval_framework,
525
+ author={Aleph Alpha Research},
526
526
  title={Aleph Alpha Eval Framework},
527
- year={2025},
527
+ year={2026},
528
+ version = {x.y.z},
528
529
  url={https://github.com/Aleph-Alpha-Research/eval-framework}
529
530
  }
530
531
  ```
@@ -254,8 +254,10 @@ If you use `eval-framework` in your research, please cite:
254
254
 
255
255
  ```bibtex
256
256
  @software{eval_framework,
257
+ author={Aleph Alpha Research},
257
258
  title={Aleph Alpha Eval Framework},
258
- year={2025},
259
+ year={2026},
260
+ version = {x.y.z},
259
261
  url={https://github.com/Aleph-Alpha-Research/eval-framework}
260
262
  }
261
263
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.6.3"
3
+ version = "0.7.2"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -22,7 +22,6 @@ dependencies = [
22
22
  "xmltodict>=1.0.4,<1.1",
23
23
  "pydantic>=2.13.4,<3",
24
24
  "datasets>=5.0.0,<6",
25
- "sacrebleu>=2.6.0,<3",
26
25
  "pycountry>=26.2.16,<27",
27
26
  "nltk>=3.10.0,<4",
28
27
  "python-dotenv>=1.2.2,<2",
@@ -38,7 +37,7 @@ dependencies = [
38
37
  "jsonlines>=4,<5",
39
38
  "lxml>=6.1.1,<7",
40
39
  "python-iso639>=2026.4.20",
41
- "wandb>=0.28.0,<1",
40
+ "wandb>=0.28.1,<1",
42
41
  "boto3>=1.43.19,<2",
43
42
  "numpy>=2.2.6",
44
43
  # is a dependency of sympy, but not explicitly listed in the requirements.txt
@@ -55,7 +54,7 @@ determined = [
55
54
  ]
56
55
  api = ["aleph-alpha-client>=11.5.1"]
57
56
  openai = [
58
- "openai>=1.109.1,<3",
57
+ "openai>=2.46.0,<3",
59
58
  "tiktoken>=0.13.0,<1",
60
59
  "transformers>=4.45.2,<5",
61
60
  ]
@@ -70,7 +69,7 @@ vllm = [
70
69
  "torch>=2.5,<3"
71
70
  ]
72
71
  mistral = [
73
- "mistral-common>=1.11.5,<2",
72
+ "mistral-common>=1.11.6,<2",
74
73
  "huggingface-hub>=0.36.2,<0.37",
75
74
  "eval_framework[vllm]",
76
75
  ]
@@ -91,16 +90,16 @@ eval_framework = "eval_framework.run:run"
91
90
 
92
91
  [dependency-groups]
93
92
  dev = [
94
- "mypy>=2.2.0,<3",
93
+ "mypy>=2.3.0,<3",
95
94
  "pytest>=9.1.1,<10",
96
95
  "pytest-mock>=3.15.1",
97
96
  "pytest-xdist>=3.8.0,<4",
98
97
  "pytest-sugar>1.1,<2",
99
98
  "types-pyyaml>=6.0.12.20260518,<7",
100
- "types-python-dateutil>=2.9.0.20260518,<3",
101
- "types-requests>=2.33.0.20260518,<3",
99
+ "types-python-dateutil>=2.9.0.20260716,<3",
100
+ "types-requests>=2.33.0.20260712,<3",
102
101
  "plotly>=6.8.0,<7",
103
- "ruff>=0.15.20",
102
+ "ruff>=0.15.22",
104
103
  "pip-licenses>=5.5.5",
105
104
  ]
106
105
  flash-attn = [
@@ -109,7 +108,7 @@ flash-attn = [
109
108
  ]
110
109
 
111
110
  [build-system]
112
- requires = ["uv_build>=0.11.28,<0.11.29"]
111
+ requires = ["uv_build>=0.11.29,<0.11.30"]
113
112
  build-backend = "uv_build"
114
113
 
115
114
  [tool.uv.build-backend]
@@ -30,6 +30,7 @@ class TaskArgs(BaseModel):
30
30
  judge_model_args: dict[str, Any] = {}
31
31
  task_subjects: list[str] | None = None
32
32
  hf_revision: str | None = None
33
+ user_prompt_suffix: str | None = None
33
34
  perturbation_config: PerturbationConfig | None = None
34
35
  repeats: int | None = None
35
36
 
@@ -108,6 +109,7 @@ class DeterminedContext(EvalContext):
108
109
  "task_subjects",
109
110
  "batch_size",
110
111
  "hf_revision",
112
+ "user_prompt_suffix",
111
113
  "judge_model_name",
112
114
  "judge_model_args",
113
115
  "perturbation_config",
@@ -121,6 +123,9 @@ class DeterminedContext(EvalContext):
121
123
  # Hyperparameters take precedence over core context
122
124
  llm_name = self.hparams.llm_name or self.llm_name
123
125
  judge_model_name = self.hparams.task_args.judge_model_name or self.judge_model_name
126
+ user_prompt_suffix = self.hparams.task_args.user_prompt_suffix
127
+ if user_prompt_suffix is None:
128
+ user_prompt_suffix = self.user_prompt_suffix
124
129
 
125
130
  llm_class = _load_model(llm_name, models_path=self.models_path)
126
131
  llm_judge_class: type[BaseLLM] | None = (
@@ -139,6 +144,7 @@ class DeterminedContext(EvalContext):
139
144
  task_name=self.hparams.task_args.task_name,
140
145
  task_subjects=self.hparams.task_args.task_subjects,
141
146
  hf_revision=self.hparams.task_args.hf_revision or self.hf_revision,
147
+ user_prompt_suffix=user_prompt_suffix,
142
148
  perturbation_config=self.hparams.task_args.perturbation_config or self.perturbation_config,
143
149
  output_dir=self.hparams.output_dir,
144
150
  llm_judge_class=llm_judge_class,
@@ -57,6 +57,7 @@ class EvalContext(AbstractContextManager):
57
57
  task_name: str | None = None,
58
58
  task_subjects: list[str] | None = None,
59
59
  hf_revision: str | None = None,
60
+ user_prompt_suffix: str | None = None,
60
61
  output_dir: Path | None = None,
61
62
  wandb_project: str | None = None,
62
63
  wandb_entity: str | None = None,
@@ -86,6 +87,7 @@ class EvalContext(AbstractContextManager):
86
87
  self.task_name = task_name
87
88
  self.task_subjects = task_subjects
88
89
  self.hf_revision = hf_revision
90
+ self.user_prompt_suffix = user_prompt_suffix
89
91
  self.output_dir = output_dir
90
92
  self.wandb_project = wandb_project
91
93
  self.wandb_entity = wandb_entity
@@ -52,6 +52,7 @@ class LocalContext(EvalContext):
52
52
  task_name=self.task_name,
53
53
  task_subjects=self.task_subjects,
54
54
  hf_revision=self.hf_revision,
55
+ user_prompt_suffix=self.user_prompt_suffix,
55
56
  output_dir=self.output_dir,
56
57
  hf_upload_dir=self.hf_upload_dir,
57
58
  hf_upload_repo=self.hf_upload_repo,
@@ -41,6 +41,9 @@ class LanguageConsistencyChecker(BaseMetric[Completion]):
41
41
  if response.error is not None:
42
42
  return [MetricResult(metric_name=self.NAME, value=None, higher_is_better=True, error=response.error)]
43
43
 
44
+ if not response.completion:
45
+ return [] # No completion means no language to detect, so it is excluded from aggregation
46
+
44
47
  completion_language = response.get_completion_language()
45
48
  target_language = response.get_instruction_language()
46
49
  if completion_language == target_language == "":
@@ -57,6 +60,9 @@ class LanguageRawConsistencyChecker(BaseMetric[Completion]):
57
60
  if response.error is not None:
58
61
  return [MetricResult(metric_name=self.NAME, value=None, higher_is_better=True, error=response.error)]
59
62
 
63
+ if not response.raw_completion:
64
+ return [] # No completion means no language to detect, so it is excluded from aggregation
65
+
60
66
  raw_completion_language = response.get_raw_completion_language()
61
67
  target_language = response.get_instruction_language()
62
68
 
@@ -66,10 +66,14 @@ class ResponseGenerator:
66
66
  config.num_fewshot,
67
67
  config.task_subjects,
68
68
  config.hf_revision,
69
+ user_prompt_suffix=config.user_prompt_suffix,
69
70
  )
70
71
  else:
71
72
  self.task = registry()[config.task_name].create(
72
- config.num_fewshot, config.task_subjects, config.hf_revision
73
+ config.num_fewshot,
74
+ config.task_subjects,
75
+ config.hf_revision,
76
+ user_prompt_suffix=config.user_prompt_suffix,
73
77
  )
74
78
 
75
79
  self.response_type = self.task.get_response_type()
@@ -345,9 +349,10 @@ class ResponseGenerator:
345
349
  "llm_args",
346
350
  "perturbation_config",
347
351
  "repeats",
352
+ "user_prompt_suffix",
348
353
  ]
349
354
  for key in keys:
350
- if loaded_metadata[key] != current_metadata[key]:
355
+ if loaded_metadata.get(key) != current_metadata[key]:
351
356
  raise ValueError(f"Existing metadata does not match current metadata for {key}.")
352
357
 
353
358
  def __del__(self) -> None:
@@ -150,6 +150,13 @@ def parse_args() -> argparse.Namespace:
150
150
  default=None,
151
151
  help="A tag name, a branch name, or commit hash for the task HF dataset.",
152
152
  )
153
+ parser.add_argument(
154
+ "--user-prompt-suffix",
155
+ type=str,
156
+ required=False,
157
+ default=None,
158
+ help="Text appended verbatim to the evaluated user prompt before formatting.",
159
+ )
153
160
  parser.add_argument(
154
161
  "--judge-models",
155
162
  type=Path,
@@ -343,6 +350,7 @@ def _run_single_task(kwargs: dict) -> None:
343
350
  task_name=kwargs["task_name"],
344
351
  task_subjects=kwargs["task_subjects"],
345
352
  hf_revision=kwargs["hf_revision"],
353
+ user_prompt_suffix=kwargs.get("user_prompt_suffix"),
346
354
  output_dir=kwargs["output_dir"],
347
355
  wandb_project=kwargs["wandb_project"],
348
356
  wandb_entity=kwargs["wandb_entity"],
@@ -34,6 +34,7 @@ _EVAL_CONFIG_FIELDS = {
34
34
  "batch_size",
35
35
  "task_subjects",
36
36
  "hf_revision",
37
+ "user_prompt_suffix",
37
38
  }
38
39
 
39
40
  _HYPERPARAM_FIELDS = _LLM_ARG_FIELDS | _EVAL_CONFIG_FIELDS
@@ -100,6 +101,7 @@ class TaskSuite(BaseModel):
100
101
  batch_size: int | None = None
101
102
  task_subjects: list[str] | None = None
102
103
  hf_revision: str | None = None
104
+ user_prompt_suffix: str | None = None
103
105
 
104
106
  @model_validator(mode="after")
105
107
  def validate_suite(self) -> Self:
@@ -0,0 +1,6 @@
1
+ # Register all tasks on import
2
+ from .task_names import register_all_tasks
3
+
4
+ register_all_tasks()
5
+
6
+ del register_all_tasks
@@ -10,12 +10,10 @@ from typing import TYPE_CHECKING, Any, Self, TypeVar
10
10
 
11
11
  import iso639
12
12
  from datasets import DatasetDict, DownloadConfig, load_dataset
13
- from huggingface_hub import HfApi
14
- from huggingface_hub.errors import RevisionNotFoundError
15
13
  from pydantic import BaseModel, ConfigDict
16
14
 
17
15
  from eval_framework.shared.types import BaseMetricContext, Completion, Error, RawCompletion
18
- from eval_framework.tasks.dataset_revisions import DatasetRevision
16
+ from eval_framework.tasks.dataset_revisions import pinned_revision
19
17
  from eval_framework.tasks.utils import classproperty, raise_errors
20
18
  from template_formatting.formatter import Message, Role
21
19
 
@@ -93,7 +91,6 @@ class BaseTask[SubjectType](ABC):
93
91
  SAMPLE_SPLIT: str
94
92
  FEWSHOT_SPLIT: str
95
93
  SUBJECTS: list[SubjectType]
96
- HF_REVISION: str | None = None # tag name, or branch name, or commit hash to ensure reproducibility
97
94
 
98
95
  # The lock file this task resolves its pinned dataset revision from, keyed by ``DATASET_PATH``.
99
96
  # Each task sets this explicitly: point it at a lock file (e.g. ``HF_REVISIONS_LOCKFILE`` or a
@@ -115,23 +112,35 @@ class BaseTask[SubjectType](ABC):
115
112
 
116
113
  def __init__(self, num_fewshot: int = 0) -> None:
117
114
  self.num_fewshot = num_fewshot
115
+ self.user_prompt_suffix: str | None = None
118
116
  self.stop_sequences: list[str] | None = None
119
117
  self.max_tokens: int | None = None
120
- self._apply_hf_revision()
118
+ self.hf_revision: str | None = self._apply_hf_revision()
121
119
 
122
- def _apply_hf_revision(self, custom_hf_revision: str | None = None) -> None:
123
- # Precedence: CLI/config override > class HF_REVISION > task-dataset-revisions.json pin.
124
- # Applied once at instance creation; not refreshed if the pin file changes mid-run.
120
+ def _apply_hf_revision(self, custom_hf_revision: str | None = None) -> str | None:
121
+ # Precedence: CLI/config override > REVISION_LOCKFILE pin.
122
+ # Tasks without a Hugging Face dataset set REVISION_LOCKFILE to None and are not pinned.
125
123
  if custom_hf_revision:
126
- self.HF_REVISION = custom_hf_revision
127
- elif self.HF_REVISION is None and (pinned := DatasetRevision.pinned_revision(self.__class__.__name__)):
128
- self.HF_REVISION = pinned
124
+ hf_revision = custom_hf_revision
125
+ elif self.REVISION_LOCKFILE is not None:
126
+ hf_revision = pinned_revision(self.REVISION_LOCKFILE, self.DATASET_PATH)
127
+ else:
128
+ hf_revision = None
129
+ return hf_revision
129
130
 
130
131
  @classmethod
131
132
  def with_overwrite(
132
- cls, num_fewshot: int, *, custom_subjects: list[str] | None, custom_hf_revision: str | None
133
+ cls,
134
+ num_fewshot: int,
135
+ *,
136
+ custom_subjects: list[str] | None,
137
+ custom_hf_revision: str | None,
138
+ user_prompt_suffix: str | None = None,
133
139
  ) -> Self:
134
140
  instance = cls(num_fewshot=num_fewshot)
141
+ if user_prompt_suffix is not None and instance.get_response_type() != ResponseType.COMPLETION:
142
+ raise ValueError("user_prompt_suffix is only supported for completion tasks.")
143
+ instance.user_prompt_suffix = user_prompt_suffix
135
144
 
136
145
  # If custom subjects were provided during initialization, they take precedence over the class-level SUBJECTS.
137
146
  filtered_subjects = instance._filter_task_subjects(custom_subjects=custom_subjects)
@@ -139,7 +148,7 @@ class BaseTask[SubjectType](ABC):
139
148
  logger.info(f"Setting SUBJECTS to `{filtered_subjects}` for the task {instance.__class__.__name__}")
140
149
  instance.SUBJECTS = filtered_subjects # type: ignore[assignment]
141
150
 
142
- instance._apply_hf_revision(custom_hf_revision)
151
+ instance.hf_revision = instance._apply_hf_revision(custom_hf_revision)
143
152
 
144
153
  return instance
145
154
 
@@ -178,29 +187,14 @@ class BaseTask[SubjectType](ABC):
178
187
  return custom_subjects # type: ignore[return-value]
179
188
 
180
189
  def _load_hf_dataset(self, **kwargs: Any) -> Any:
181
- # Check if the HF_REVISION is valid before loading the dataset
182
- if self.HF_REVISION:
183
- try:
184
- _ = HfApi().dataset_info(repo_id=kwargs["path"], revision=self.HF_REVISION, timeout=100.0)
185
- except Exception as e:
186
- if isinstance(e, RevisionNotFoundError):
187
- raise e
188
-
189
190
  cache_dir: str = os.environ.get("HF_DATASET_CACHE_DIR", f"{Path.home()}/.cache/huggingface/datasets")
190
191
  download_config = DownloadConfig(cache_dir=cache_dir, max_retries=5)
191
- try:
192
- return load_dataset(
193
- **kwargs,
194
- revision=self.HF_REVISION,
195
- cache_dir=cache_dir,
196
- download_config=download_config,
197
- )
198
- except Exception:
199
- return load_dataset(
200
- **kwargs,
201
- revision=self.HF_REVISION,
202
- cache_dir=f"{Path.home()}/.cache/eval-framework",
203
- )
192
+ return load_dataset(
193
+ **kwargs,
194
+ revision=self.hf_revision,
195
+ cache_dir=cache_dir,
196
+ download_config=download_config,
197
+ )
204
198
 
205
199
  def _shuffle_splits(self, hf_dataset: DatasetDict) -> dict[str, Any]:
206
200
  dataset = {}
@@ -241,7 +235,7 @@ class BaseTask[SubjectType](ABC):
241
235
 
242
236
  def _get_messages(self, item: dict[str, Any]) -> list[Message]:
243
237
  example_messages = self._get_example_messages(item)
244
- instruction_message = self._get_instruction_messages(item)
238
+ instruction_message = self._apply_user_prompt_suffix(self._get_instruction_messages(item))
245
239
  cue_text = self._get_cue_text(item)
246
240
  cue_message = [Message(role=Role.ASSISTANT, content=cue_text)] if cue_text else []
247
241
  messages = example_messages + instruction_message + cue_message
@@ -254,6 +248,18 @@ class BaseTask[SubjectType](ABC):
254
248
  return [Message(role=Role.SYSTEM, content=system_prompt_text)] + messages
255
249
  return messages
256
250
 
251
+ def _apply_user_prompt_suffix(self, instruction_messages: list[Message]) -> list[Message]:
252
+ """Append the configured suffix verbatim to the evaluated user turn."""
253
+ if self.user_prompt_suffix is None:
254
+ return instruction_messages
255
+
256
+ for message in reversed(instruction_messages):
257
+ if message.role == Role.USER:
258
+ message.content = f"{message.content}{self.user_prompt_suffix}"
259
+ return instruction_messages
260
+
261
+ raise ValueError("Cannot append user_prompt_suffix: evaluated instruction contains no user message.")
262
+
257
263
  def _get_instruction_messages(self, item: dict[str, Any]) -> list[Message]:
258
264
  return [Message(role=Role.USER, content=self._get_instruction_text(item))]
259
265
 
@@ -17,6 +17,8 @@ class COPAEvalHarness(BaseTask[str]):
17
17
  This version uses samples from the validation split as evaluation examples (same as lm-eval-harness).
18
18
  """
19
19
 
20
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
21
+
20
22
  NAME = "COPAEvalHarness"
21
23
  DATASET_PATH = "aps/super_glue"
22
24
  SAMPLE_SPLIT = "validation" # 100 examples (same split as lm-eval)
@@ -88,6 +90,7 @@ class COPA(COPAEvalHarness):
88
90
 
89
91
 
90
92
  class COPA_IDKEvalHarness(COPAEvalHarness):
93
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
91
94
  NAME = "COPA_IDKEvalHarness"
92
95
  METRICS = [
93
96
  AccuracyLoglikelihood,
@@ -13,6 +13,8 @@ from eval_framework.tasks.utils import get_n_letters
13
13
  class CommonsenseQACloze(BaseTask[str]):
14
14
  """CommonsenseQA dataset: https://huggingface.co/datasets/tau/commonsense_qa"""
15
15
 
16
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
17
+
16
18
  NAME = "CommonsenseQACloze"
17
19
  DATASET_PATH = "tau/commonsense_qa"
18
20
  SAMPLE_SPLIT = "validation"
@@ -53,6 +55,8 @@ class CommonsenseQAFullTextCloze(CommonsenseQACloze):
53
55
  Scores loglikelihood over the full correct choice text; includes bits-per-byte.
54
56
  """
55
57
 
58
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
59
+
56
60
  NAME = "CommonsenseQAFullTextCloze"
57
61
  METRICS = [AccuracyLoglikelihood, AccuracyNormLoglikelihood, BitsPerByteLoglikelihood]
58
62
 
@@ -65,6 +69,8 @@ class CommonsenseQAFullTextCloze(CommonsenseQACloze):
65
69
  class CommonsenseQAMC(CommonsenseQACloze):
66
70
  """Multiple-choice variant of CommonsenseQA where the model selects a letter (A-E)."""
67
71
 
72
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
73
+
68
74
  NAME = "CommonsenseQAMC"
69
75
 
70
76
  def _get_instruction_text(self, item: dict[str, Any]) -> str:
@@ -75,6 +75,8 @@ class DropCompletion(BaseTask[str]):
75
75
  Uses DROP F1 and exact match. Stop at new paragraph or repeated prefixes.
76
76
  """
77
77
 
78
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
79
+
78
80
  NAME = "DropCompletion"
79
81
  DATASET_PATH = "EleutherAI/drop"
80
82
  SAMPLE_SPLIT = "validation"
@@ -163,6 +165,8 @@ class DropCompletion_OLMES(DropCompletion):
163
165
  class DropMC(BaseTask[str]):
164
166
  """Multiple-choice variant using allenai/drop-gen2mc (passage_original, question_original, choices, answerKey)."""
165
167
 
168
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
169
+
166
170
  NAME = "DropMC"
167
171
  DATASET_PATH = "allenai/drop-gen2mc"
168
172
  SAMPLE_SPLIT = "validation"
@@ -233,6 +237,8 @@ class DropCloze(BaseTask[str]):
233
237
  Includes BitsPerByte on the correct choice.
234
238
  """
235
239
 
240
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
241
+
236
242
  NAME = "DropCloze"
237
243
  DATASET_PATH = "allenai/drop-gen2mc"
238
244
  SAMPLE_SPLIT = "validation"
@@ -22,6 +22,8 @@ logger = logging.getLogger(__name__)
22
22
  class GPQA(BaseTask[str]):
23
23
  """GPQA dataset: https://huggingface.co/datasets/Idavidrein/gpqa"""
24
24
 
25
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
26
+
25
27
  NAME = "GPQA"
26
28
  DATASET_PATH = "Idavidrein/gpqa"
27
29
  SAMPLE_SPLIT = "train"
@@ -172,6 +174,7 @@ class GPQA_IDK(GPQA):
172
174
 
173
175
 
174
176
  class GPQA_COT(GPQA):
177
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
175
178
  NAME = "GPQA_COT"
176
179
  RESPONSE_TYPE = ResponseType.COMPLETION
177
180
  METRICS = [AccuracyCompletion]
@@ -28,6 +28,8 @@ class HumanEvalMetricContext(BaseMetricContext):
28
28
  class HumanEval(BaseTask[str]):
29
29
  """HumanEval dataset: https://huggingface.co/datasets/openai/openai_humaneval/"""
30
30
 
31
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
32
+
31
33
  NAME = "Human Eval"
32
34
  DATASET_PATH = "openai/openai_humaneval"
33
35
  SAMPLE_SPLIT = "test"
@@ -128,6 +130,7 @@ class HumanEval_OLMES(HumanEval):
128
130
 
129
131
  class HumanEvalInstruct(HumanEval):
130
132
  # See https://github.com/EleutherAI/lm-evaluation-harness/blob/main/lm_eval/tasks/humaneval/humaneval_instruct.yaml
133
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
131
134
  NAME = "Human Eval Instruct"
132
135
  CUE_PREFIX = "Here is the completed function:\n```python\n"
133
136
 
@@ -482,6 +482,8 @@ class MATH500(MATHReasoning):
482
482
  class MATH(MATHReasoning):
483
483
  """MATH dataset: https://huggingface.co/datasets/EleutherAI/hendrycks_math"""
484
484
 
485
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
486
+
485
487
  NAME = "Math"
486
488
  DATASET_PATH = "EleutherAI/hendrycks_math"
487
489
  SAMPLE_SPLIT = "test"
@@ -559,6 +561,8 @@ class MATHMinervaEvalHarness(MATHReasoning):
559
561
  Metrics: Exact Match, Exact Match (Flex) via MathMinervaCompletion.
560
562
  """
561
563
 
564
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
565
+
562
566
  NAME = "MATHMinervaEvalHarness"
563
567
  DATASET_PATH = "EleutherAI/hendrycks_math"
564
568
  SAMPLE_SPLIT = "test"
@@ -595,6 +599,8 @@ class MATHMinerva(MATHMinervaEvalHarness):
595
599
  "(The )Final Answer: The (final )answer is ...( I hope it is correct.)", where parentheses are optional.
596
600
  """
597
601
 
602
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
603
+
598
604
  NAME = "MATHMinerva"
599
605
  METRICS = [MathMinervaCompletionRelaxed]
600
606
 
@@ -610,6 +616,8 @@ class MATH500Minerva(MATHMinerva):
610
616
  Uses HuggingFaceH4/MATH-500 which has a single 'default' config (no subject splits).
611
617
  """
612
618
 
619
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
620
+
613
621
  NAME = "MATH500Minerva"
614
622
  DATASET_PATH = "HuggingFaceH4/MATH-500"
615
623
  SAMPLE_SPLIT = "test"
@@ -622,6 +630,7 @@ class MATH500Minerva(MATHMinerva):
622
630
 
623
631
 
624
632
  class MATHLvl5(MATH):
633
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
625
634
  NAME = "Math Lvl 5"
626
635
 
627
636
  def _load_dataset(self, subject: SubjectType) -> None:
@@ -33,6 +33,7 @@ class MBPP(BaseTask[str]):
33
33
 
34
34
  NAME = "MBPP"
35
35
  DATASET_PATH = "google-research-datasets/mbpp"
36
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
36
37
  SAMPLE_SPLIT = "test"
37
38
  FEWSHOT_SPLIT = "train"
38
39
  RESPONSE_TYPE = ResponseType.COMPLETION
@@ -17,6 +17,8 @@ from eval_framework.tasks.utils import get_n_letters
17
17
  class MedQACloze(BaseTask[str]):
18
18
  """MedQA cloze (loglikelihood over choice text)."""
19
19
 
20
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
21
+
20
22
  NAME = "MedQACloze"
21
23
  DATASET_PATH = "davidheineman/medqa-en"
22
24
  SAMPLE_SPLIT = "test"
@@ -53,6 +55,8 @@ class MedQACloze(BaseTask[str]):
53
55
  class MedQAMC(MedQACloze):
54
56
  """MedQA multiple choice (loglikelihood over A/B/C/D/...)."""
55
57
 
58
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
59
+
56
60
  NAME = "MedQAMC"
57
61
 
58
62
  def __init__(self, num_fewshot: int = 0) -> None:
@@ -82,11 +82,13 @@ class _NaturalQsOpenChoice_Base(BaseTask[str]):
82
82
 
83
83
 
84
84
  class NaturalQsOpenCloze(_NaturalQsOpenChoice_Base):
85
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
85
86
  NAME = "NaturalQsOpenCloze"
86
87
  TASK_STYLER = ClozeStyle()
87
88
 
88
89
 
89
90
  class NaturalQsOpenMC(_NaturalQsOpenChoice_Base):
91
+ REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
90
92
  NAME = "NaturalQsOpenMC"
91
93
  TASK_STYLER = MCStyle()
92
94
 
@@ -9,18 +9,17 @@ from eval_framework.metrics.loglikelihood.confidence_weighted_accuracy import Co
9
9
  from eval_framework.metrics.loglikelihood.dcs import DistributionalCorrectnessScore
10
10
  from eval_framework.metrics.loglikelihood.ternary import TernaryScore
11
11
  from eval_framework.tasks.base import NO_SUBJECT, BaseTask, Language, ResponseType
12
- from eval_framework.tasks.dataset_revisions import HF_REVISIONS_LOCKFILE
12
+ from eval_framework.tasks.dataset_revisions import FROZEN_HF_REVISIONS_LOCKFILE
13
13
  from eval_framework.tasks.utils import get_n_letters
14
14
 
15
15
 
16
16
  class PIQA(BaseTask[str]):
17
17
  """PIQA dataset: https://huggingface.co/datasets/ybisk/piqa"""
18
18
 
19
- REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
19
+ REVISION_LOCKFILE = FROZEN_HF_REVISIONS_LOCKFILE
20
20
 
21
21
  NAME = "PIQA"
22
22
  DATASET_PATH = "ybisk/piqa"
23
- HF_REVISION = "6b3aceb3276e5ab7e51895d73151a718690af38c"
24
23
  SAMPLE_SPLIT = "validation" # 1838 examples (same split as lm-eval)
25
24
  FEWSHOT_SPLIT = "test" # 3084 examples
26
25
  RESPONSE_TYPE = ResponseType.LOGLIKELIHOODS
@@ -54,7 +53,7 @@ class PIQA_OLMES(PIQA):
54
53
  loglikelihood over " A"/" B".
55
54
  """
56
55
 
57
- REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
56
+ REVISION_LOCKFILE = FROZEN_HF_REVISIONS_LOCKFILE
58
57
 
59
58
  NAME = "PIQA_OLMES"
60
59
  SAMPLE_SPLIT = "train" # Use train split (largest) to best match OLMES, which evaluates all splits
@@ -79,7 +78,7 @@ class PIQA_OLMES(PIQA):
79
78
 
80
79
 
81
80
  class PIQA_IDK(PIQA):
82
- REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
81
+ REVISION_LOCKFILE = FROZEN_HF_REVISIONS_LOCKFILE
83
82
  NAME = "PIQA_IDK"
84
83
  METRICS = [
85
84
  AccuracyLoglikelihood,