eval-framework 0.8.4__tar.gz → 0.8.7__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 (158) hide show
  1. {eval_framework-0.8.4 → eval_framework-0.8.7}/PKG-INFO +3 -3
  2. {eval_framework-0.8.4 → eval_framework-0.8.7}/pyproject.toml +3 -3
  3. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/evaluation_generator.py +1 -2
  4. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/eval_config.py +12 -7
  5. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/registry.py +14 -11
  6. eval_framework-0.8.4/src/eval_framework/utils/generate_task_docs.py +0 -153
  7. {eval_framework-0.8.4 → eval_framework-0.8.7}/LICENSE +0 -0
  8. {eval_framework-0.8.4 → eval_framework-0.8.7}/README.md +0 -0
  9. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/__init__.py +0 -0
  10. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/base_config.py +0 -0
  11. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/context/__init__.py +0 -0
  12. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/context/determined.py +0 -0
  13. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/context/eval.py +0 -0
  14. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/context/local.py +0 -0
  15. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/exceptions.py +0 -0
  16. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/drop_process_results.py +0 -0
  17. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/ifeval_impl/README.md +0 -0
  18. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
  19. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
  20. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
  21. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
  22. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/__init__.py +0 -0
  23. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/aleph_alpha.py +0 -0
  24. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/base.py +0 -0
  25. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/huggingface.py +0 -0
  26. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/models.py +0 -0
  27. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/llm/openai.py +0 -0
  28. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/logger.py +0 -0
  29. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/main.py +0 -0
  30. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/__init__.py +0 -0
  31. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
  32. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
  33. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/base.py +0 -0
  34. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/__init__.py +0 -0
  35. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
  36. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
  37. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
  38. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
  39. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/csv_format.py +0 -0
  40. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
  41. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
  42. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/f1.py +0 -0
  43. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/format_checker.py +0 -0
  44. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
  45. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/ifeval.py +0 -0
  46. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/json_format.py +0 -0
  47. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/language_checker.py +0 -0
  48. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/length_control.py +0 -0
  49. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
  50. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
  51. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
  52. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
  53. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
  54. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/repetition.py +0 -0
  55. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
  56. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
  57. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
  58. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
  59. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/completion/text_counter.py +0 -0
  60. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
  61. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
  62. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/__init__.py +0 -0
  63. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/base.py +0 -0
  64. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
  65. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
  66. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
  67. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
  68. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
  69. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
  70. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
  71. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/language.py +0 -0
  72. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
  73. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/models.py +0 -0
  74. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
  75. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
  76. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
  77. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
  78. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
  79. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
  80. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
  81. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
  82. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
  83. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
  84. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
  85. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
  86. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
  87. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
  88. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
  89. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/llm/utils.py +0 -0
  90. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
  91. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
  92. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
  93. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
  94. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
  95. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
  96. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
  97. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
  98. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/py.typed +0 -0
  99. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/response_generator.py +0 -0
  100. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/result_processors/__init__.py +0 -0
  101. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/result_processors/base.py +0 -0
  102. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/result_processors/hf_uploader.py +0 -0
  103. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/result_processors/result_processor.py +0 -0
  104. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
  105. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/run.py +0 -0
  106. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/run_direct.py +0 -0
  107. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/shared/types.py +0 -0
  108. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/suite.py +0 -0
  109. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
  110. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/__init__.py +0 -0
  111. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/base.py +0 -0
  112. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
  113. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
  114. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/arc_de.py +0 -0
  115. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
  116. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/copa.py +0 -0
  117. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/csqa.py +0 -0
  118. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
  119. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
  120. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/goldenswag.py +0 -0
  121. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
  122. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
  123. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/hellaswag.py +0 -0
  124. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/humaneval.py +0 -0
  125. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
  126. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
  127. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
  128. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/medqa.py +0 -0
  129. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/mmlu.py +0 -0
  130. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
  131. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
  132. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
  133. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/piqa.py +0 -0
  134. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/sciq.py +0 -0
  135. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -0
  136. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
  137. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/triviaqa.py +0 -0
  138. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/benchmarks/winogrande.py +0 -0
  139. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/dataset_revisions.py +0 -0
  140. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
  141. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -0
  142. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/markdown_doc.py +0 -0
  143. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/perturbation.py +0 -0
  144. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/task_loader.py +0 -0
  145. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/task_names.py +0 -0
  146. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/task_style.py +0 -0
  147. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/tasks/utils.py +0 -0
  148. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/constants.py +0 -0
  149. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/file_ops.py +0 -0
  150. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/helpers.py +0 -0
  151. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/logging.py +0 -0
  152. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/packaging.py +0 -0
  153. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/eval_framework/utils/tqdm_handler.py +0 -0
  154. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/template_formatting/README.md +0 -0
  155. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/template_formatting/__init__.py +0 -0
  156. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/template_formatting/formatter.py +0 -0
  157. {eval_framework-0.8.4 → eval_framework-0.8.7}/src/template_formatting/mistral_formatter.py +0 -0
  158. {eval_framework-0.8.4 → eval_framework-0.8.7}/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.8.4
3
+ Version: 0.8.7
4
4
  Summary: Evaluation Framework
5
5
  Author: Aleph Alpha Research
6
6
  License: Apache License
@@ -214,7 +214,7 @@ Classifier: Typing :: Typed
214
214
  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
- Requires-Dist: datasets>=5.0.0,<6
217
+ Requires-Dist: datasets>=5.0.1,<6
218
218
  Requires-Dist: pycountry>=26.2.16,<27
219
219
  Requires-Dist: nltk>=3.10.0,<4
220
220
  Requires-Dist: python-dotenv>=1.2.2,<2
@@ -240,7 +240,7 @@ Requires-Dist: eval-framework[determined,api,openai,transformers,accelerate,opti
240
240
  Requires-Dist: aleph-alpha-client>=11.5.1 ; extra == 'api'
241
241
  Requires-Dist: determined>=0.38.1,<0.39 ; extra == 'determined'
242
242
  Requires-Dist: tensorboard==2.21.0 ; extra == 'determined'
243
- Requires-Dist: openai>=2.48.0,<3 ; extra == 'openai'
243
+ Requires-Dist: openai>=2.50.0,<3 ; extra == 'openai'
244
244
  Requires-Dist: tiktoken>=0.13.0,<1 ; extra == 'openai'
245
245
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'openai'
246
246
  Requires-Dist: transformers>=4.45.2,<5 ; extra == 'optional'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "eval-framework"
3
- version = "0.8.4"
3
+ version = "0.8.7"
4
4
  description = "Evaluation Framework"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -21,7 +21,7 @@ dependencies = [
21
21
  "pyyaml>=6.0.3,<7",
22
22
  "xmltodict>=1.0.4,<1.1",
23
23
  "pydantic>=2.13.4,<3",
24
- "datasets>=5.0.0,<6",
24
+ "datasets>=5.0.1,<6",
25
25
  "pycountry>=26.2.16,<27",
26
26
  "nltk>=3.10.0,<4",
27
27
  "python-dotenv>=1.2.2,<2",
@@ -54,7 +54,7 @@ determined = [
54
54
  ]
55
55
  api = ["aleph-alpha-client>=11.5.1"]
56
56
  openai = [
57
- "openai>=2.48.0,<3",
57
+ "openai>=2.50.0,<3",
58
58
  "tiktoken>=0.13.0,<1",
59
59
  "transformers>=4.45.2,<5",
60
60
  ]
@@ -68,8 +68,7 @@ class EvaluationGenerator:
68
68
  metric: BaseMetric
69
69
  if issubclass(metric_class, BaseLLMJudgeMetric):
70
70
  if llm_judge is None:
71
- assert self.config.llm_judge_class is not None, "The llm_judge_class must be defined in the config."
72
- llm_judge = self.config.llm_judge_class(**self.config.judge_model_args)
71
+ llm_judge = self.config.llm_judge()
73
72
  metric = metric_class(
74
73
  llm_judge=llm_judge,
75
74
  randomize_order=self.config.randomize_judge_order,
@@ -3,14 +3,13 @@ import json
3
3
  from pathlib import Path
4
4
  from typing import Annotated, Any
5
5
 
6
- from pydantic import AfterValidator, BeforeValidator, Field, field_serializer, field_validator, model_validator
6
+ from pydantic import BeforeValidator, Field, field_serializer, field_validator, model_validator
7
7
 
8
8
  from eval_framework.base_config import BaseConfig
9
9
  from eval_framework.llm.base import BaseLLM
10
10
  from eval_framework.metrics.llm.base import BaseLLMJudgeMetric
11
- from eval_framework.tasks.base import BaseTask
12
11
  from eval_framework.tasks.perturbation import PerturbationConfig
13
- from eval_framework.tasks.registry import get_task, registry, validate_task_name
12
+ from eval_framework.tasks.registry import registry
14
13
  from eval_framework.utils.constants import ROOT_DIR
15
14
 
16
15
  # Keys that don't impact actual evaluation results and should be excluded from config dumps for hashing purposes.
@@ -44,7 +43,7 @@ class EvalConfig(BaseConfig):
44
43
  num_samples: Annotated[int | None, Field(ge=1)] = 10 # Allows None or int
45
44
  max_tokens: int | None = None
46
45
  perturbation_config: PerturbationConfig | None = None
47
- task_name: Annotated[str, AfterValidator(validate_task_name)]
46
+ task_name: str
48
47
  task_subjects: list[str] | None = None
49
48
  hf_revision: str | None = None
50
49
  user_prompt_suffix: str | None = None
@@ -66,9 +65,9 @@ class EvalConfig(BaseConfig):
66
65
  fail_on_error: Annotated[bool, BeforeValidator(lambda v: False if v is None else v)] = False
67
66
  # Adding a new member? Remember to update KEYS_UNRELATED_TO_RESULTS if it doesn't impact eval results.
68
67
 
69
- @property
70
- def task_class(self) -> type[BaseTask]:
71
- return get_task(self.task_name)
68
+ def llm_judge(self) -> BaseLLM:
69
+ assert self.llm_judge_class is not None, "The llm_judge_class must be defined in the config."
70
+ return self.llm_judge_class(**self.judge_model_args)
72
71
 
73
72
  @field_serializer("output_dir")
74
73
  def serialize_output_dir(self, value: Path) -> str:
@@ -136,6 +135,12 @@ class EvalConfig(BaseConfig):
136
135
  return value.__name__
137
136
  return None
138
137
 
138
+ @field_serializer("judge_model_args")
139
+ def serialize_judge_model_args(self, value: dict[str, Any]) -> dict[str, Any]:
140
+ value.pop("api_key", None)
141
+ value.pop("base_url", None)
142
+ return value
143
+
139
144
  def model_json_dump(self) -> str:
140
145
  model_dump = self.model_dump(mode="json")
141
146
  return json.dumps(model_dump, sort_keys=True)
@@ -2,11 +2,12 @@ import contextlib
2
2
  import importlib
3
3
  import re
4
4
  from abc import ABC, abstractmethod
5
- from collections.abc import Generator, Iterator
5
+ from collections.abc import Generator, Iterator, Sequence
6
6
  from typing import TYPE_CHECKING, Any
7
7
 
8
8
  from eval_framework.tasks.base import BaseTask, ResponseType
9
9
  from eval_framework.tasks.perturbation import PerturbationConfig, create_perturbation_class
10
+ from template_formatting.formatter import BaseFormatter
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from eval_framework.metrics.base import BaseMetric
@@ -55,10 +56,6 @@ class EvalFactory(ABC):
55
56
  def display_name(self) -> str:
56
57
  """Human-readable display name. Is allowed to have special characters and whitespaces."""
57
58
 
58
- @abstractmethod
59
- def dataset_path(self) -> str | None:
60
- """Identifier of the eval's data source (e.g. a HuggingFace repo id), or None if it has none."""
61
-
62
59
  @abstractmethod
63
60
  def create(
64
61
  self,
@@ -78,6 +75,14 @@ class EvalFactory(ABC):
78
75
  user_prompt_suffix: str | None = None,
79
76
  ) -> BaseTask: ...
80
77
 
78
+ def markdown_doc(self, formatters: Sequence[BaseFormatter]) -> str:
79
+ """Render the eval's documentation as markdown."""
80
+ try:
81
+ task = self.create(num_fewshot=1, custom_subjects=None, custom_hf_revision=None)
82
+ except (TypeError, ValueError, AssertionError):
83
+ task = self.create(num_fewshot=0, custom_subjects=None, custom_hf_revision=None)
84
+ return task.markdown_doc(formatters)
85
+
81
86
 
82
87
  class _Lazy(EvalFactory):
83
88
  """
@@ -147,9 +152,6 @@ class _Lazy(EvalFactory):
147
152
  """The eval's human-readable display name (the task's ``NAME``)."""
148
153
  return self.task_class().NAME
149
154
 
150
- def dataset_path(self) -> str | None:
151
- return getattr(self.task_class(), "DATASET_PATH", None)
152
-
153
155
 
154
156
  class _Eager(EvalFactory):
155
157
  """Wraps an already-imported task class."""
@@ -206,9 +208,6 @@ class _Eager(EvalFactory):
206
208
  """The eval's human-readable display name (the task's ``NAME``)."""
207
209
  return self.task_class().NAME
208
210
 
209
- def dataset_path(self) -> str | None:
210
- return getattr(self.task_class(), "DATASET_PATH", None)
211
-
212
211
 
213
212
  class Registry:
214
213
  """A registry for tasks with support for lazy loading.
@@ -226,6 +225,10 @@ class Registry:
226
225
  for name, _ in self._registry.values():
227
226
  yield name
228
227
 
228
+ def task_names(self) -> list[str]:
229
+ """The names of all registered tasks."""
230
+ return list(self)
231
+
229
232
  def items(self) -> Iterator[tuple[str, EvalFactory]]:
230
233
  """Iterate over `(task name, EvalFactory)` pairs in the registry."""
231
234
  yield from self._registry.values()
@@ -1,153 +0,0 @@
1
- import argparse
2
- import os
3
- from pathlib import Path
4
-
5
- import tqdm
6
-
7
- from eval_framework.tasks.registry import registered_task_names, registry
8
- from eval_framework.tasks.task_loader import load_extra_tasks
9
- from template_formatting.formatter import BaseFormatter, ConcatFormatter, Llama3Formatter
10
-
11
- DEFAULT_OUTPUT_DOCS_DIRECTORY = Path("docs/tasks")
12
-
13
- EXCLUDED_TASKS: list[str] = []
14
-
15
- # Base URL for the main repository to ensure links work even in external/companion repos
16
- REPO_URL = "https://github.com/Aleph-Alpha-Research/eval-framework/blob/main"
17
-
18
-
19
- def parse_args(cli_args: list[str] | None = None) -> argparse.Namespace:
20
- """Parse command line arguments for the script."""
21
-
22
- parser = argparse.ArgumentParser()
23
- parser.add_argument(
24
- "--add-prompt-examples",
25
- action="store_true",
26
- default=False,
27
- required=False,
28
- help="Unused. Only there for backwards compatibility",
29
- )
30
- parser.add_argument(
31
- "--exclude-tasks",
32
- nargs="*",
33
- type=str,
34
- default=[],
35
- required=False,
36
- help="List of task names to exclude from documentation generation.",
37
- )
38
- parser.add_argument(
39
- "--extra-task-modules",
40
- nargs="*",
41
- type=str,
42
- default=[],
43
- required=False,
44
- help="List of files and folders containing additional task definitions.",
45
- )
46
- parser.add_argument(
47
- "--formatter",
48
- nargs="*",
49
- type=str,
50
- required=False,
51
- default=["ConcatFormatter", "Llama3Formatter"],
52
- help="Specify which formatter to use for formatting the task samples. "
53
- "If not explicitly specified, default formatters will be used.",
54
- )
55
- parser.add_argument(
56
- "--only-tasks",
57
- nargs="*",
58
- type=str,
59
- default=[],
60
- required=False,
61
- help="List of task names to generate documentation for. If empty, all tasks will be processed.",
62
- )
63
- return parser.parse_args(args=cli_args)
64
-
65
-
66
- def generate_docs_for_task(output_docs_directory: Path, task_name: str, formatters: list[BaseFormatter]) -> None:
67
- """Generate documentation for a specific task."""
68
- task_class = registry()[task_name].task_class()
69
-
70
- try:
71
- task = task_class(num_fewshot=1)
72
- except (TypeError, ValueError, AssertionError):
73
- task = task_class(num_fewshot=0)
74
-
75
- (output_docs_directory / f"{task_name}.md").write_text(task.markdown_doc(formatters), encoding="utf-8")
76
-
77
-
78
- def generate_readme_list(output_docs_directory: Path, total_tasks: int) -> None:
79
- """Generate a README file listing all tasks with total count."""
80
-
81
- with open(f"{output_docs_directory}/README.md", "w") as f:
82
- f.write(
83
- "# Task documentation\n\n"
84
- "This directory contains the generated documentation for all benchmark tasks available in the package.\n\n"
85
- f"**Total number of tasks: {total_tasks}**\n\n"
86
- "The documentation can be generated or updated with "
87
- "`uv run -m eval_framework.utils.generate_task_docs`.\n\n"
88
- "NOTE: This is an automatically generated file. Any manual modifications will not be preserved when "
89
- "the file is updated.\n\n"
90
- )
91
-
92
- f.write("## List of tasks\n\n")
93
- # sort files alphabetically and ignore README.md
94
- for file in sorted(os.listdir(output_docs_directory)):
95
- if file.endswith(".md") and file != "README.md":
96
- task_name = file[:-3]
97
- f.write(f"- [{task_name}]({task_name}.md)\n")
98
-
99
-
100
- def generate_all_docs(args: argparse.Namespace, output_docs_directory: Path) -> None:
101
- # Load extra tasks if specified
102
- if args.extra_task_modules:
103
- print(f"Loading extra tasks from: {args.extra_task_modules}")
104
- load_extra_tasks(args.extra_task_modules)
105
-
106
- # List the tasks to process
107
- filtered_tasks = []
108
- for task_name in registered_task_names():
109
- if args.only_tasks and task_name not in args.only_tasks:
110
- continue
111
- if task_name in args.exclude_tasks or task_name in EXCLUDED_TASKS:
112
- continue
113
- filtered_tasks.append(task_name)
114
- filtered_tasks.sort()
115
-
116
- print(f"Found {len(filtered_tasks)} tasks to process: {', '.join([task_name for task_name in filtered_tasks])}")
117
-
118
- # List the formatters to use
119
- supported_formatters = {f.__class__.__name__: f for f in [ConcatFormatter(), Llama3Formatter()]}
120
- formatters = []
121
- for f in args.formatter:
122
- if f in supported_formatters:
123
- formatters.append(supported_formatters[f])
124
- else:
125
- raise ValueError(f"Unsupported formatter: {f}")
126
-
127
- # Create the output directory if it does not exist
128
- os.makedirs(output_docs_directory, exist_ok=True)
129
-
130
- for task_name in tqdm.tqdm(filtered_tasks, desc="Generating documentation for tasks"):
131
- try:
132
- generate_docs_for_task(
133
- output_docs_directory=output_docs_directory,
134
- task_name=task_name,
135
- formatters=formatters,
136
- )
137
-
138
- except Exception as e:
139
- print("---")
140
- print(f"failed generating documentation for task {task_name}: {e}")
141
- file_path = f"{output_docs_directory}/{task_name}.md"
142
- if os.path.exists(file_path):
143
- os.remove(file_path)
144
- print("---")
145
-
146
- # Pass the total number of processed tasks to the README generator
147
- generate_readme_list(output_docs_directory=output_docs_directory, total_tasks=len(filtered_tasks))
148
-
149
-
150
- if __name__ == "__main__":
151
- print("Generating task documentation...")
152
- args = parse_args()
153
- generate_all_docs(args, output_docs_directory=DEFAULT_OUTPUT_DOCS_DIRECTORY)
File without changes
File without changes