eval-framework 0.11.16__tar.gz → 0.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {eval_framework-0.11.16 → eval_framework-0.12.0}/PKG-INFO +2 -2
- {eval_framework-0.11.16 → eval_framework-0.12.0}/pyproject.toml +2 -2
- {eval_framework-0.11.16 → eval_framework-0.12.0}/pyproject.toml.orig +2 -2
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/goldenswag.py +5 -3
- eval_framework-0.12.0/src/eval_framework/benchmarks/mmlu.py +116 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/piqa.py +2 -2
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/composed.py +13 -4
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/contract.py +8 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/eval_kind.py +5 -4
- eval_framework-0.12.0/src/eval_framework/metrics/efficiency/finish_reason.py +39 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/response_generator.py +3 -3
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/base.py +8 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/mmlu.py +0 -70
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/task_names.py +4 -4
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/task_style.py +50 -23
- {eval_framework-0.11.16 → eval_framework-0.12.0}/LICENSE +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/README.md +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/base_config.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/arc_de.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/csqa_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/gpqa_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/hellaswag.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/hellaswag_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/hle_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/piqa_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/simpleqa_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/siqa_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/winogrande_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/choices.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/context/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/context/determined.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/context/eval.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/context/local.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/evaluation_generator.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/exceptions.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/drop_process_results.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/ifeval_impl/README.md +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/aleph_alpha.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/base.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/huggingface.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/models.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/llm/openai.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/logger.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/main.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/base.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/csv_format.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/f1.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/format_checker.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/ifeval.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/json_format.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/language_checker.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/length_control.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/repetition.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/completion/text_counter.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/efficiency/token_counters.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/base.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/language.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/models.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/llm/utils.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/py.typed +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/result_processors/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/result_processors/base.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/result_processors/hf_uploader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/result_processors/result_processor.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/run.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/run_direct.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/shared/errors.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/shared/types.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/subjects.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/suite.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/arc_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/copa.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/csqa.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/gsm8k_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/hendrycks_math_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/humaneval.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/humaneval_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/humaneval_plus.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/mbpp_ellamind.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/medqa.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/sciq.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/winogrande.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/dataset_loading.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/dataset_revisions.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/eval_config.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/lazy.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/markdown_doc.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/registry.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/task_loader.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/utils.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/constants.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/file_ops.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/helpers.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/logging.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/packaging.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/utils/tqdm_handler.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/template_formatting/README.md +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/template_formatting/__init__.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/template_formatting/formatter.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/template_formatting/mistral_formatter.py +0 -0
- {eval_framework-0.11.16 → eval_framework-0.12.0}/src/template_formatting/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: eval-framework
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Evaluation Framework
|
|
5
5
|
Author: Aleph Alpha Research
|
|
6
6
|
License: Apache License
|
|
@@ -232,7 +232,7 @@ Requires-Dist: jsonlines>=4,<5
|
|
|
232
232
|
Requires-Dist: lxml>=6.1.3,<7
|
|
233
233
|
Requires-Dist: python-iso639>=2026.7.23
|
|
234
234
|
Requires-Dist: wandb>=0.30.0,<1
|
|
235
|
-
Requires-Dist: boto3>=1.43.
|
|
235
|
+
Requires-Dist: boto3>=1.43.93,<2
|
|
236
236
|
Requires-Dist: numpy>=2.5.3
|
|
237
237
|
Requires-Dist: antlr4-python3-runtime==4.11.0
|
|
238
238
|
Requires-Dist: scipy>=1.18.1,<2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "eval-framework"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.12.0"
|
|
4
4
|
description = "Evaluation Framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.15"
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"lxml>=6.1.3,<7",
|
|
36
36
|
"python-iso639>=2026.7.23",
|
|
37
37
|
"wandb>=0.30.0,<1",
|
|
38
|
-
"boto3>=1.43.
|
|
38
|
+
"boto3>=1.43.93,<2",
|
|
39
39
|
"numpy>=2.5.3",
|
|
40
40
|
"antlr4-python3-runtime==4.11.0",
|
|
41
41
|
"scipy>=1.18.1,<2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "eval-framework"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.12.0"
|
|
4
4
|
description = "Evaluation Framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -39,7 +39,7 @@ dependencies = [
|
|
|
39
39
|
"lxml>=6.1.3,<7",
|
|
40
40
|
"python-iso639>=2026.7.23",
|
|
41
41
|
"wandb>=0.30.0,<1",
|
|
42
|
-
"boto3>=1.43.
|
|
42
|
+
"boto3>=1.43.93,<2",
|
|
43
43
|
"numpy>=2.5.3",
|
|
44
44
|
# is a dependency of sympy, but not explicitly listed in the requirements.txt
|
|
45
45
|
# https://github.com/sympy/sympy/blob/0204fa34e8f6f6f8ccb4de01209be9a2345c9d6e/doc/src/contributing/dependencies.md?plain=1#L125
|
{eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/benchmarks/goldenswag.py
RENAMED
|
@@ -11,7 +11,7 @@ from eval_framework.eval_kind import Choice
|
|
|
11
11
|
from eval_framework.tasks.base import Language
|
|
12
12
|
from eval_framework.tasks.dataset_loading import DatasetPolicy
|
|
13
13
|
from eval_framework.tasks.dataset_revisions import pinned_by_framework
|
|
14
|
-
from eval_framework.tasks.task_style import ClozeStyle,
|
|
14
|
+
from eval_framework.tasks.task_style import ClozeStyle, TaskStyler
|
|
15
15
|
|
|
16
16
|
_IDK_PREAMBLE = (
|
|
17
17
|
"Complete the sentence only if you are confident, since mistakes may be penalised, while correct "
|
|
@@ -39,8 +39,10 @@ def goldenswag(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def goldenswag_idk(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
42
|
-
cloze = ClozeStyle(
|
|
43
|
-
|
|
42
|
+
cloze = ClozeStyle(
|
|
43
|
+
question_prefix="", cue_text="", trailing_newline=False, initial_prompt=lambda _subject: _IDK_PREAMBLE
|
|
44
|
+
)
|
|
45
|
+
styler = cloze.with_abstention_option(" I do not know.")
|
|
44
46
|
return _goldenswag_benchmark("GoldenSwag_IDK", styler, dataset)
|
|
45
47
|
|
|
46
48
|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""MMLU: https://huggingface.co/datasets/cais/mmlu
|
|
2
|
+
|
|
3
|
+
Multiple-choice knowledge questions across 57 subjects (each an HF config, loaded per subject); every
|
|
4
|
+
prompt is prefaced by a subject-templated preamble. The composed variants:
|
|
5
|
+
|
|
6
|
+
* ``MMLU`` / ``MMLU_OLMES`` — score the letter labels; OLMES adds a space before each option label.
|
|
7
|
+
* ``Full Text MMLU`` — shows the options as a bulleted list and scores the full answer text.
|
|
8
|
+
* ``MMLU_IDK`` — lets the model abstain with ``"?"`` and reports confidence-aware metrics.
|
|
9
|
+
|
|
10
|
+
``MMLU_COT`` stays BaseTask until the composed design supports generative (completion) tasks.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from typing import Any, final, override
|
|
14
|
+
|
|
15
|
+
from eval_framework.choices import ChoiceFields, ChoiceReader
|
|
16
|
+
from eval_framework.composed import ComposedBenchmark
|
|
17
|
+
from eval_framework.contract import Benchmark
|
|
18
|
+
from eval_framework.eval_kind import Choice
|
|
19
|
+
from eval_framework.subjects import ListOfSubjects
|
|
20
|
+
from eval_framework.tasks.base import Language
|
|
21
|
+
from eval_framework.tasks.benchmarks.mmlu import MMLU_SUBJECTS # single source of truth for the 57 subjects
|
|
22
|
+
from eval_framework.tasks.dataset_loading import DatasetPolicy
|
|
23
|
+
from eval_framework.tasks.dataset_revisions import pinned_by_framework
|
|
24
|
+
from eval_framework.tasks.task_style import ClozeStyle, MCStyle, TaskStyler
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@final
|
|
28
|
+
class MmluReader(ChoiceReader):
|
|
29
|
+
"""Reads an MMLU item: the question and its four answer choices, with the correct one at ``answer``."""
|
|
30
|
+
|
|
31
|
+
@override
|
|
32
|
+
def read(self, item: dict[str, Any]) -> ChoiceFields:
|
|
33
|
+
return ChoiceFields(
|
|
34
|
+
raw_question=item["question"].strip(),
|
|
35
|
+
choices=item["choices"],
|
|
36
|
+
correct_index=item["answer"],
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@final
|
|
41
|
+
class _FullTextMmluStyle(ClozeStyle):
|
|
42
|
+
"""Cloze scoring (full answer text) that additionally shows the options as a bulleted list."""
|
|
43
|
+
|
|
44
|
+
@override
|
|
45
|
+
def get_instruction_text(self, raw_question: str, choices: list[str]) -> str:
|
|
46
|
+
options = "".join(f"- {choice}\n" for choice in choices)
|
|
47
|
+
return f"{self.question_prefix}{raw_question}\nPossible answers:\n{options}"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _humanized(subject_label: str) -> str:
|
|
51
|
+
# Subject labels are underscored config names ("abstract_algebra"); read them as prose.
|
|
52
|
+
return " ".join(subject_label.split("_"))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _mc_preamble(subject_label: str) -> str:
|
|
56
|
+
return f"The following are multiple choice questions (with answers) about {_humanized(subject_label)}."
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _full_text_preamble(subject_label: str) -> str:
|
|
60
|
+
return (
|
|
61
|
+
f"The following are multiple choice questions (with possible answers) about {_humanized(subject_label)}.\n"
|
|
62
|
+
"Answer with the full text of the correct answer."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _idk_preamble(subject_label: str) -> str:
|
|
67
|
+
# Unlike the other variants, the IDK preamble names the subject by its raw (underscored) key.
|
|
68
|
+
return (
|
|
69
|
+
f"The following are multiple choice questions (with answers) about {subject_label}. "
|
|
70
|
+
"Answer only if you are confident, since mistakes may be penalised, while correct answers receive points. "
|
|
71
|
+
"It is acceptable to answer with '?' if you are unsure, and you will receive 0 points."
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _mmlu_benchmark(
|
|
76
|
+
id: str, styler: TaskStyler, dataset: DatasetPolicy | None = None, display_name: str | None = None
|
|
77
|
+
) -> Benchmark:
|
|
78
|
+
dataset_policy = dataset if dataset is not None else pinned_by_framework("cais/mmlu")
|
|
79
|
+
return ComposedBenchmark.compose(
|
|
80
|
+
id=id,
|
|
81
|
+
display_name=display_name,
|
|
82
|
+
kind=Choice(reader=MmluReader(), styler=styler),
|
|
83
|
+
sample_split="test",
|
|
84
|
+
fewshot_split="dev",
|
|
85
|
+
subjects=ListOfSubjects(MMLU_SUBJECTS),
|
|
86
|
+
dataset_policy=dataset_policy,
|
|
87
|
+
language=Language.ENG,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def mmlu(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
92
|
+
styler = MCStyle(question_prefix="Question: ", cue_text="Answer:", initial_prompt=_mc_preamble)
|
|
93
|
+
return _mmlu_benchmark("MMLU", styler, dataset)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def mmlu_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
97
|
+
styler = MCStyle(
|
|
98
|
+
question_prefix="Question: ", cue_text="Answer:", space_prefixed_labels=True, initial_prompt=_mc_preamble
|
|
99
|
+
)
|
|
100
|
+
return _mmlu_benchmark("MMLU_OLMES", styler, dataset)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def mmlu_full_text(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
104
|
+
styler = _FullTextMmluStyle(question_prefix="Question: ", cue_text="Answer:", initial_prompt=_full_text_preamble)
|
|
105
|
+
# The registry/hash identity is the compact "FullTextMMLU"; the display name keeps the spelled-out form.
|
|
106
|
+
return _mmlu_benchmark("FullTextMMLU", styler, dataset, display_name="Full Text MMLU")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def mmlu_idk(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
110
|
+
styler = MCStyle(
|
|
111
|
+
question_prefix="Question: ", cue_text="Answer:", initial_prompt=_idk_preamble
|
|
112
|
+
).with_abstention_option(" ?")
|
|
113
|
+
return _mmlu_benchmark("MMLU_IDK", styler, dataset)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
MMLU_BENCHMARKS: list[Benchmark] = [mmlu(), mmlu_olmes(), mmlu_full_text(), mmlu_idk()]
|
|
@@ -16,7 +16,7 @@ from eval_framework.eval_kind import Choice
|
|
|
16
16
|
from eval_framework.tasks.base import Language
|
|
17
17
|
from eval_framework.tasks.dataset_loading import DatasetPolicy
|
|
18
18
|
from eval_framework.tasks.dataset_revisions import pinned_frozen
|
|
19
|
-
from eval_framework.tasks.task_style import ClozeStyle,
|
|
19
|
+
from eval_framework.tasks.task_style import ClozeStyle, MCStyle, TaskStyler
|
|
20
20
|
|
|
21
21
|
_IDK_PREAMBLE = (
|
|
22
22
|
"Complete the sentence only if you are confident, since mistakes may be penalised, while correct "
|
|
@@ -75,7 +75,7 @@ def piqa_olmes(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
|
75
75
|
def piqa_idk(dataset: DatasetPolicy | None = None) -> Benchmark:
|
|
76
76
|
return _piqa_benchmark(
|
|
77
77
|
"PIQA_IDK",
|
|
78
|
-
|
|
78
|
+
ClozeStyle(initial_prompt=lambda _subject: _IDK_PREAMBLE).with_abstention_option(" I do not know"),
|
|
79
79
|
sample_split="validation",
|
|
80
80
|
fewshot_split="test",
|
|
81
81
|
dataset=dataset,
|
|
@@ -15,6 +15,7 @@ from eval_framework.metrics.efficiency.bytes_per_sequence_position import (
|
|
|
15
15
|
SequencePositionsCompletion,
|
|
16
16
|
SequencePositionsLoglikelihood,
|
|
17
17
|
)
|
|
18
|
+
from eval_framework.metrics.efficiency.finish_reason import FinishReason
|
|
18
19
|
from eval_framework.metrics.efficiency.token_counters import TokenCounts
|
|
19
20
|
from eval_framework.shared.errors import raise_errors
|
|
20
21
|
from eval_framework.shared.types import Completion, Error, RawCompletion
|
|
@@ -85,6 +86,7 @@ class ComposedEval(Eval):
|
|
|
85
86
|
dataset = self._load_dataset(subject.load_key)
|
|
86
87
|
fewshot_pool = dataset[self.fewshot_split] if self.num_fewshot > 0 else []
|
|
87
88
|
assert len(dataset[self.sample_split]) > 0
|
|
89
|
+
initial_prompt = self._kind.initial_prompt(subject.label)
|
|
88
90
|
sample_id = 0 # ids and the num_samples cap are per subject, matching BaseTask
|
|
89
91
|
done = False
|
|
90
92
|
for item in dataset[self.sample_split]:
|
|
@@ -96,7 +98,7 @@ class ComposedEval(Eval):
|
|
|
96
98
|
yield Sample(
|
|
97
99
|
id=sample_id,
|
|
98
100
|
subject=subject.label,
|
|
99
|
-
messages=self._messages(prefix, sample_body),
|
|
101
|
+
messages=self._messages(prefix, sample_body, initial_prompt),
|
|
100
102
|
ground_truth=sample_body.ground_truth,
|
|
101
103
|
possible_completions=sample_body.possible_completions,
|
|
102
104
|
context=None,
|
|
@@ -106,9 +108,8 @@ class ComposedEval(Eval):
|
|
|
106
108
|
done = True
|
|
107
109
|
break
|
|
108
110
|
|
|
109
|
-
def _messages(self, prefix: list[Message], body: SampleBody) -> list[Message]:
|
|
111
|
+
def _messages(self, prefix: list[Message], body: SampleBody, initial_prompt: str | None) -> list[Message]:
|
|
110
112
|
messages = [*prefix, Message(role=Role.USER, content=body.prompt)]
|
|
111
|
-
initial_prompt = self._kind.initial_prompt()
|
|
112
113
|
if initial_prompt is not None:
|
|
113
114
|
first = messages[0]
|
|
114
115
|
messages[0] = Message(role=first.role, content=f"{initial_prompt}\n\n{first.content}")
|
|
@@ -236,6 +237,14 @@ class ComposedEval(Eval):
|
|
|
236
237
|
)
|
|
237
238
|
return completion_list
|
|
238
239
|
|
|
240
|
+
@override
|
|
241
|
+
def get_stop_sequences(self) -> list[str]:
|
|
242
|
+
return []
|
|
243
|
+
|
|
244
|
+
@override
|
|
245
|
+
def get_max_tokens(self) -> int | None:
|
|
246
|
+
return None
|
|
247
|
+
|
|
239
248
|
@override
|
|
240
249
|
def get_response_type(self) -> ResponseType:
|
|
241
250
|
return self._kind.response_type
|
|
@@ -250,7 +259,7 @@ def _metrics_for(kind: EvalKind) -> list[type["BaseMetric"]]:
|
|
|
250
259
|
response_type_metrics: list[type[BaseMetric]]
|
|
251
260
|
match kind.response_type:
|
|
252
261
|
case ResponseType.COMPLETION:
|
|
253
|
-
response_type_metrics = [BytesCompletion, SequencePositionsCompletion, TokenCounts]
|
|
262
|
+
response_type_metrics = [BytesCompletion, SequencePositionsCompletion, TokenCounts, FinishReason]
|
|
254
263
|
case ResponseType.LOGLIKELIHOODS:
|
|
255
264
|
response_type_metrics = [BytesLoglikelihood, SequencePositionsLoglikelihood]
|
|
256
265
|
case _:
|
|
@@ -52,6 +52,14 @@ class Eval(ABC):
|
|
|
52
52
|
def get_metadata(self) -> dict[str, str | list[str]]:
|
|
53
53
|
"""Descriptive metadata about the eval for result reporting."""
|
|
54
54
|
|
|
55
|
+
@abstractmethod
|
|
56
|
+
def get_stop_sequences(self) -> list[str]:
|
|
57
|
+
"""Stop sequences the eval requests for completion generation."""
|
|
58
|
+
|
|
59
|
+
@abstractmethod
|
|
60
|
+
def get_max_tokens(self) -> int | None:
|
|
61
|
+
"""Token limit the eval requests for completion generation, or ``None`` for no limit."""
|
|
62
|
+
|
|
55
63
|
@abstractmethod
|
|
56
64
|
def get_response_type(self) -> ResponseType: ...
|
|
57
65
|
|
|
@@ -47,8 +47,9 @@ class EvalKind(ABC):
|
|
|
47
47
|
"""Kind-specific metadata merged into the eval's ``get_metadata`` (e.g. the task style)."""
|
|
48
48
|
return {}
|
|
49
49
|
|
|
50
|
-
def initial_prompt(self) -> str | None:
|
|
51
|
-
"""A preamble prepended once at the top of the prompt (before any few-shot
|
|
50
|
+
def initial_prompt(self, subject_label: str) -> str | None:
|
|
51
|
+
"""A preamble prepended once at the top of the prompt for the given subject (before any few-shot
|
|
52
|
+
examples), or None."""
|
|
52
53
|
return None
|
|
53
54
|
|
|
54
55
|
|
|
@@ -90,5 +91,5 @@ class Choice(EvalKind):
|
|
|
90
91
|
return self._styler.get_extra_metadata()
|
|
91
92
|
|
|
92
93
|
@override
|
|
93
|
-
def initial_prompt(self) -> str | None:
|
|
94
|
-
return self._styler.initial_prompt()
|
|
94
|
+
def initial_prompt(self, subject_label: str) -> str | None:
|
|
95
|
+
return self._styler.initial_prompt(subject_label)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from eval_framework.metrics.base import BaseMetric, MetricResult
|
|
2
|
+
from eval_framework.shared.types import Completion
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FinishReason(BaseMetric[Completion]):
|
|
6
|
+
"""Why the backend ended the generation, as one 0/1 indicator per reason.
|
|
7
|
+
|
|
8
|
+
Averaged over a benchmark, each key becomes a rate: `FinishReason/Repetition`
|
|
9
|
+
is the share of completions vLLM aborted through its `repetition_detection`
|
|
10
|
+
sampling parameter (looping output), `FinishReason/Length` the share that hit
|
|
11
|
+
`max_tokens`, and `FinishReason/Stop` the share that ended on their own (EOS
|
|
12
|
+
or a stop sequence). Reasons outside these keys (e.g. `tool_calls`) count as
|
|
13
|
+
0 for all of them.
|
|
14
|
+
|
|
15
|
+
Reads the `finish_reason` backends already attach to the response. All values
|
|
16
|
+
are None when the backend did not report one (e.g. HuggingFace) or when the
|
|
17
|
+
sample errored, so such samples do not dilute the rates.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
NAME = "FinishReason"
|
|
21
|
+
KEYS = ["Stop", "Length", "Repetition"]
|
|
22
|
+
_REASONS = {"Stop": "stop", "Length": "length", "Repetition": "repetition"}
|
|
23
|
+
|
|
24
|
+
def calculate(self, response: Completion) -> list[MetricResult]:
|
|
25
|
+
finish_reason = response.raw_completion_finish_reason
|
|
26
|
+
if response.error or finish_reason is None:
|
|
27
|
+
values: dict[str, float | None] = {key: None for key in self.KEYS}
|
|
28
|
+
else:
|
|
29
|
+
values = {key: float(finish_reason.lower() == reason) for key, reason in self._REASONS.items()}
|
|
30
|
+
|
|
31
|
+
return [
|
|
32
|
+
MetricResult(
|
|
33
|
+
metric_name=f"{self.NAME}/{key}",
|
|
34
|
+
value=value,
|
|
35
|
+
higher_is_better=key == "Stop",
|
|
36
|
+
error=response.error,
|
|
37
|
+
)
|
|
38
|
+
for key, value in values.items()
|
|
39
|
+
]
|
|
@@ -80,8 +80,8 @@ class ResponseGenerator:
|
|
|
80
80
|
"""
|
|
81
81
|
llm_stop_sequences = getattr(self.llm, "stop_sequences", None)
|
|
82
82
|
llm_max_tokens = getattr(self.llm, "max_tokens", None)
|
|
83
|
-
task_stop_sequences =
|
|
84
|
-
task_max_tokens = self.config.max_tokens or
|
|
83
|
+
task_stop_sequences = self.task.get_stop_sequences()
|
|
84
|
+
task_max_tokens = self.config.max_tokens or self.task.get_max_tokens()
|
|
85
85
|
# if both task and model define a max_token, the smaller value is used
|
|
86
86
|
max_tokens = min(
|
|
87
87
|
[x for x in [llm_max_tokens, task_max_tokens] if x is not None],
|
|
@@ -89,7 +89,7 @@ class ResponseGenerator:
|
|
|
89
89
|
)
|
|
90
90
|
logger.info(f"Set max_tokens to {max_tokens}")
|
|
91
91
|
# if both task and model define stop sequences, those are merged into one list
|
|
92
|
-
stop_sequences_merged = (llm_stop_sequences or []) +
|
|
92
|
+
stop_sequences_merged = (llm_stop_sequences or []) + task_stop_sequences
|
|
93
93
|
stop_sequences = sorted(list(set(stop_sequences_merged))) if stop_sequences_merged else None
|
|
94
94
|
logger.info(f"Set stop_sequences to {stop_sequences}")
|
|
95
95
|
return stop_sequences, max_tokens
|
|
@@ -18,6 +18,7 @@ from eval_framework.metrics.efficiency.bytes_per_sequence_position import (
|
|
|
18
18
|
SequencePositionsCompletion,
|
|
19
19
|
SequencePositionsLoglikelihood,
|
|
20
20
|
)
|
|
21
|
+
from eval_framework.metrics.efficiency.finish_reason import FinishReason
|
|
21
22
|
from eval_framework.metrics.efficiency.token_counters import TokenCounts
|
|
22
23
|
from eval_framework.shared.errors import raise_errors
|
|
23
24
|
from eval_framework.shared.types import BaseMetricContext, Completion, Error, RawCompletion
|
|
@@ -444,6 +445,12 @@ class BaseTask[SubjectType](Eval):
|
|
|
444
445
|
)
|
|
445
446
|
return completion_list
|
|
446
447
|
|
|
448
|
+
def get_stop_sequences(self) -> list[str]:
|
|
449
|
+
return self.stop_sequences or []
|
|
450
|
+
|
|
451
|
+
def get_max_tokens(self) -> int | None:
|
|
452
|
+
return self.max_tokens
|
|
453
|
+
|
|
447
454
|
@classmethod
|
|
448
455
|
def get_response_type(cls) -> ResponseType:
|
|
449
456
|
"""Return the response type of the task (or the styler if it exists)."""
|
|
@@ -468,6 +475,7 @@ class BaseTask[SubjectType](Eval):
|
|
|
468
475
|
BytesCompletion,
|
|
469
476
|
SequencePositionsCompletion,
|
|
470
477
|
TokenCounts,
|
|
478
|
+
FinishReason,
|
|
471
479
|
]
|
|
472
480
|
case ResponseType.LOGLIKELIHOODS:
|
|
473
481
|
metrics = [BytesLoglikelihood, SequencePositionsLoglikelihood]
|
{eval_framework-0.11.16 → eval_framework-0.12.0}/src/eval_framework/tasks/benchmarks/mmlu.py
RENAMED
|
@@ -8,9 +8,6 @@ from eval_framework.metrics.loglikelihood.accuracy_loglikelihood import (
|
|
|
8
8
|
AccuracyNormLoglikelihood,
|
|
9
9
|
)
|
|
10
10
|
from eval_framework.metrics.loglikelihood.bits_per_byte import BitsPerByteLoglikelihood
|
|
11
|
-
from eval_framework.metrics.loglikelihood.confidence_weighted_accuracy import ConfidenceWeightedAccuracy
|
|
12
|
-
from eval_framework.metrics.loglikelihood.dcs import DistributionalCorrectnessScore
|
|
13
|
-
from eval_framework.metrics.loglikelihood.ternary import TernaryScore
|
|
14
11
|
from eval_framework.tasks.base import BaseTask, Language, ResponseType, Sample
|
|
15
12
|
from eval_framework.tasks.dataset_revisions import HF_REVISIONS_LOCKFILE
|
|
16
13
|
from eval_framework.tasks.utils import get_n_letters
|
|
@@ -126,73 +123,6 @@ class MMLU(BaseTask[str]):
|
|
|
126
123
|
return [f" {key}" for key in self.keys]
|
|
127
124
|
|
|
128
125
|
|
|
129
|
-
class MMLU_OLMES(MMLU):
|
|
130
|
-
"""
|
|
131
|
-
MMLU with OLMES-style prompt: space before each label in the prompt (" A.", " B.", ...).
|
|
132
|
-
"""
|
|
133
|
-
|
|
134
|
-
REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
|
|
135
|
-
|
|
136
|
-
NAME = "MMLU_OLMES"
|
|
137
|
-
|
|
138
|
-
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
139
|
-
question = item["question"].strip()
|
|
140
|
-
choices = "".join([f" {key}. {choice}\n" for key, choice in zip(self.keys, item["choices"])])
|
|
141
|
-
return f"Question: {question}\n{choices}"
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
class FullTextMMLU(MMLU):
|
|
145
|
-
"""MMLU dataset but where the model is expected to replicate choice text, rather than just the key."""
|
|
146
|
-
|
|
147
|
-
NAME = "Full Text MMLU"
|
|
148
|
-
METRICS = [
|
|
149
|
-
AccuracyLoglikelihood,
|
|
150
|
-
AccuracyNormLoglikelihood,
|
|
151
|
-
AccuracyBayesianLoglikelihood,
|
|
152
|
-
BitsPerByteLoglikelihood,
|
|
153
|
-
]
|
|
154
|
-
|
|
155
|
-
def _get_initial_prompt_text(self, item: dict[str, Any]) -> str:
|
|
156
|
-
subject_name = self._get_subject_name(item)
|
|
157
|
-
return f"""The following are multiple choice questions (with possible answers) about {subject_name}.
|
|
158
|
-
Answer with the full text of the correct answer."""
|
|
159
|
-
|
|
160
|
-
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
161
|
-
question = item["question"].strip()
|
|
162
|
-
choices = "".join([f"- {choice}\n" for choice in item["choices"]])
|
|
163
|
-
return f"Question: {question}\nPossible answers:\n{choices}"
|
|
164
|
-
|
|
165
|
-
def _get_ground_truth(self, item: dict[str, Any]) -> str | None:
|
|
166
|
-
return f" {item['choices'][item['answer']]}"
|
|
167
|
-
|
|
168
|
-
def _get_possible_completions(self, item: dict[str, Any]) -> list[str] | None:
|
|
169
|
-
return [f" {choice}" for choice in item["choices"]]
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
class MMLU_IDK(MMLU):
|
|
173
|
-
REVISION_LOCKFILE = HF_REVISIONS_LOCKFILE
|
|
174
|
-
NAME = "MMLU_IDK"
|
|
175
|
-
METRICS = [
|
|
176
|
-
AccuracyLoglikelihood,
|
|
177
|
-
AccuracyNormLoglikelihood,
|
|
178
|
-
AccuracyBayesianLoglikelihood,
|
|
179
|
-
ConfidenceWeightedAccuracy,
|
|
180
|
-
DistributionalCorrectnessScore,
|
|
181
|
-
TernaryScore,
|
|
182
|
-
]
|
|
183
|
-
|
|
184
|
-
def _get_initial_prompt_text(self, item: dict[str, Any]) -> str:
|
|
185
|
-
return (
|
|
186
|
-
f"The following are multiple choice questions (with answers) about {item['subject']}. "
|
|
187
|
-
"Answer only if you are confident, since mistakes may be penalised, while correct answers receive points. "
|
|
188
|
-
"It is acceptable to answer with '?' if you are unsure, and you will receive 0 points."
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
def _get_possible_completions(self, item: dict[str, Any]) -> list[str] | None:
|
|
192
|
-
completions = super()._get_possible_completions(item)
|
|
193
|
-
return (completions or []) + [" ?"]
|
|
194
|
-
|
|
195
|
-
|
|
196
126
|
class MMLU_COT(MMLU):
|
|
197
127
|
"""
|
|
198
128
|
MMLU dataset with instruction to summarize reasoning and conclude with answer.
|
|
@@ -7,6 +7,7 @@ from eval_framework.benchmarks.gpqa_ellamind import GPQA_ELLAMIND_BENCHMARKS
|
|
|
7
7
|
from eval_framework.benchmarks.hellaswag import HELLASWAG_BENCHMARKS
|
|
8
8
|
from eval_framework.benchmarks.hellaswag_ellamind import HELLASWAG_ELLAMIND_BENCHMARKS
|
|
9
9
|
from eval_framework.benchmarks.hle_ellamind import HLE_ELLAMIND_BENCHMARKS
|
|
10
|
+
from eval_framework.benchmarks.mmlu import MMLU_BENCHMARKS
|
|
10
11
|
from eval_framework.benchmarks.piqa import PIQA_BENCHMARKS
|
|
11
12
|
from eval_framework.benchmarks.piqa_ellamind import PIQA_ELLAMIND_BENCHMARKS
|
|
12
13
|
from eval_framework.benchmarks.simpleqa_ellamind import SIMPLEQA_ELLAMIND_BENCHMARKS
|
|
@@ -117,10 +118,9 @@ def register_math_reasoning_tasks(registry: Registry) -> None:
|
|
|
117
118
|
|
|
118
119
|
def register_mmlu_tasks(registry: Registry) -> None:
|
|
119
120
|
"""Register mmlu benchmark tasks."""
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
register_lazy_task("eval_framework.tasks.benchmarks.mmlu.FullTextMMLU", registry=registry)
|
|
121
|
+
for benchmark in MMLU_BENCHMARKS: # composed: MMLU, MMLU_OLMES, FullTextMMLU, MMLU_IDK
|
|
122
|
+
registry.add(benchmark)
|
|
123
|
+
# MMLU_COT is a generative (completion) task, not yet supported by the composed design.
|
|
124
124
|
register_lazy_task("eval_framework.tasks.benchmarks.mmlu.MMLU_COT", registry=registry)
|
|
125
125
|
|
|
126
126
|
|