slm-eval 0.0.1__py3-none-any.whl
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.
- slm_eval/__init__.py +29 -0
- slm_eval/__main__.py +14 -0
- slm_eval/_cli/__init__.py +8 -0
- slm_eval/_cli/harness.py +60 -0
- slm_eval/_cli/ls.py +81 -0
- slm_eval/_cli/run.py +518 -0
- slm_eval/_cli/subcommand.py +19 -0
- slm_eval/_cli/utils.py +209 -0
- slm_eval/_cli/validate.py +112 -0
- slm_eval/api/__init__.py +0 -0
- slm_eval/api/filter.py +56 -0
- slm_eval/api/group.py +407 -0
- slm_eval/api/instance.py +38 -0
- slm_eval/api/metrics.py +695 -0
- slm_eval/api/model.py +571 -0
- slm_eval/api/registry.py +884 -0
- slm_eval/api/samplers.py +144 -0
- slm_eval/api/task.py +1808 -0
- slm_eval/api/utils.py +100 -0
- slm_eval/caching/__init__.py +0 -0
- slm_eval/caching/cache.py +88 -0
- slm_eval/config/__init__.py +6 -0
- slm_eval/config/evaluate_config.py +505 -0
- slm_eval/config/group.py +123 -0
- slm_eval/config/task.py +218 -0
- slm_eval/decontamination/__init__.py +0 -0
- slm_eval/decontamination/archiver.py +174 -0
- slm_eval/decontamination/decontaminate.py +166 -0
- slm_eval/decontamination/janitor.py +329 -0
- slm_eval/defaults.py +51 -0
- slm_eval/eval_avg.py +228 -0
- slm_eval/evaluator.py +714 -0
- slm_eval/evaluator_utils.py +540 -0
- slm_eval/filters/__init__.py +33 -0
- slm_eval/filters/custom.py +17 -0
- slm_eval/filters/decontamination.py +25 -0
- slm_eval/filters/extraction.py +247 -0
- slm_eval/filters/selection.py +61 -0
- slm_eval/filters/transformation.py +123 -0
- slm_eval/int_index.py +330 -0
- slm_eval/loggers/__init__.py +3 -0
- slm_eval/loggers/evaluation_tracker.py +586 -0
- slm_eval/loggers/trackio_logger.py +200 -0
- slm_eval/loggers/utils.py +172 -0
- slm_eval/loggers/wandb_logger.py +360 -0
- slm_eval/models/__init__.py +83 -0
- slm_eval/models/_onnx_base.py +311 -0
- slm_eval/models/anthropic_llms.py +385 -0
- slm_eval/models/api_models.py +880 -0
- slm_eval/models/dummy.py +67 -0
- slm_eval/models/gguf.py +307 -0
- slm_eval/models/hf_audiolm.py +301 -0
- slm_eval/models/hf_steered.py +280 -0
- slm_eval/models/hf_vlms.py +750 -0
- slm_eval/models/huggingface.py +1782 -0
- slm_eval/models/ibm_watsonx_ai.py +477 -0
- slm_eval/models/litellm_llms.py +157 -0
- slm_eval/models/mamba_lm.py +164 -0
- slm_eval/models/megatron_lm.py +1350 -0
- slm_eval/models/mistral3.py +96 -0
- slm_eval/models/nemo_lm.py +548 -0
- slm_eval/models/neuron_optimum.py +685 -0
- slm_eval/models/onnxruntime_genai.py +151 -0
- slm_eval/models/onnxruntime_ort.py +303 -0
- slm_eval/models/openai_completions.py +402 -0
- slm_eval/models/optimum_habana.py +187 -0
- slm_eval/models/optimum_ipex.py +79 -0
- slm_eval/models/optimum_lm.py +88 -0
- slm_eval/models/sglang_causallms.py +533 -0
- slm_eval/models/sglang_generate_API.py +100 -0
- slm_eval/models/textsynth.py +172 -0
- slm_eval/models/trtllm_causallms.py +631 -0
- slm_eval/models/utils.py +987 -0
- slm_eval/models/utils_hf.py +129 -0
- slm_eval/models/vllm_causallms.py +824 -0
- slm_eval/models/vllm_vlms.py +318 -0
- slm_eval/models/winml.py +152 -0
- slm_eval/prompts/__init__.py +130 -0
- slm_eval/result_schema.py +217 -0
- slm_eval/tasks/README.md +32 -0
- slm_eval/tasks/__init__.py +177 -0
- slm_eval/tasks/__pycache__/__init__.cpython-312.pyc +0 -0
- slm_eval/tasks/__pycache__/_factory.cpython-312.pyc +0 -0
- slm_eval/tasks/__pycache__/_index.cpython-312.pyc +0 -0
- slm_eval/tasks/__pycache__/_yaml_loader.cpython-312.pyc +0 -0
- slm_eval/tasks/__pycache__/manager.cpython-312.pyc +0 -0
- slm_eval/tasks/_factory.py +285 -0
- slm_eval/tasks/_index.py +199 -0
- slm_eval/tasks/_yaml_loader.py +208 -0
- slm_eval/tasks/manager.py +367 -0
- slm_eval/tasks/slm/CONVENTIONS.md +136 -0
- slm_eval/tasks/slm/__init__.py +5 -0
- slm_eval/tasks/slm/__pycache__/__init__.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/__pycache__/_shared.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/_shared.py +67 -0
- slm_eval/tasks/slm/arc_challenge/README.md +112 -0
- slm_eval/tasks/slm/arc_challenge/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/arc_challenge/arc_challenge.yaml +42 -0
- slm_eval/tasks/slm/arc_challenge/utils.py +74 -0
- slm_eval/tasks/slm/arc_easy/README.md +116 -0
- slm_eval/tasks/slm/arc_easy/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/arc_easy/arc_easy.yaml +42 -0
- slm_eval/tasks/slm/arc_easy/utils.py +73 -0
- slm_eval/tasks/slm/arithmark_2/README.md +42 -0
- slm_eval/tasks/slm/arithmark_2/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/arithmark_2/arithmark_2.yaml +30 -0
- slm_eval/tasks/slm/arithmark_2/utils.py +56 -0
- slm_eval/tasks/slm/arithmark_3_0/README.md +83 -0
- slm_eval/tasks/slm/arithmark_3_0/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/arithmark_3_0/arithmark_3_0.yaml +27 -0
- slm_eval/tasks/slm/arithmark_3_0/utils.py +53 -0
- slm_eval/tasks/slm/bfcl_v4/README.md +179 -0
- slm_eval/tasks/slm/bfcl_v4/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4.yaml +43 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_irrelevance.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_multi_turn_base.yaml +50 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_multi_turn_long_context.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_multi_turn_miss_func.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_multi_turn_miss_param.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_multiple.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_parallel.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_parallel_multiple.yaml +49 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_simple_java.yaml +50 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_simple_javascript.yaml +50 -0
- slm_eval/tasks/slm/bfcl_v4/bfcl_v4_simple_python.yaml +48 -0
- slm_eval/tasks/slm/bfcl_v4/utils.py +713 -0
- slm_eval/tasks/slm/gpqa_diamond/README.md +120 -0
- slm_eval/tasks/slm/gpqa_diamond/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/gpqa_diamond/gpqa_diamond.yaml +37 -0
- slm_eval/tasks/slm/gpqa_diamond/utils.py +320 -0
- slm_eval/tasks/slm/hellaswag/README.md +104 -0
- slm_eval/tasks/slm/hellaswag/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/hellaswag/hellaswag.yaml +36 -0
- slm_eval/tasks/slm/hellaswag/utils.py +69 -0
- slm_eval/tasks/slm/int_index/README.md +82 -0
- slm_eval/tasks/slm/int_index/int_index.yaml +36 -0
- slm_eval/tasks/slm/math_500/README.md +79 -0
- slm_eval/tasks/slm/math_500/__pycache__/utils.cpython-312.pyc +0 -0
- slm_eval/tasks/slm/math_500/math_500.yaml +40 -0
- slm_eval/tasks/slm/math_500/utils.py +160 -0
- slm_eval/utils.py +927 -0
- slm_eval-0.0.1.dist-info/METADATA +328 -0
- slm_eval-0.0.1.dist-info/RECORD +149 -0
- slm_eval-0.0.1.dist-info/WHEEL +5 -0
- slm_eval-0.0.1.dist-info/entry_points.txt +3 -0
- slm_eval-0.0.1.dist-info/licenses/LICENSE.md +21 -0
- slm_eval-0.0.1.dist-info/licenses/LICENSE_NOTES.md +118 -0
- slm_eval-0.0.1.dist-info/licenses/NOTICE +56 -0
- slm_eval-0.0.1.dist-info/top_level.txt +1 -0
slm_eval/__init__.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import importlib.metadata
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
from importlib.util import find_spec
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
__version__ = importlib.metadata.version("slm_eval")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Enable high-performance transfers
|
|
11
|
+
os.environ.setdefault("HF_XET_HIGH_PERFORMANCE", "1") # huggingface_hub >= 0.32.0
|
|
12
|
+
if find_spec("hf_transfer") is not None:
|
|
13
|
+
os.environ.setdefault("HF_HUB_ENABLE_HF_TRANSFER", "1") # legacy hf_transfer
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Lazy-load .evaluator module to improve CLI startup
|
|
17
|
+
def __getattr__(name):
|
|
18
|
+
if name == "evaluate":
|
|
19
|
+
from .evaluator import evaluate
|
|
20
|
+
|
|
21
|
+
return evaluate
|
|
22
|
+
elif name == "simple_evaluate":
|
|
23
|
+
from .evaluator import simple_evaluate
|
|
24
|
+
|
|
25
|
+
return simple_evaluate
|
|
26
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
__all__ = ["evaluate", "simple_evaluate", "__version__"]
|
slm_eval/__main__.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from slm_eval._cli import HarnessCLI
|
|
2
|
+
from slm_eval.utils import setup_logging
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def cli_evaluate() -> None:
|
|
6
|
+
"""Main CLI entry point."""
|
|
7
|
+
setup_logging()
|
|
8
|
+
parser = HarnessCLI()
|
|
9
|
+
args = parser.parse_args()
|
|
10
|
+
parser.execute(args)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if __name__ == "__main__":
|
|
14
|
+
cli_evaluate()
|
slm_eval/_cli/harness.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import sys
|
|
3
|
+
import textwrap
|
|
4
|
+
|
|
5
|
+
from slm_eval._cli.ls import List
|
|
6
|
+
from slm_eval._cli.run import Run
|
|
7
|
+
from slm_eval._cli.validate import Validate
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HarnessCLI:
|
|
11
|
+
"""Main CLI parser that manages all subcommands."""
|
|
12
|
+
|
|
13
|
+
def __init__(self):
|
|
14
|
+
self._parser = argparse.ArgumentParser(
|
|
15
|
+
prog="slm-eval",
|
|
16
|
+
description="slm_eval: an evaluation suite for small language models",
|
|
17
|
+
epilog=textwrap.dedent("""
|
|
18
|
+
quick start:
|
|
19
|
+
# Basic evaluation
|
|
20
|
+
slm-eval run --model hf --model_args pretrained=gpt2 --tasks hellaswag
|
|
21
|
+
|
|
22
|
+
# List available tasks
|
|
23
|
+
slm-eval ls tasks
|
|
24
|
+
|
|
25
|
+
# Validate task configurations
|
|
26
|
+
slm-eval validate --tasks hellaswag,arc_easy
|
|
27
|
+
|
|
28
|
+
legacy compatibility:
|
|
29
|
+
The harness maintains backward compatibility with the original interface.
|
|
30
|
+
If no command is specified, 'run' is automatically inserted:
|
|
31
|
+
|
|
32
|
+
slm-eval --model hf --tasks hellaswag # Equivalent to 'slm-eval run --model hf --tasks hellaswag'
|
|
33
|
+
|
|
34
|
+
For documentation, visit: docs/interface.md
|
|
35
|
+
"""),
|
|
36
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
37
|
+
)
|
|
38
|
+
self._parser.set_defaults(func=lambda args: self._parser.print_help())
|
|
39
|
+
self._subparsers = self._parser.add_subparsers(
|
|
40
|
+
dest="command", help="Available commands", metavar="COMMAND"
|
|
41
|
+
)
|
|
42
|
+
Run.create(self._subparsers)
|
|
43
|
+
List.create(self._subparsers)
|
|
44
|
+
Validate.create(self._subparsers)
|
|
45
|
+
|
|
46
|
+
def parse_args(self) -> argparse.Namespace:
|
|
47
|
+
"""Parse arguments using the main parser."""
|
|
48
|
+
if len(sys.argv) > 2 and sys.argv[1] not in self._subparsers.choices:
|
|
49
|
+
# Backward compatibility: arguments provided but no valid subcommand - insert 'run'
|
|
50
|
+
# TODO: add warning
|
|
51
|
+
sys.argv.insert(1, "run")
|
|
52
|
+
elif len(sys.argv) == 2 and "run" in sys.argv:
|
|
53
|
+
# if only 'run' is specified, ensure it is treated as a subcommand
|
|
54
|
+
self._subparsers.choices["run"].print_help()
|
|
55
|
+
sys.exit(0)
|
|
56
|
+
return self._parser.parse_args()
|
|
57
|
+
|
|
58
|
+
def execute(self, args: argparse.Namespace) -> None:
|
|
59
|
+
"""Main execution method that handles subcommands and legacy support."""
|
|
60
|
+
args.func(args)
|
slm_eval/_cli/ls.py
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import textwrap
|
|
3
|
+
|
|
4
|
+
from slm_eval._cli.subcommand import SubCommand
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class List(SubCommand):
|
|
8
|
+
"""Command for listing available tasks."""
|
|
9
|
+
|
|
10
|
+
def __init__(self, subparsers: argparse._SubParsersAction, *args, **kwargs):
|
|
11
|
+
# Create and configure the parser
|
|
12
|
+
super().__init__(*args, **kwargs)
|
|
13
|
+
self._parser = subparsers.add_parser(
|
|
14
|
+
"ls",
|
|
15
|
+
help="List available tasks, groups, subtasks, or tags",
|
|
16
|
+
description="List available tasks, groups, subtasks, or tags from the evaluation harness.",
|
|
17
|
+
usage="slm-eval list [tasks|groups|subtasks|tags] [--include_path DIR]",
|
|
18
|
+
epilog=textwrap.dedent("""
|
|
19
|
+
examples:
|
|
20
|
+
# List all available tasks (includes groups, subtasks, and tags)
|
|
21
|
+
$ slm-eval ls tasks
|
|
22
|
+
|
|
23
|
+
# List only task groups (like 'bfcl_v4', 'int_index')
|
|
24
|
+
$ slm-eval ls groups
|
|
25
|
+
|
|
26
|
+
# List only individual subtasks (like 'bfcl_v4_simple_python')
|
|
27
|
+
$ slm-eval ls subtasks
|
|
28
|
+
|
|
29
|
+
# Include external task definitions
|
|
30
|
+
$ slm-eval ls tasks --include_path /path/to/external/tasks
|
|
31
|
+
|
|
32
|
+
# List tasks from multiple external paths
|
|
33
|
+
$ slm-eval ls tasks --include_path "/path/to/tasks1:/path/to/tasks2"
|
|
34
|
+
|
|
35
|
+
organization:
|
|
36
|
+
• Groups: Collections of tasks with aggregated metric across subtasks (e.g., 'bfcl_v4')
|
|
37
|
+
• Subtasks: Individual evaluation tasks (e.g., 'bfcl_v4_simple_python', 'hellaswag')
|
|
38
|
+
• Tags: Similar to groups but no aggregate metric (e.g., 'reasoning', 'knowledge', 'language')
|
|
39
|
+
• External Tasks: Custom tasks defined in external directories
|
|
40
|
+
|
|
41
|
+
evaluation usage:
|
|
42
|
+
After listing tasks, use them with the run command!
|
|
43
|
+
|
|
44
|
+
For more information, task configs are defined in slm_eval/tasks/slm
|
|
45
|
+
"""),
|
|
46
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
47
|
+
)
|
|
48
|
+
self._add_args()
|
|
49
|
+
self._parser.set_defaults(func=self._execute)
|
|
50
|
+
|
|
51
|
+
def _add_args(self) -> None:
|
|
52
|
+
self._parser.add_argument(
|
|
53
|
+
"what",
|
|
54
|
+
choices=["tasks", "groups", "subtasks", "tags"],
|
|
55
|
+
nargs="?",
|
|
56
|
+
help="What to list: tasks (all), groups, subtasks, or tags",
|
|
57
|
+
)
|
|
58
|
+
self._parser.add_argument(
|
|
59
|
+
"--include_path",
|
|
60
|
+
type=str,
|
|
61
|
+
default=None,
|
|
62
|
+
metavar="DIR",
|
|
63
|
+
help="Additional path to include if there are external tasks.",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def _execute(self, args: argparse.Namespace) -> None:
|
|
67
|
+
"""Execute the list command."""
|
|
68
|
+
from slm_eval.tasks import TaskManager
|
|
69
|
+
|
|
70
|
+
task_manager = TaskManager(include_path=args.include_path)
|
|
71
|
+
|
|
72
|
+
if args.what == "tasks":
|
|
73
|
+
print(task_manager.list_all_tasks())
|
|
74
|
+
elif args.what == "groups":
|
|
75
|
+
print(task_manager.list_all_tasks(list_subtasks=False, list_tags=False))
|
|
76
|
+
elif args.what == "subtasks":
|
|
77
|
+
print(task_manager.list_all_tasks(list_groups=False, list_tags=False))
|
|
78
|
+
elif args.what == "tags":
|
|
79
|
+
print(task_manager.list_all_tasks(list_groups=False, list_subtasks=False))
|
|
80
|
+
elif args.what is None:
|
|
81
|
+
self._parser.print_help()
|