eval-framework 0.8.4__tar.gz → 0.8.11__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.
- {eval_framework-0.8.4 → eval_framework-0.8.11}/PKG-INFO +5 -5
- {eval_framework-0.8.4 → eval_framework-0.8.11}/pyproject.toml +6 -6
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/evaluation_generator.py +1 -2
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/suite.py +2 -2
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/eval_config.py +12 -7
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -1
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/registry.py +36 -38
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/task_loader.py +7 -7
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/task_names.py +0 -8
- eval_framework-0.8.4/src/eval_framework/tasks/benchmarks/triviaqa.py +0 -78
- eval_framework-0.8.4/src/eval_framework/utils/generate_task_docs.py +0 -153
- {eval_framework-0.8.4 → eval_framework-0.8.11}/LICENSE +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/README.md +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/base_config.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/context/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/context/determined.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/context/eval.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/context/local.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/exceptions.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/drop_process_results.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/README.md +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/aleph_alpha.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/huggingface.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/models.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/llm/openai.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/logger.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/main.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/csv_format.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/f1.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/format_checker.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/ifeval.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/json_format.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/language_checker.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/length_control.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/repetition.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/completion/text_counter.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/language.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/models.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/llm/utils.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/py.typed +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/response_generator.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/result_processors/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/result_processors/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/result_processors/hf_uploader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/result_processors/result_processor.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/run.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/run_direct.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/shared/types.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/base.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/arc_de.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/copa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/csqa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/goldenswag.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/hellaswag.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/humaneval.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/medqa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/mmlu.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/piqa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/sciq.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/benchmarks/winogrande.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/dataset_revisions.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/markdown_doc.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/perturbation.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/task_style.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/utils.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/constants.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/file_ops.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/helpers.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/logging.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/packaging.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/utils/tqdm_handler.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/template_formatting/README.md +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/template_formatting/__init__.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/template_formatting/formatter.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/src/template_formatting/mistral_formatter.py +0 -0
- {eval_framework-0.8.4 → eval_framework-0.8.11}/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.
|
|
3
|
+
Version: 0.8.11
|
|
4
4
|
Summary: Evaluation Framework
|
|
5
5
|
Author: Aleph Alpha Research
|
|
6
6
|
License: Apache License
|
|
@@ -214,16 +214,16 @@ 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.
|
|
217
|
+
Requires-Dist: datasets>=5.0.1,<6
|
|
218
218
|
Requires-Dist: pycountry>=26.2.16,<27
|
|
219
|
-
Requires-Dist: nltk>=3.10.
|
|
219
|
+
Requires-Dist: nltk>=3.10.1,<4
|
|
220
220
|
Requires-Dist: python-dotenv>=1.2.2,<2
|
|
221
221
|
Requires-Dist: lingua-language-detector>=2.2.0,<3
|
|
222
222
|
Requires-Dist: google-crc32c>=1.8.0,<2
|
|
223
223
|
Requires-Dist: langdetect>=1.0.9,<2
|
|
224
224
|
Requires-Dist: spacy>=3.8.14,<4
|
|
225
225
|
Requires-Dist: jsonschema>=4.26.0,<5
|
|
226
|
-
Requires-Dist: mysql-connector-python>=
|
|
226
|
+
Requires-Dist: mysql-connector-python>=26.7.0,<27
|
|
227
227
|
Requires-Dist: psycopg2-binary>=2.9.12,<3
|
|
228
228
|
Requires-Dist: sympy>=1.14.0,<2
|
|
229
229
|
Requires-Dist: llm-sandbox[docker]==0.3.39
|
|
@@ -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.
|
|
243
|
+
Requires-Dist: openai>=2.52.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.
|
|
3
|
+
version = "0.8.11"
|
|
4
4
|
description = "Evaluation Framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -21,16 +21,16 @@ 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.
|
|
24
|
+
"datasets>=5.0.1,<6",
|
|
25
25
|
"pycountry>=26.2.16,<27",
|
|
26
|
-
"nltk>=3.10.
|
|
26
|
+
"nltk>=3.10.1,<4",
|
|
27
27
|
"python-dotenv>=1.2.2,<2",
|
|
28
28
|
"lingua-language-detector>=2.2.0,<3",
|
|
29
29
|
"google-crc32c>=1.8.0,<2",
|
|
30
30
|
"langdetect>=1.0.9,<2", # required by the original ifeval implementation
|
|
31
31
|
"spacy>=3.8.14,<4",
|
|
32
32
|
"jsonschema>=4.26.0,<5",
|
|
33
|
-
"mysql-connector-python>=
|
|
33
|
+
"mysql-connector-python>=26.7.0,<27", # required for sql-related tasks
|
|
34
34
|
"psycopg2-binary>=2.9.12,<3", # required for sql-related tasks
|
|
35
35
|
"sympy>=1.14.0,<2",
|
|
36
36
|
"llm-sandbox[docker]==0.3.39",
|
|
@@ -54,7 +54,7 @@ determined = [
|
|
|
54
54
|
]
|
|
55
55
|
api = ["aleph-alpha-client>=11.5.1"]
|
|
56
56
|
openai = [
|
|
57
|
-
"openai>=2.
|
|
57
|
+
"openai>=2.52.0,<3",
|
|
58
58
|
"tiktoken>=0.13.0,<1",
|
|
59
59
|
"transformers>=4.45.2,<5",
|
|
60
60
|
]
|
|
@@ -92,7 +92,7 @@ dev = [
|
|
|
92
92
|
"types-python-dateutil>=2.9.0.20260716,<3",
|
|
93
93
|
"types-requests>=2.33.0.20260712,<3",
|
|
94
94
|
"plotly>=6.9.0,<7",
|
|
95
|
-
"ruff>=0.16.
|
|
95
|
+
"ruff>=0.16.1",
|
|
96
96
|
"pip-licenses>=5.5.5",
|
|
97
97
|
]
|
|
98
98
|
flash-attn = [
|
|
@@ -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
|
-
|
|
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,
|
|
@@ -18,7 +18,7 @@ from eval_framework.context.local import _load_model
|
|
|
18
18
|
from eval_framework.result_processors.result_processor import generate_output_dir
|
|
19
19
|
from eval_framework.run import _run_single_task
|
|
20
20
|
from eval_framework.tasks.eval_config import EvalConfig
|
|
21
|
-
from eval_framework.tasks.registry import
|
|
21
|
+
from eval_framework.tasks.registry import registry
|
|
22
22
|
|
|
23
23
|
logger = logging.getLogger(__name__)
|
|
24
24
|
|
|
@@ -108,7 +108,7 @@ class TaskSuite(BaseModel):
|
|
|
108
108
|
if isinstance(self.tasks, str):
|
|
109
109
|
if self.name is None:
|
|
110
110
|
self.name = self.tasks
|
|
111
|
-
if not
|
|
111
|
+
if self.tasks not in registry():
|
|
112
112
|
raise ValueError(f"Task '{self.tasks}' is not registered.")
|
|
113
113
|
elif not self.tasks:
|
|
114
114
|
raise ValueError(f"TaskSuite '{self.name}': 'tasks' must not be empty.")
|
|
@@ -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
|
|
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
|
|
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:
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
return
|
|
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)
|
{eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/tasks/hf-dataset-revisions.json
RENAMED
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
"google-research-datasets/nq_open": "5dd9790a83002ad084ddeb7c420dc716852c6f28",
|
|
24
24
|
"google/IFEval": "966cd89545d6b6acfd7638bc708b98261ca58e84",
|
|
25
25
|
"jzhang86/de_ifeval": "4f52d847003b3c83cc282e9d296853a24b34b19a",
|
|
26
|
-
"mandarjoshi/trivia_qa": "0f7faf33a3908546c6fd5b73a660e0f8ff173c2f",
|
|
27
26
|
"math-ai/aime25": "563bb8404243c5f09de6ec262f2db674fe5bce9b",
|
|
28
27
|
"math-ai/aime26": "79037aebdb6580008fb960d17cb21fd3099083e3",
|
|
29
28
|
"nuprl/MultiPL-E": "28441b6024e71d4a1c1c0f6bf171c935cd5a43f2",
|
|
@@ -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()
|
|
@@ -252,10 +255,6 @@ class Registry:
|
|
|
252
255
|
|
|
253
256
|
return factory
|
|
254
257
|
|
|
255
|
-
def add(self, task: type[BaseTask]) -> None:
|
|
256
|
-
task_key = self._task_key(task.NAME)
|
|
257
|
-
self._registry[task_key] = (task.NAME, _Eager(task))
|
|
258
|
-
|
|
259
258
|
def __setitem__(self, name: str, factory: EvalFactory) -> None:
|
|
260
259
|
task_key = self._task_key(name)
|
|
261
260
|
if task_key in self._registry:
|
|
@@ -263,6 +262,24 @@ class Registry:
|
|
|
263
262
|
|
|
264
263
|
self._registry[task_key] = (name, factory)
|
|
265
264
|
|
|
265
|
+
def register(self, task: type[BaseTask]) -> str:
|
|
266
|
+
"""The class name is used as the task name."""
|
|
267
|
+
if not issubclass(task, BaseTask):
|
|
268
|
+
raise ValueError(f"Can only register subclasses of BaseTask, got {task}")
|
|
269
|
+
name = task.__name__
|
|
270
|
+
self[name] = _Eager(task)
|
|
271
|
+
return name
|
|
272
|
+
|
|
273
|
+
def register_lazy(self, class_path: str, /) -> None:
|
|
274
|
+
"""Register a task by its dotted class path, without importing its module."""
|
|
275
|
+
if "." not in class_path:
|
|
276
|
+
raise ValueError(
|
|
277
|
+
f"Invalid class path `{class_path}`. This needs to be a global path like "
|
|
278
|
+
"`eval_framework.tasks.benchmarks.mmlu.MMLU`): "
|
|
279
|
+
)
|
|
280
|
+
base_module, class_name = class_path.rsplit(".", maxsplit=1)
|
|
281
|
+
self[class_name] = _Lazy(class_name=class_name, module=base_module)
|
|
282
|
+
|
|
266
283
|
|
|
267
284
|
_REGISTRY = Registry()
|
|
268
285
|
|
|
@@ -295,7 +312,7 @@ def is_registered(name: str, /) -> bool:
|
|
|
295
312
|
|
|
296
313
|
def validate_task_name(name: str) -> str:
|
|
297
314
|
"""Pydantic-style validator for task names."""
|
|
298
|
-
if not
|
|
315
|
+
if name not in registry():
|
|
299
316
|
raise ValueError(f"Task not registered: {name}")
|
|
300
317
|
return name
|
|
301
318
|
|
|
@@ -310,28 +327,9 @@ def get_task(name: str, /) -> type[BaseTask]:
|
|
|
310
327
|
|
|
311
328
|
def register_task(task: type[BaseTask]) -> str:
|
|
312
329
|
"""The class name is used as the task name."""
|
|
313
|
-
|
|
314
|
-
raise ValueError(f"Can only register subclasses of BaseTask, got {task}")
|
|
315
|
-
name = task.__name__
|
|
316
|
-
_REGISTRY[name] = _Eager(task)
|
|
317
|
-
return name
|
|
330
|
+
return registry().register(task)
|
|
318
331
|
|
|
319
332
|
|
|
320
333
|
def register_lazy_task(class_path: str, /) -> None:
|
|
321
|
-
"""Register a task without importing
|
|
322
|
-
|
|
323
|
-
Lazily register a task without importing the module.
|
|
324
|
-
|
|
325
|
-
Args:
|
|
326
|
-
class_path: The full path to the task class. For example,
|
|
327
|
-
`eval_framework.tasks.benchmarks.mmlu.MMLU`.
|
|
328
|
-
extras: Any extra dependencies of `eval_framework` that need to be installed for this task.
|
|
329
|
-
"""
|
|
330
|
-
if "." not in class_path:
|
|
331
|
-
raise ValueError(
|
|
332
|
-
f"Invalid class path `{class_path}`. This needs to be a global path like "
|
|
333
|
-
"`eval_framework.tasks.benchmarks.mmlu.MMLU`): "
|
|
334
|
-
)
|
|
335
|
-
|
|
336
|
-
base_module, class_name = class_path.rsplit(".", maxsplit=1)
|
|
337
|
-
_REGISTRY[class_name] = _Lazy(class_name=class_name, module=base_module)
|
|
334
|
+
"""Register a task by its dotted class path, without importing its module."""
|
|
335
|
+
registry().register_lazy(class_path)
|
|
@@ -8,7 +8,8 @@ from types import ModuleType
|
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
10
|
from eval_framework.tasks.base import BaseTask
|
|
11
|
-
from eval_framework.tasks.registry import
|
|
11
|
+
from eval_framework.tasks.registry import Registry
|
|
12
|
+
from eval_framework.tasks.registry import registry as global_registry
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
14
15
|
|
|
@@ -46,14 +47,13 @@ def import_file(f: str | os.PathLike, /) -> Any:
|
|
|
46
47
|
return user_module
|
|
47
48
|
|
|
48
49
|
|
|
49
|
-
def load_extra_tasks(module_paths: Sequence[str | os.PathLike]) -> None:
|
|
50
|
+
def load_extra_tasks(module_paths: Sequence[str | os.PathLike], registry: Registry | None = None) -> None:
|
|
50
51
|
"""Dynamically load and register user-defined tasks from a list of files or directories.
|
|
51
52
|
|
|
52
|
-
Each .py file found
|
|
53
|
-
in the TaskName enum for use by name.
|
|
54
|
-
Provides clear error messages for missing/invalid files or import errors.
|
|
53
|
+
Each .py file found is imported, and any BaseTask subclass is registered
|
|
55
54
|
"""
|
|
56
55
|
assert not (isinstance(module_paths, str)), "module_paths must be a sequence of strings / os.PathLike objects"
|
|
56
|
+
registry = registry if registry is not None else global_registry()
|
|
57
57
|
for file_path in find_all_python_files(*module_paths):
|
|
58
58
|
user_module = import_file(file_path)
|
|
59
59
|
|
|
@@ -63,7 +63,7 @@ def load_extra_tasks(module_paths: Sequence[str | os.PathLike]) -> None:
|
|
|
63
63
|
if not hasattr(obj, "NAME"):
|
|
64
64
|
logger.info(f"[User Task Loader] Skipping {obj.__module__} - no NAME attribute present.")
|
|
65
65
|
else:
|
|
66
|
-
if
|
|
66
|
+
if obj.NAME in registry:
|
|
67
67
|
# two classes with the same NAME attribute
|
|
68
68
|
logger.info(obj.__module__)
|
|
69
69
|
|
|
@@ -77,5 +77,5 @@ def load_extra_tasks(module_paths: Sequence[str | os.PathLike]) -> None:
|
|
|
77
77
|
else:
|
|
78
78
|
# if there is no duplicate name conflict then register the new task
|
|
79
79
|
class_obj = getattr(user_module, name)
|
|
80
|
-
|
|
80
|
+
registry.register(class_obj)
|
|
81
81
|
logger.info(f"[User Task Loader] Registered task: {class_obj.NAME}")
|
|
@@ -71,8 +71,6 @@ def register_all_tasks() -> None:
|
|
|
71
71
|
register_lazy_task("eval_framework.tasks.benchmarks.squad.SQuAD_OLMES")
|
|
72
72
|
register_lazy_task("eval_framework.tasks.benchmarks.squad.SQuAD2_MA")
|
|
73
73
|
register_lazy_task("eval_framework.tasks.benchmarks.squad.SQuAD2_MA_NO_SYSPROMPT")
|
|
74
|
-
register_lazy_task("eval_framework.tasks.benchmarks.triviaqa.TRIVIAQA")
|
|
75
|
-
register_lazy_task("eval_framework.tasks.benchmarks.triviaqa.TriviaQA_MA")
|
|
76
74
|
register_lazy_task("eval_framework.tasks.benchmarks.winogrande.WINOGRANDECloze")
|
|
77
75
|
register_lazy_task("eval_framework.tasks.benchmarks.csqa.CommonsenseQAMC_OLMES")
|
|
78
76
|
register_lazy_task("eval_framework.tasks.benchmarks.drop.DropCompletion_OLMES")
|
|
@@ -81,9 +79,3 @@ def register_all_tasks() -> None:
|
|
|
81
79
|
register_lazy_task("eval_framework.tasks.benchmarks.naturalqs_open.NaturalQsOpenMC_OLMES")
|
|
82
80
|
register_lazy_task("eval_framework.tasks.benchmarks.social_iqa.SocialIQAMC_OLMES")
|
|
83
81
|
register_lazy_task("eval_framework.tasks.benchmarks.medqa.MedQAMC_OLMES")
|
|
84
|
-
try:
|
|
85
|
-
# Importing the companion registers the additional tasks from the module.
|
|
86
|
-
# This is mostly for convenience for internal use-cases
|
|
87
|
-
import eval_framework_companion # noqa
|
|
88
|
-
except ImportError:
|
|
89
|
-
pass
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import random
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from eval_framework.metrics.completion.accuracy_completion import AccuracyCompletion
|
|
5
|
-
from eval_framework.metrics.completion.f1 import F1, F1SquadNormalized
|
|
6
|
-
from eval_framework.tasks.base import BaseTask, Language, ResponseType, Sample
|
|
7
|
-
from eval_framework.tasks.dataset_revisions import HF_REVISIONS_LOCKFILE
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class TRIVIAQA(BaseTask[str]):
|
|
11
|
-
"""Trivia QA dataset: https://huggingface.co/datasets/mandarjoshi/trivia_qa"""
|
|
12
|
-
|
|
13
|
-
REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
|
|
14
|
-
|
|
15
|
-
NAME = "TriviaQA"
|
|
16
|
-
DATASET_PATH = "mandarjoshi/trivia_qa"
|
|
17
|
-
SAMPLE_SPLIT = "validation"
|
|
18
|
-
FEWSHOT_SPLIT = "train"
|
|
19
|
-
RESPONSE_TYPE = ResponseType.COMPLETION
|
|
20
|
-
METRICS = [AccuracyCompletion, F1]
|
|
21
|
-
SUBJECTS = ["rc.wikipedia.nocontext"]
|
|
22
|
-
PERTURBATION_UNMODIFIABLE_WORDS = ["Question", "Answer"]
|
|
23
|
-
LANGUAGE = Language.ENG
|
|
24
|
-
|
|
25
|
-
def __init__(self, num_fewshot: int = 0) -> None:
|
|
26
|
-
super().__init__(num_fewshot)
|
|
27
|
-
self.stop_sequences = ["\n"]
|
|
28
|
-
self.max_tokens = 400 # the max length of the ground truth is 282 characters while the average is ~16
|
|
29
|
-
self.rnd_choice_shuffle = random.Random()
|
|
30
|
-
|
|
31
|
-
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
32
|
-
prompt = f"Question: {item['question'].strip()}\nAnswer:"
|
|
33
|
-
return prompt
|
|
34
|
-
|
|
35
|
-
def _get_fewshot_target_text(self, item: dict[str, Any]) -> str:
|
|
36
|
-
target = self._get_ground_truth(item)[0]
|
|
37
|
-
assert target is not None
|
|
38
|
-
assert isinstance(target, str)
|
|
39
|
-
return f" {target}"
|
|
40
|
-
|
|
41
|
-
def _get_ground_truth(self, item: dict[str, Any]) -> list[str]:
|
|
42
|
-
return item["answer"]["aliases"]
|
|
43
|
-
|
|
44
|
-
def post_process_generated_completion(self, completion_text: str, sample: Sample | None = None) -> str:
|
|
45
|
-
return completion_text.strip().rstrip(".")
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
class TriviaQA_MA(TRIVIAQA):
|
|
49
|
-
"""TriviaQA with the exact system prompt used in MA training"""
|
|
50
|
-
|
|
51
|
-
REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
|
|
52
|
-
|
|
53
|
-
NAME = "TriviaQA_MA"
|
|
54
|
-
SUBJECTS = ["rc.wikipedia"]
|
|
55
|
-
UNANSWERABLE_STR = "unanswerable"
|
|
56
|
-
|
|
57
|
-
METRICS = [AccuracyCompletion, F1, F1SquadNormalized]
|
|
58
|
-
PERTURBATION_UNMODIFIABLE_WORDS = ["Question", "Answer", "Context", "unanswerable"]
|
|
59
|
-
|
|
60
|
-
def __init__(self, num_fewshot: int = 0) -> None:
|
|
61
|
-
super().__init__(num_fewshot)
|
|
62
|
-
self.stop_sequences = []
|
|
63
|
-
self.max_tokens = 27_000
|
|
64
|
-
|
|
65
|
-
def _get_context_text(self, item: dict[str, Any]) -> str:
|
|
66
|
-
return "\n\n".join(item["entity_pages"]["wiki_context"])
|
|
67
|
-
|
|
68
|
-
def _get_system_prompt_text(self, item: dict[str, Any]) -> str | None:
|
|
69
|
-
return (
|
|
70
|
-
"You are a helpful assistant and will answer the user's questions carefully, "
|
|
71
|
-
"logically, accurately and well-reasoned.\n"
|
|
72
|
-
"Use the given context to answer the question faithfully. Answer only if the "
|
|
73
|
-
f"answer is present in the given context, otherwise respond with '{self.UNANSWERABLE_STR}' "
|
|
74
|
-
"if the answer is not present in the context."
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
78
|
-
return f"Context:\n{self._get_context_text(item)}\n\nQuestion:\n{item['question'].strip()}\n"
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/drop_process_results.py
RENAMED
|
File without changes
|
{eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{eval_framework-0.8.4 → eval_framework-0.8.11}/src/eval_framework/external/ifeval_impl/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|