eval-framework 0.10.4__tar.gz → 0.10.6__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.10.4 → eval_framework-0.10.6}/PKG-INFO +1 -1
- {eval_framework-0.10.4 → eval_framework-0.10.6}/pyproject.toml +3 -3
- {eval_framework-0.10.4 → eval_framework-0.10.6}/pyproject.toml.orig +3 -3
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/evaluation_generator.py +1 -17
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/aleph_alpha.py +19 -19
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/huggingface.py +9 -9
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/openai.py +14 -11
- eval_framework-0.10.6/src/eval_framework/metrics/efficiency/token_counters.py +38 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/response_generator.py +4 -4
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/shared/types.py +19 -11
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/base.py +43 -8
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/humaneval.py +6 -6
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/humaneval_ellamind.py +13 -21
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/task_names.py +2 -2
- {eval_framework-0.10.4 → eval_framework-0.10.6}/LICENSE +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/README.md +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/base_config.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/context/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/context/determined.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/context/eval.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/context/local.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/exceptions.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/drop_process_results.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/ifeval_impl/README.md +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/ifeval_impl/instructions.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/ifeval_impl/instructions_registry.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/ifeval_impl/instructions_util.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/external/ifeval_impl/utils.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/base.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/llm/models.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/logger.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/main.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/aggregators/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/aggregators/aggregators.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/base.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/accuracy_completion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/code_assertion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/code_execution_pass_at_one.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/concordance_index.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/csv_format.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/drop_completion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/exponential_similarity.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/f1.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/format_checker.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/grid_difference.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/ifeval.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/json_format.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/language_checker.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/length_control.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/math_minerva_completion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/math_reasoning_completion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/minerva_math_utils.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/multipl_e_assertion.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/placeholder_checker.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/repetition.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/rouge_1.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/rouge_2.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/rouge_geometric_mean.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/rouge_l.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/completion/text_counter.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/efficiency/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/efficiency/bytes_per_sequence_position.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/base.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/chatbot_style_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/coherence_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/comparison_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/conciseness_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/contains_names_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/format_correctness_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/instruction_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/language.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/long_context_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/models.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/refusal_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/sql_quality_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/graders/summary_world_knowledge_grader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_chatbot_style.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_coherence.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_completion_accuracy.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_conciseness.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_contains_names.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_format_correctness.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_instruction.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_mtbench_pair.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_mtbench_single.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_refusal.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_sql.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/llm_judge_world_knowledge.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/llm/utils.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/accuracy_loglikelihood.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/base.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/bits_per_byte.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/confidence_weighted_accuracy.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/dcs.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/probability_mass.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/metrics/loglikelihood/ternary.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/py.typed +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/result_processors/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/result_processors/base.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/result_processors/hf_uploader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/result_processors/result_processor.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/result_processors/wandb_uploader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/run.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/run_direct.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/suite.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/Dockerfile_codebench +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/arc.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/arc_de.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/arc_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/bigcodebench.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/copa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/csqa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/csqa_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/drop.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/global_mmlu.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/goldenswag.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/gpqa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/gpqa_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/gsm8k.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/gsm8k_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/hellaswag.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/hellaswag_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/hendrycks_math_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/hle_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/ifeval.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/math_reasoning.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/mbpp.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/mbpp_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/medqa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/mmlu.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/mmlu_pro.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/multipl_e.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/naturalqs_open.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/piqa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/piqa_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/sciq.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/simpleqa_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/siqa_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/social_iqa.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/squad.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/winogrande.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/winogrande_ellamind.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/dataset_revisions.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/eval_config.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/frozen-hf-dataset-revisions.json +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/hf-dataset-revisions.json +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/lazy.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/markdown_doc.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/registry.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/task.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/task_loader.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/task_style.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/utils.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/constants.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/file_ops.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/helpers.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/logging.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/packaging.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/utils/tqdm_handler.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/template_formatting/README.md +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/template_formatting/__init__.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/template_formatting/formatter.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/template_formatting/mistral_formatter.py +0 -0
- {eval_framework-0.10.4 → eval_framework-0.10.6}/src/template_formatting/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "eval-framework"
|
|
3
|
-
version = "0.10.
|
|
3
|
+
version = "0.10.6"
|
|
4
4
|
description = "Evaluation Framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12,<3.15"
|
|
@@ -78,12 +78,12 @@ eval_framework = "eval_framework.run:run"
|
|
|
78
78
|
|
|
79
79
|
[dependency-groups]
|
|
80
80
|
dev = [
|
|
81
|
-
"mypy>=2.3.
|
|
81
|
+
"mypy>=2.3.1,<3",
|
|
82
82
|
"pytest>=9.1.1,<10",
|
|
83
83
|
"pytest-mock>=3.15.1",
|
|
84
84
|
"pytest-xdist>=3.8.0,<4",
|
|
85
85
|
"pytest-sugar>1.1,<2",
|
|
86
|
-
"types-pyyaml>=6.0.12.
|
|
86
|
+
"types-pyyaml>=6.0.12.20260815,<7",
|
|
87
87
|
"types-python-dateutil>=2.9.0.20260807,<3",
|
|
88
88
|
"types-requests>=2.33.0.20260712,<3",
|
|
89
89
|
"plotly>=6.9.0,<7",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "eval-framework"
|
|
3
|
-
version = "0.10.
|
|
3
|
+
version = "0.10.6"
|
|
4
4
|
description = "Evaluation Framework"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -84,12 +84,12 @@ eval_framework = "eval_framework.run:run"
|
|
|
84
84
|
|
|
85
85
|
[dependency-groups]
|
|
86
86
|
dev = [
|
|
87
|
-
"mypy>=2.3.
|
|
87
|
+
"mypy>=2.3.1,<3",
|
|
88
88
|
"pytest>=9.1.1,<10",
|
|
89
89
|
"pytest-mock>=3.15.1",
|
|
90
90
|
"pytest-xdist>=3.8.0,<4",
|
|
91
91
|
"pytest-sugar>1.1,<2",
|
|
92
|
-
"types-pyyaml>=6.0.12.
|
|
92
|
+
"types-pyyaml>=6.0.12.20260815,<7",
|
|
93
93
|
"types-python-dateutil>=2.9.0.20260807,<3",
|
|
94
94
|
"types-requests>=2.33.0.20260712,<3",
|
|
95
95
|
"plotly>=6.9.0,<7",
|
|
@@ -7,16 +7,9 @@ import wandb
|
|
|
7
7
|
from tqdm import tqdm
|
|
8
8
|
|
|
9
9
|
from eval_framework.metrics.base import BaseMetric
|
|
10
|
-
from eval_framework.metrics.efficiency.bytes_per_sequence_position import (
|
|
11
|
-
BytesCompletion,
|
|
12
|
-
BytesLoglikelihood,
|
|
13
|
-
SequencePositionsCompletion,
|
|
14
|
-
SequencePositionsLoglikelihood,
|
|
15
|
-
)
|
|
16
10
|
from eval_framework.metrics.llm.base import BaseLLMJudgeMetric
|
|
17
11
|
from eval_framework.result_processors.base import Result, ResultProcessor
|
|
18
12
|
from eval_framework.shared.types import Completion, Loglikelihood
|
|
19
|
-
from eval_framework.tasks.base import ResponseType
|
|
20
13
|
from eval_framework.tasks.eval_config import EvalConfig
|
|
21
14
|
from eval_framework.tasks.registry import registry
|
|
22
15
|
from eval_framework.utils.constants import RED, RESET
|
|
@@ -37,16 +30,7 @@ class EvaluationGenerator:
|
|
|
37
30
|
self.save_intermediate_results = config.save_intermediate_results
|
|
38
31
|
|
|
39
32
|
eval_ = registry()[config.task_name]
|
|
40
|
-
|
|
41
|
-
task_metrics = eval_.metrics()
|
|
42
|
-
|
|
43
|
-
if response_type == ResponseType.COMPLETION:
|
|
44
|
-
self.metrics = task_metrics + [BytesCompletion, SequencePositionsCompletion]
|
|
45
|
-
elif response_type == ResponseType.LOGLIKELIHOODS:
|
|
46
|
-
self.metrics = task_metrics + [BytesLoglikelihood, SequencePositionsLoglikelihood]
|
|
47
|
-
else:
|
|
48
|
-
raise NotImplementedError
|
|
49
|
-
|
|
33
|
+
self.metrics = eval_.metrics()
|
|
50
34
|
self.task_name = eval_.display_name()
|
|
51
35
|
|
|
52
36
|
def _run_metric_calculators(self, responses: list[Completion | Loglikelihood]) -> list[Result]:
|
|
@@ -165,33 +165,33 @@ class AlephAlphaAPIModel(BaseLLM):
|
|
|
165
165
|
if isinstance(response, Error):
|
|
166
166
|
return RawCompletion(
|
|
167
167
|
prompt=prompt,
|
|
168
|
-
|
|
168
|
+
prompt_num_tokens=None,
|
|
169
169
|
completion="",
|
|
170
|
-
|
|
170
|
+
completion_num_tokens=0,
|
|
171
171
|
raw_completion_error=response,
|
|
172
172
|
)
|
|
173
173
|
|
|
174
174
|
assert len(response.completions) == 1
|
|
175
175
|
completion = response.completions[0].completion or ""
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
prompt_num_tokens: int | None = None
|
|
177
|
+
completion_num_tokens: int | None = None
|
|
178
178
|
|
|
179
179
|
# Support workaround in api-worker-transformer's scaling generator to return the correct number of tokens.
|
|
180
180
|
# These are part of the completion string; those in CompletionResponse are invalid in this case.
|
|
181
181
|
m = re.match(r"\uf8c9(\d+),(\d+)\uf8c9(.*)", completion, re.DOTALL)
|
|
182
182
|
if m is not None:
|
|
183
183
|
num_input_tokens, num_completion_tokens, completion = m.groups()
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
prompt_num_tokens = int(num_input_tokens)
|
|
185
|
+
completion_num_tokens = int(num_completion_tokens)
|
|
186
186
|
else:
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
prompt_num_tokens = response.num_tokens_prompt_total if response else None
|
|
188
|
+
completion_num_tokens = response.num_tokens_generated if response else None
|
|
189
189
|
|
|
190
190
|
return RawCompletion(
|
|
191
191
|
prompt=prompt,
|
|
192
|
-
|
|
192
|
+
prompt_num_tokens=prompt_num_tokens,
|
|
193
193
|
completion=completion,
|
|
194
|
-
|
|
194
|
+
completion_num_tokens=completion_num_tokens,
|
|
195
195
|
)
|
|
196
196
|
|
|
197
197
|
def generate_from_messages(
|
|
@@ -254,8 +254,8 @@ class AlephAlphaAPIModel(BaseLLM):
|
|
|
254
254
|
results: list[RawLoglikelihood] = []
|
|
255
255
|
for sample_idx, (sample, prompt) in enumerate(zip(samples, prompts, strict=True)):
|
|
256
256
|
choices_log_probs: dict[str, float] = {}
|
|
257
|
-
|
|
258
|
-
|
|
257
|
+
choices_num_tokens: dict[str, int] = {}
|
|
258
|
+
prompt_num_tokens: int | None = 0
|
|
259
259
|
number_of_initial_choices_tokens: int | None = None
|
|
260
260
|
error: Error | None = None
|
|
261
261
|
|
|
@@ -267,9 +267,9 @@ class AlephAlphaAPIModel(BaseLLM):
|
|
|
267
267
|
|
|
268
268
|
if isinstance(response, Error):
|
|
269
269
|
error = response
|
|
270
|
-
|
|
270
|
+
prompt_num_tokens = None
|
|
271
271
|
choices_log_probs = {}
|
|
272
|
-
|
|
272
|
+
choices_num_tokens = {}
|
|
273
273
|
else:
|
|
274
274
|
try:
|
|
275
275
|
logprob, choice_token_count = self._extract_choice_logprob_from_completion(
|
|
@@ -278,7 +278,7 @@ class AlephAlphaAPIModel(BaseLLM):
|
|
|
278
278
|
response=response,
|
|
279
279
|
)
|
|
280
280
|
choices_log_probs[choice] = logprob
|
|
281
|
-
|
|
281
|
+
choices_num_tokens[choice] = choice_token_count
|
|
282
282
|
if number_of_initial_choices_tokens is None:
|
|
283
283
|
number_of_initial_choices_tokens = choice_token_count
|
|
284
284
|
|
|
@@ -294,16 +294,16 @@ class AlephAlphaAPIModel(BaseLLM):
|
|
|
294
294
|
message=str(exc),
|
|
295
295
|
traceback=traceback.format_exc(),
|
|
296
296
|
)
|
|
297
|
-
|
|
297
|
+
prompt_num_tokens = None
|
|
298
298
|
choices_log_probs = {}
|
|
299
|
-
|
|
299
|
+
choices_num_tokens = {}
|
|
300
300
|
|
|
301
301
|
results.append(
|
|
302
302
|
RawLoglikelihood(
|
|
303
303
|
prompt=prompt,
|
|
304
|
-
|
|
304
|
+
prompt_num_tokens=prompt_num_tokens,
|
|
305
305
|
loglikelihoods=choices_log_probs,
|
|
306
|
-
|
|
306
|
+
loglikelihoods_num_tokens=choices_num_tokens,
|
|
307
307
|
raw_loglikelihood_error=error,
|
|
308
308
|
)
|
|
309
309
|
)
|
|
@@ -196,9 +196,9 @@ class BaseHFLLM(BaseLLM):
|
|
|
196
196
|
raw_completions.append(
|
|
197
197
|
RawCompletion(
|
|
198
198
|
prompt=prompt,
|
|
199
|
-
|
|
199
|
+
prompt_num_tokens=prompt_token_count,
|
|
200
200
|
completion="",
|
|
201
|
-
|
|
201
|
+
completion_num_tokens=0,
|
|
202
202
|
raw_completion_error=Error(
|
|
203
203
|
error_class=PromptTooLongException.__name__,
|
|
204
204
|
message="Prompt exceeded context size.",
|
|
@@ -225,12 +225,12 @@ class BaseHFLLM(BaseLLM):
|
|
|
225
225
|
raw_completions.append(
|
|
226
226
|
RawCompletion(
|
|
227
227
|
prompt=prompt,
|
|
228
|
-
|
|
228
|
+
prompt_num_tokens=prompt_token_count,
|
|
229
229
|
concat_compression=ConcatCompression.calculate(
|
|
230
230
|
single_messages, count_tokens=self.count_tokens, completion=completion
|
|
231
231
|
),
|
|
232
232
|
completion=completion,
|
|
233
|
-
|
|
233
|
+
completion_num_tokens=completion_token_count,
|
|
234
234
|
)
|
|
235
235
|
)
|
|
236
236
|
return raw_completions
|
|
@@ -251,7 +251,7 @@ class BaseHFLLM(BaseLLM):
|
|
|
251
251
|
# format
|
|
252
252
|
prompt = self._formatter.format(sample.messages, output_mode="string")
|
|
253
253
|
choices_log_probs: dict[str, float] = {}
|
|
254
|
-
|
|
254
|
+
choices_log_probs_num_tokens: dict[str, float] = {}
|
|
255
255
|
error: Error | None = None
|
|
256
256
|
|
|
257
257
|
for choice in sample.possible_completions or []:
|
|
@@ -266,7 +266,7 @@ class BaseHFLLM(BaseLLM):
|
|
|
266
266
|
if raise_errors():
|
|
267
267
|
raise PromptTooLongException("Prompt exceeded context size.")
|
|
268
268
|
choices_log_probs = {}
|
|
269
|
-
|
|
269
|
+
choices_log_probs_num_tokens = {}
|
|
270
270
|
error = Error(
|
|
271
271
|
error_class=PromptTooLongException.__name__,
|
|
272
272
|
message="Prompt and choice exceeded context size.",
|
|
@@ -278,17 +278,17 @@ class BaseHFLLM(BaseLLM):
|
|
|
278
278
|
sum_log_probs = self._model_log_probs(prompt_and_choice, num_choice_tokens)
|
|
279
279
|
|
|
280
280
|
choices_log_probs.update({choice: sum_log_probs})
|
|
281
|
-
|
|
281
|
+
choices_log_probs_num_tokens.update({choice: num_choice_tokens})
|
|
282
282
|
|
|
283
283
|
results.append(
|
|
284
284
|
RawLoglikelihood(
|
|
285
285
|
prompt=prompt,
|
|
286
|
-
|
|
286
|
+
prompt_num_tokens=len(self.tokenizer.encode(prompt, add_special_tokens=False)),
|
|
287
287
|
concat_compression=ConcatCompression.calculate(
|
|
288
288
|
sample.messages, count_tokens=self.count_tokens, choices=sample.possible_completions
|
|
289
289
|
),
|
|
290
290
|
loglikelihoods=choices_log_probs,
|
|
291
|
-
|
|
291
|
+
loglikelihoods_num_tokens=choices_log_probs_num_tokens,
|
|
292
292
|
raw_loglikelihood_error=error,
|
|
293
293
|
)
|
|
294
294
|
)
|
|
@@ -186,7 +186,7 @@ class OpenAIModel(BaseLLM):
|
|
|
186
186
|
completion_tokens = getattr(usage, "completion_tokens", None) if usage is not None else None
|
|
187
187
|
return RawCompletion(
|
|
188
188
|
prompt=prompt,
|
|
189
|
-
|
|
189
|
+
prompt_num_tokens=(
|
|
190
190
|
prompt_tokens
|
|
191
191
|
if prompt_tokens is not None
|
|
192
192
|
else (self._count_tokens(prompt) if self._encoder is not None else None)
|
|
@@ -201,7 +201,7 @@ class OpenAIModel(BaseLLM):
|
|
|
201
201
|
else None
|
|
202
202
|
),
|
|
203
203
|
completion=completion,
|
|
204
|
-
|
|
204
|
+
completion_num_tokens=(
|
|
205
205
|
completion_tokens
|
|
206
206
|
if completion_tokens is not None
|
|
207
207
|
else (self._count_tokens(completion) if self._encoder is not None else None)
|
|
@@ -223,10 +223,12 @@ class OpenAIModel(BaseLLM):
|
|
|
223
223
|
prompt = "\n".join([f"{m.get('role', '')}: {m.get('content', '')}" for m in chat_messages])
|
|
224
224
|
prompt_tokens = getattr(chat_response.usage, "prompt_tokens", None)
|
|
225
225
|
completion_tokens = getattr(chat_response.usage, "completion_tokens", None)
|
|
226
|
+
completion_details = getattr(chat_response.usage, "completion_tokens_details", None)
|
|
227
|
+
reasoning_tokens = getattr(completion_details, "reasoning_tokens", None)
|
|
226
228
|
completion = chat_response.choices[0].message.content or ""
|
|
227
229
|
return RawCompletion(
|
|
228
230
|
prompt=prompt,
|
|
229
|
-
|
|
231
|
+
prompt_num_tokens=prompt_tokens,
|
|
230
232
|
concat_compression=(
|
|
231
233
|
ConcatCompression.calculate(
|
|
232
234
|
single_messages,
|
|
@@ -237,11 +239,12 @@ class OpenAIModel(BaseLLM):
|
|
|
237
239
|
else None
|
|
238
240
|
),
|
|
239
241
|
completion=completion,
|
|
240
|
-
|
|
242
|
+
completion_num_tokens=(
|
|
241
243
|
completion_tokens
|
|
242
244
|
if completion_tokens is not None
|
|
243
245
|
else (self._count_tokens(completion) if self._encoder is not None else None)
|
|
244
246
|
),
|
|
247
|
+
reasoning_num_tokens=reasoning_tokens,
|
|
245
248
|
)
|
|
246
249
|
|
|
247
250
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
|
@@ -276,8 +279,8 @@ class OpenAIModel(BaseLLM):
|
|
|
276
279
|
for sample in samples:
|
|
277
280
|
prompt = self._formatter.format(sample.messages, output_mode="string") if sample.messages else ""
|
|
278
281
|
choices_log_probs: dict[str, float] = {}
|
|
279
|
-
|
|
280
|
-
|
|
282
|
+
choices_num_tokens: dict[str, int] = {}
|
|
283
|
+
prompt_num_tokens: int | None = self._count_tokens(prompt)
|
|
281
284
|
error: Error | None = None
|
|
282
285
|
|
|
283
286
|
for choice in sample.possible_completions or []:
|
|
@@ -317,20 +320,20 @@ class OpenAIModel(BaseLLM):
|
|
|
317
320
|
|
|
318
321
|
# Sum logprobs for the completion portion
|
|
319
322
|
choices_log_probs[choice] = sum(all_logprobs[len(prompt_tokens) :])
|
|
320
|
-
|
|
323
|
+
choices_num_tokens[choice] = len(completion_tokens)
|
|
321
324
|
|
|
322
325
|
except Exception as e:
|
|
323
326
|
error = Error(error_class=e.__class__.__name__, message=str(e), traceback=traceback.format_exc())
|
|
324
|
-
|
|
327
|
+
prompt_num_tokens = None
|
|
325
328
|
choices_log_probs = {}
|
|
326
|
-
|
|
329
|
+
choices_num_tokens = {}
|
|
327
330
|
|
|
328
331
|
results.append(
|
|
329
332
|
RawLoglikelihood(
|
|
330
333
|
prompt=prompt,
|
|
331
|
-
|
|
334
|
+
prompt_num_tokens=prompt_num_tokens,
|
|
332
335
|
loglikelihoods=choices_log_probs,
|
|
333
|
-
|
|
336
|
+
loglikelihoods_num_tokens=choices_num_tokens,
|
|
334
337
|
raw_loglikelihood_error=error,
|
|
335
338
|
)
|
|
336
339
|
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from eval_framework.metrics.base import BaseMetric, MetricResult
|
|
2
|
+
from eval_framework.shared.types import Completion
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TokenCounts(BaseMetric[Completion]):
|
|
6
|
+
"""Number of tokens the model generated for the completion, and how many of
|
|
7
|
+
those were spent on reasoning (thinking).
|
|
8
|
+
|
|
9
|
+
Reads the token counts backends already attach to the response, so no extra
|
|
10
|
+
tokenisation is performed. Each value independently falls back to None when
|
|
11
|
+
the backend did not report that particular count or when the sample errored.
|
|
12
|
+
Reasoning counts are only exposed by some backends (e.g. OpenAI reasoning
|
|
13
|
+
models via `usage.completion_tokens_details.reasoning_tokens`, or vLLM
|
|
14
|
+
started with `--reasoning-parser`); non-reasoning models and backends that
|
|
15
|
+
do not surface a per-response count return None for that key.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
NAME = "TokenCounts"
|
|
19
|
+
KEYS = ["Completion", "Reasoning"]
|
|
20
|
+
|
|
21
|
+
def calculate(self, response: Completion) -> list[MetricResult]:
|
|
22
|
+
if response.error:
|
|
23
|
+
values: dict[str, float | None] = {"Completion": None, "Reasoning": None}
|
|
24
|
+
else:
|
|
25
|
+
values = {
|
|
26
|
+
"Completion": response.raw_completion_num_tokens,
|
|
27
|
+
"Reasoning": response.raw_completion_reasoning_num_tokens,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return [
|
|
31
|
+
MetricResult(
|
|
32
|
+
metric_name=f"{self.NAME}/{key}",
|
|
33
|
+
value=value,
|
|
34
|
+
higher_is_better=False,
|
|
35
|
+
error=response.error,
|
|
36
|
+
)
|
|
37
|
+
for key, value in values.items()
|
|
38
|
+
]
|
|
@@ -110,9 +110,9 @@ class ResponseGenerator:
|
|
|
110
110
|
raw_loglikelihoods = [
|
|
111
111
|
RawLoglikelihood(
|
|
112
112
|
prompt="",
|
|
113
|
-
|
|
113
|
+
prompt_num_tokens=0,
|
|
114
114
|
loglikelihoods={},
|
|
115
|
-
|
|
115
|
+
loglikelihoods_num_tokens={},
|
|
116
116
|
raw_loglikelihood_error=Error(
|
|
117
117
|
error_class=e.__class__.__name__,
|
|
118
118
|
message=str(e),
|
|
@@ -132,10 +132,10 @@ class ResponseGenerator:
|
|
|
132
132
|
subject=sample.subject,
|
|
133
133
|
ground_truth=sample.ground_truth,
|
|
134
134
|
prompt=raw_loglikelihood.prompt,
|
|
135
|
-
|
|
135
|
+
prompt_num_tokens=raw_loglikelihood.prompt_num_tokens,
|
|
136
136
|
concat_compression=raw_loglikelihood.concat_compression,
|
|
137
137
|
loglikelihoods=raw_loglikelihood.loglikelihoods,
|
|
138
|
-
|
|
138
|
+
loglikelihoods_num_tokens=raw_loglikelihood.loglikelihoods_num_tokens,
|
|
139
139
|
error=raw_loglikelihood.raw_loglikelihood_error,
|
|
140
140
|
)
|
|
141
141
|
)
|
|
@@ -78,21 +78,25 @@ class PromptTooLongException(Exception):
|
|
|
78
78
|
class BaseCompletion(BaseModel):
|
|
79
79
|
model_config = ConfigDict(extra="forbid")
|
|
80
80
|
prompt: Annotated[str, "prompt as passed to the llm"]
|
|
81
|
-
|
|
81
|
+
prompt_num_tokens: Annotated[
|
|
82
82
|
int | None,
|
|
83
|
-
"number of
|
|
84
|
-
"or None if the info is not available",
|
|
83
|
+
"number of tokens in the prompt, or None if the backend did not report it",
|
|
85
84
|
]
|
|
86
85
|
completion: Annotated[str, "completion as generated by the llm"]
|
|
87
86
|
concat_compression: Annotated[ConcatCompression | None, "Compression info for the concat formatter."] = None
|
|
88
87
|
|
|
89
88
|
|
|
90
89
|
class RawCompletion(BaseCompletion):
|
|
91
|
-
|
|
90
|
+
completion_num_tokens: Annotated[
|
|
92
91
|
int | None,
|
|
93
|
-
"number of
|
|
94
|
-
"(e.g. token count) or None if the info is not available",
|
|
92
|
+
"number of tokens the model generated for the completion, or None if the backend did not report it",
|
|
95
93
|
]
|
|
94
|
+
reasoning_num_tokens: Annotated[
|
|
95
|
+
int | None,
|
|
96
|
+
"portion of completion_num_tokens that the model spent on reasoning (thinking), "
|
|
97
|
+
"or None if the backend did not report it. Non-reasoning models and backends that "
|
|
98
|
+
"do not surface a reasoning-token count leave this None.",
|
|
99
|
+
] = None
|
|
96
100
|
raw_completion_error: Error | None = None
|
|
97
101
|
|
|
98
102
|
|
|
@@ -102,11 +106,15 @@ class Completion(BaseCompletion):
|
|
|
102
106
|
ground_truth: str | None | list[str]
|
|
103
107
|
messages: list[Message] | None # needed for LLM as a judge
|
|
104
108
|
raw_completion: Annotated[str, "raw completion as generated by the llm"]
|
|
105
|
-
|
|
109
|
+
raw_completion_num_tokens: Annotated[
|
|
106
110
|
int | None,
|
|
107
|
-
"number of
|
|
108
|
-
"if the info is not available",
|
|
111
|
+
"number of tokens the model generated for the raw completion, or None if the backend did not report it",
|
|
109
112
|
]
|
|
113
|
+
raw_completion_reasoning_num_tokens: Annotated[
|
|
114
|
+
int | None,
|
|
115
|
+
"portion of raw_completion_num_tokens that the model spent on reasoning, or None if the "
|
|
116
|
+
"backend did not report it",
|
|
117
|
+
] = None
|
|
110
118
|
context: list[BaseMetricContext] | BaseMetricContext | None = None
|
|
111
119
|
error: Error | None = None
|
|
112
120
|
|
|
@@ -183,9 +191,9 @@ class Completion(BaseCompletion):
|
|
|
183
191
|
class BaseLoglikelihood(BaseModel):
|
|
184
192
|
model_config = ConfigDict(extra="forbid")
|
|
185
193
|
prompt: str
|
|
186
|
-
|
|
194
|
+
prompt_num_tokens: int | None
|
|
187
195
|
loglikelihoods: dict[str, float]
|
|
188
|
-
|
|
196
|
+
loglikelihoods_num_tokens: dict[str, int] # Is empty if the model does not report per-choice token counts
|
|
189
197
|
concat_compression: Annotated[ConcatCompression | None, "Compression info for the concat formatter"] = None
|
|
190
198
|
|
|
191
199
|
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
import random
|
|
4
4
|
import traceback
|
|
5
|
+
import typing
|
|
5
6
|
from collections.abc import Iterable, Sequence
|
|
6
7
|
from enum import Enum
|
|
7
8
|
from pathlib import Path
|
|
@@ -10,6 +11,13 @@ from typing import TYPE_CHECKING, Any, Self, TypeVar
|
|
|
10
11
|
import iso639
|
|
11
12
|
from datasets import DatasetDict, DownloadConfig, load_dataset
|
|
12
13
|
|
|
14
|
+
from eval_framework.metrics.efficiency.bytes_per_sequence_position import (
|
|
15
|
+
BytesCompletion,
|
|
16
|
+
BytesLoglikelihood,
|
|
17
|
+
SequencePositionsCompletion,
|
|
18
|
+
SequencePositionsLoglikelihood,
|
|
19
|
+
)
|
|
20
|
+
from eval_framework.metrics.efficiency.token_counters import TokenCounts
|
|
13
21
|
from eval_framework.shared.types import BaseMetricContext, Completion, Error, RawCompletion
|
|
14
22
|
from eval_framework.tasks.dataset_revisions import pinned_revision
|
|
15
23
|
from eval_framework.tasks.markdown_doc import markdown_doc as render_markdown_doc
|
|
@@ -340,7 +348,7 @@ class BaseTask[SubjectType](Task):
|
|
|
340
348
|
"sample_split": self.SAMPLE_SPLIT,
|
|
341
349
|
"fewshot_split": self.FEWSHOT_SPLIT,
|
|
342
350
|
"response_type": self.get_response_type().value,
|
|
343
|
-
"metrics": [m.NAME for m in self.
|
|
351
|
+
"metrics": [m.NAME for m in self._get_task_specific_metrics()],
|
|
344
352
|
"subjects": [str(s) for s in self.SUBJECTS],
|
|
345
353
|
}
|
|
346
354
|
if hasattr(self, "TASK_STYLER"):
|
|
@@ -377,9 +385,9 @@ class BaseTask[SubjectType](Task):
|
|
|
377
385
|
raw_completions = [
|
|
378
386
|
RawCompletion(
|
|
379
387
|
prompt="",
|
|
380
|
-
|
|
388
|
+
prompt_num_tokens=0,
|
|
381
389
|
completion="",
|
|
382
|
-
|
|
390
|
+
completion_num_tokens=0,
|
|
383
391
|
raw_completion_error=Error(
|
|
384
392
|
error_class=e.__class__.__name__, message=str(e), traceback=traceback.format_exc()
|
|
385
393
|
),
|
|
@@ -414,12 +422,13 @@ class BaseTask[SubjectType](Task):
|
|
|
414
422
|
subject=sample.subject,
|
|
415
423
|
ground_truth=sample.ground_truth,
|
|
416
424
|
prompt=raw_completion.prompt,
|
|
417
|
-
|
|
425
|
+
prompt_num_tokens=raw_completion.prompt_num_tokens,
|
|
418
426
|
concat_compression=raw_completion.concat_compression,
|
|
419
427
|
messages=messages,
|
|
420
428
|
completion=completion,
|
|
421
429
|
raw_completion=raw_completion.completion,
|
|
422
|
-
|
|
430
|
+
raw_completion_num_tokens=raw_completion.completion_num_tokens,
|
|
431
|
+
raw_completion_reasoning_num_tokens=raw_completion.reasoning_num_tokens,
|
|
423
432
|
context=sample.context,
|
|
424
433
|
error=raw_completion.raw_completion_error or error,
|
|
425
434
|
)
|
|
@@ -433,12 +442,38 @@ class BaseTask[SubjectType](Task):
|
|
|
433
442
|
return cls.TASK_STYLER.response_type
|
|
434
443
|
return cls.RESPONSE_TYPE
|
|
435
444
|
|
|
445
|
+
@classmethod
|
|
446
|
+
def _get_task_specific_metrics(cls) -> list[type["BaseMetric"]]:
|
|
447
|
+
if hasattr(cls, "TASK_STYLER"):
|
|
448
|
+
task_metrics = cls.TASK_STYLER.metrics
|
|
449
|
+
else:
|
|
450
|
+
task_metrics = cls.METRICS
|
|
451
|
+
return task_metrics
|
|
452
|
+
|
|
453
|
+
@classmethod
|
|
454
|
+
def _get_response_type_specific_metrics(cls) -> list[type["BaseMetric"]]:
|
|
455
|
+
metrics: list[type[BaseMetric]]
|
|
456
|
+
match cls.get_response_type():
|
|
457
|
+
case ResponseType.COMPLETION:
|
|
458
|
+
metrics = [
|
|
459
|
+
BytesCompletion,
|
|
460
|
+
SequencePositionsCompletion,
|
|
461
|
+
TokenCounts,
|
|
462
|
+
]
|
|
463
|
+
case ResponseType.LOGLIKELIHOODS:
|
|
464
|
+
metrics = [BytesLoglikelihood, SequencePositionsLoglikelihood]
|
|
465
|
+
case _:
|
|
466
|
+
typing.assert_never(cls.get_response_type())
|
|
467
|
+
|
|
468
|
+
return metrics
|
|
469
|
+
|
|
436
470
|
@classmethod
|
|
437
471
|
def get_metrics(cls) -> list[type["BaseMetric"]]:
|
|
438
472
|
"""Return the metrics of the task (or the styler if it exists)."""
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
473
|
+
task_metrics = cls._get_task_specific_metrics()
|
|
474
|
+
response_type_metrics = cls._get_response_type_specific_metrics()
|
|
475
|
+
|
|
476
|
+
return task_metrics + response_type_metrics
|
|
442
477
|
|
|
443
478
|
@classproperty
|
|
444
479
|
def RESPONSE_TYPE(cls) -> ResponseType:
|
{eval_framework-0.10.4 → eval_framework-0.10.6}/src/eval_framework/tasks/benchmarks/humaneval.py
RENAMED
|
@@ -114,7 +114,7 @@ class HumanEvalBPB_V2(HumanEvalBPB):
|
|
|
114
114
|
NAME = "Human Eval BPB V2"
|
|
115
115
|
|
|
116
116
|
def _get_ground_truth(self, item: dict[str, Any]) -> str | None:
|
|
117
|
-
return item["canonical_solution"]
|
|
117
|
+
return item["canonical_solution"].rstrip() + "\n```"
|
|
118
118
|
|
|
119
119
|
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
120
120
|
return "```python\n" + item["prompt"].rstrip() + "\n"
|
|
@@ -141,10 +141,10 @@ class HumanEval_OLMES(HumanEval):
|
|
|
141
141
|
self.max_tokens = 1024
|
|
142
142
|
|
|
143
143
|
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
144
|
-
return "```python\n" + item["prompt"]
|
|
144
|
+
return "```python\n" + item["prompt"]
|
|
145
145
|
|
|
146
146
|
def _get_fewshot_target_text(self, item: dict[str, Any]) -> str:
|
|
147
|
-
return
|
|
147
|
+
return item["canonical_solution"] + "```"
|
|
148
148
|
|
|
149
149
|
|
|
150
150
|
class HumanEvalInstruct(HumanEval):
|
|
@@ -168,11 +168,11 @@ class HumanEvalInstruct(HumanEval):
|
|
|
168
168
|
return self.CUE_PREFIX + item["prompt"].lstrip()
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
class
|
|
172
|
-
NAME = "Human Eval
|
|
171
|
+
class HumanEval_OLMES_V2(HumanEval_OLMES):
|
|
172
|
+
NAME = "Human Eval Olmes v2"
|
|
173
173
|
|
|
174
174
|
def _get_instruction_text(self, item: dict[str, Any]) -> str:
|
|
175
175
|
return "```python\n" + item["prompt"].rstrip() + "\n"
|
|
176
176
|
|
|
177
177
|
def _get_fewshot_target_text(self, item: dict[str, Any]) -> str:
|
|
178
|
-
return item["canonical_solution"].
|
|
178
|
+
return item["canonical_solution"].rstrip() + "\n```"
|