sgl-eval 0.1.0__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.
- sgl_eval/__init__.py +10 -0
- sgl_eval/_vendored/__init__.py +6 -0
- sgl_eval/_vendored/nemo_skills/SOURCES.yaml +198 -0
- sgl_eval/_vendored/nemo_skills/__init__.py +5 -0
- sgl_eval/_vendored/nemo_skills/_metrics_base.py +465 -0
- sgl_eval/_vendored/nemo_skills/_metrics_utils.py +79 -0
- sgl_eval/_vendored/nemo_skills/_utils.py +44 -0
- sgl_eval/_vendored/nemo_skills/dataset/__init__.py +4 -0
- sgl_eval/_vendored/nemo_skills/dataset/_utils.py +346 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime24/__init__.py +22 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime24/test.txt +30 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime25/__init__.py +22 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime25/test.txt +30 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime26/__init__.py +22 -0
- sgl_eval/_vendored/nemo_skills/dataset/aime26/test.txt +30 -0
- sgl_eval/_vendored/nemo_skills/dataset/gpqa/__init__.py +23 -0
- sgl_eval/_vendored/nemo_skills/dataset/gpqa/prepare.py +101 -0
- sgl_eval/_vendored/nemo_skills/dataset/gsm8k/__init__.py +22 -0
- sgl_eval/_vendored/nemo_skills/dataset/gsm8k/prepare.py +95 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmlu/__init__.py +23 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmlu/prepare.py +176 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmlu_pro/__init__.py +22 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmlu_pro/prepare.py +75 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmmu_pro_vision/__init__.py +25 -0
- sgl_eval/_vendored/nemo_skills/dataset/mmmu_pro_vision/prepare.py +87 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/__init__.py +20 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare.py +582 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_mmlu.py +482 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_niah.py +281 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_qa.py +392 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/ruler2_score.py +48 -0
- sgl_eval/_vendored/nemo_skills/dataset/ruler2/tokenizer.py +74 -0
- sgl_eval/_vendored/nemo_skills/evaluator/__init__.py +1 -0
- sgl_eval/_vendored/nemo_skills/evaluator/base.py +96 -0
- sgl_eval/_vendored/nemo_skills/evaluator/math.py +88 -0
- sgl_eval/_vendored/nemo_skills/evaluator/mcq.py +132 -0
- sgl_eval/_vendored/nemo_skills/evaluator/ruler.py +193 -0
- sgl_eval/_vendored/nemo_skills/math_grader.py +166 -0
- sgl_eval/_vendored/nemo_skills/math_metrics.py +120 -0
- sgl_eval/_vendored/nemo_skills/prompts/default.yaml +8 -0
- sgl_eval/_vendored/nemo_skills/prompts/math.yaml +20 -0
- sgl_eval/_vendored/nemo_skills/prompts/matharena-aime.yaml +13 -0
- sgl_eval/_vendored/nemo_skills/prompts/mcq-10choices.yaml +12 -0
- sgl_eval/_vendored/nemo_skills/prompts/mcq-4choices-boxed.yaml +12 -0
- sgl_eval/_vendored/nemo_skills/prompts/mcq-4choices.yaml +12 -0
- sgl_eval/_vendored/nemo_skills/prompts/mmmu-pro.yaml +16 -0
- sgl_eval/_vendored/nemo_skills/ruler2_metrics.py +50 -0
- sgl_eval/_vendored/nemo_skills/tests/test_base_metrics.py +199 -0
- sgl_eval/_vendored/nemo_skills/tests/test_math_equal.py +83 -0
- sgl_eval/cli.py +198 -0
- sgl_eval/evals/__init__.py +7 -0
- sgl_eval/evals/_loader.py +304 -0
- sgl_eval/evals/_math.py +125 -0
- sgl_eval/evals/_mmmu_pro.py +139 -0
- sgl_eval/evals/_multichoice.py +144 -0
- sgl_eval/evals/_prompts.py +71 -0
- sgl_eval/evals/_registry.py +357 -0
- sgl_eval/evals/_ruler2.py +482 -0
- sgl_eval/evals/_vision.py +91 -0
- sgl_eval/evals/prompts/mmmu-pro-cot.yaml +13 -0
- sgl_eval/metrics.py +136 -0
- sgl_eval/model_preset.py +139 -0
- sgl_eval/model_presets.yaml +33 -0
- sgl_eval/pipeline/__init__.py +9 -0
- sgl_eval/pipeline/report.py +106 -0
- sgl_eval/pipeline/run.py +26 -0
- sgl_eval/pipeline/setup.py +140 -0
- sgl_eval/predictions.py +105 -0
- sgl_eval/preset.py +417 -0
- sgl_eval/registry.py +74 -0
- sgl_eval/runner/__init__.py +143 -0
- sgl_eval/runner/_executor.py +88 -0
- sgl_eval/runner/_progress.py +97 -0
- sgl_eval/sampler.py +187 -0
- sgl_eval/types.py +119 -0
- sgl_eval-0.1.0.dist-info/METADATA +199 -0
- sgl_eval-0.1.0.dist-info/RECORD +82 -0
- sgl_eval-0.1.0.dist-info/WHEEL +5 -0
- sgl_eval-0.1.0.dist-info/entry_points.txt +2 -0
- sgl_eval-0.1.0.dist-info/licenses/LICENSE +202 -0
- sgl_eval-0.1.0.dist-info/licenses/NOTICE +33 -0
- sgl_eval-0.1.0.dist-info/top_level.txt +1 -0
sgl_eval/__init__.py
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""sgl-eval: one-click accuracy evaluation harness for SGLang."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
__version__ = "0.1.0"
|
|
6
|
+
|
|
7
|
+
# Single source of truth for the vendored NeMo-Skills slice path. Used by
|
|
8
|
+
# the dataset loader, the CLI's run-meta provenance reader, and any future
|
|
9
|
+
# consumer that needs to reach into ``_vendored/nemo_skills/``.
|
|
10
|
+
VENDORED_NS_ROOT = Path(__file__).resolve().parent / "_vendored" / "nemo_skills"
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Manifest for files vendored from NVIDIA/NeMo-Skills.
|
|
2
|
+
#
|
|
3
|
+
# Edit this file then run `python scripts/sync_vendored.py` to refresh the
|
|
4
|
+
# vendored sources. Banner comments at the top of each generated file
|
|
5
|
+
# point back here.
|
|
6
|
+
#
|
|
7
|
+
# Per ROADMAP.md "Dependency policy": external pip deps that vendored
|
|
8
|
+
# files import must mirror upstream's `core/requirements.txt` at
|
|
9
|
+
# `synced_from_sha`. Mirror in `pyproject.toml` directly.
|
|
10
|
+
|
|
11
|
+
upstream_repo: NVIDIA/NeMo-Skills
|
|
12
|
+
upstream_branch: main
|
|
13
|
+
synced_from_sha: 645cf567ff08c0ae9cc3fc8e1edbb975b3067816
|
|
14
|
+
synced_at: "2026-04-29"
|
|
15
|
+
|
|
16
|
+
# pip deps that vendored files actually `import`. Reflected in
|
|
17
|
+
# pyproject.toml. Anything upstream pulls in but our vendored files do
|
|
18
|
+
# not import (torch, transformers, flask, gradio, hydra-core, ...) is
|
|
19
|
+
# intentionally absent.
|
|
20
|
+
pinned_deps:
|
|
21
|
+
math_verify: "[antlr4_9_3]" # upstream pin: unversioned, with antlr4_9_3 extra
|
|
22
|
+
latex2sympy2_extended: "" # upstream pin: unversioned
|
|
23
|
+
numpy: "" # upstream pin: unversioned
|
|
24
|
+
tqdm: "" # upstream pin: unversioned (used by evaluator/base.py)
|
|
25
|
+
editdistance: "" # upstream pin: unversioned (evaluator/ruler.py WER)
|
|
26
|
+
datasets: "" # upstream pin: unversioned (every dataset/*/prepare.py)
|
|
27
|
+
# RULER2 dataset generation only. Kept out of the core install because
|
|
28
|
+
# nothing else needs them and `transformers` is heavy -- they live in the
|
|
29
|
+
# `longcontext` extra. All four are imported by dataset/ruler2/prepare_*.py;
|
|
30
|
+
# `transformers` / `tiktoken` are lazy (inside tokenizer.py's __init__).
|
|
31
|
+
nltk: ""
|
|
32
|
+
wonderwords: ""
|
|
33
|
+
inflect: ""
|
|
34
|
+
transformers: ""
|
|
35
|
+
|
|
36
|
+
# Applied by sync_vendored.py to rewrite intra-nemo-skills imports so
|
|
37
|
+
# vendored files resolve under sgl_eval._vendored.nemo_skills. Audited
|
|
38
|
+
# by tests/test_no_untranslated_imports.py.
|
|
39
|
+
import_rewrites:
|
|
40
|
+
"from nemo_skills.utils import": "from sgl_eval._vendored.nemo_skills._utils import"
|
|
41
|
+
"from nemo_skills.evaluation.metrics.base import": "from sgl_eval._vendored.nemo_skills._metrics_base import"
|
|
42
|
+
"from nemo_skills.evaluation.metrics.utils import": "from sgl_eval._vendored.nemo_skills._metrics_utils import"
|
|
43
|
+
"from nemo_skills.evaluation.math_grader import": "from sgl_eval._vendored.nemo_skills.math_grader import"
|
|
44
|
+
"from nemo_skills.evaluation.evaluator.base import": "from sgl_eval._vendored.nemo_skills.evaluator.base import"
|
|
45
|
+
"from nemo_skills.evaluation.evaluator.math import": "from sgl_eval._vendored.nemo_skills.evaluator.math import"
|
|
46
|
+
"from nemo_skills.evaluation.evaluator.mcq import": "from sgl_eval._vendored.nemo_skills.evaluator.mcq import"
|
|
47
|
+
"from nemo_skills.dataset.utils import": "from sgl_eval._vendored.nemo_skills.dataset._utils import"
|
|
48
|
+
# ruler2/prepare.py spawns its sibling generators as `python -m
|
|
49
|
+
# nemo_skills.dataset.ruler2.prepare_niah` and emits SCORE_MODULE as a
|
|
50
|
+
# string literal. Both are module paths in source text rather than import
|
|
51
|
+
# statements, so the audit regex cannot see them -- rewrite the dotted
|
|
52
|
+
# prefix so the subprocess resolves under _vendored.
|
|
53
|
+
"nemo_skills.dataset.ruler2.": "sgl_eval._vendored.nemo_skills.dataset.ruler2."
|
|
54
|
+
|
|
55
|
+
# Files synced verbatim from upstream (with rewrites + drop_functions +
|
|
56
|
+
# drop_imports applied, plus a provenance banner for .py / .yaml).
|
|
57
|
+
# `binary: true` copies bytes verbatim with no banner (data files).
|
|
58
|
+
files:
|
|
59
|
+
# --- evaluation core ---
|
|
60
|
+
- src: nemo_skills/evaluation/math_grader.py
|
|
61
|
+
dst: math_grader.py
|
|
62
|
+
- src: nemo_skills/evaluation/metrics/utils.py
|
|
63
|
+
dst: _metrics_utils.py
|
|
64
|
+
- src: nemo_skills/evaluation/metrics/base.py
|
|
65
|
+
dst: _metrics_base.py
|
|
66
|
+
- src: nemo_skills/evaluation/metrics/math_metrics.py
|
|
67
|
+
dst: math_metrics.py
|
|
68
|
+
drop_functions:
|
|
69
|
+
- _compute_reward_at_k
|
|
70
|
+
|
|
71
|
+
# --- evaluator wrappers ---
|
|
72
|
+
- src: nemo_skills/evaluation/evaluator/base.py
|
|
73
|
+
dst: evaluator/base.py
|
|
74
|
+
- src: nemo_skills/evaluation/evaluator/math.py
|
|
75
|
+
dst: evaluator/math.py
|
|
76
|
+
# Lean4ProofEvaluator pulls in code_execution.proof_utils + sandbox;
|
|
77
|
+
# we don't run Lean proofs, so drop the class and its imports.
|
|
78
|
+
drop_functions:
|
|
79
|
+
- Lean4ProofEvaluator
|
|
80
|
+
drop_imports:
|
|
81
|
+
- nemo_skills.code_execution
|
|
82
|
+
- src: nemo_skills/evaluation/evaluator/mcq.py
|
|
83
|
+
dst: evaluator/mcq.py
|
|
84
|
+
- src: nemo_skills/evaluation/evaluator/ruler.py
|
|
85
|
+
dst: evaluator/ruler.py
|
|
86
|
+
- src: nemo_skills/evaluation/metrics/ruler2_metrics.py
|
|
87
|
+
dst: ruler2_metrics.py
|
|
88
|
+
|
|
89
|
+
# --- dataset utilities ---
|
|
90
|
+
- src: nemo_skills/dataset/utils.py
|
|
91
|
+
dst: dataset/_utils.py
|
|
92
|
+
|
|
93
|
+
# --- per-benchmark dataset metadata + bundled data ---
|
|
94
|
+
- src: nemo_skills/dataset/aime25/__init__.py
|
|
95
|
+
dst: dataset/aime25/__init__.py
|
|
96
|
+
- src: nemo_skills/dataset/aime25/test.txt
|
|
97
|
+
dst: dataset/aime25/test.txt
|
|
98
|
+
binary: true
|
|
99
|
+
- src: nemo_skills/dataset/aime26/__init__.py
|
|
100
|
+
dst: dataset/aime26/__init__.py
|
|
101
|
+
- src: nemo_skills/dataset/aime24/__init__.py
|
|
102
|
+
dst: dataset/aime24/__init__.py
|
|
103
|
+
- src: nemo_skills/dataset/aime24/test.txt
|
|
104
|
+
dst: dataset/aime24/test.txt
|
|
105
|
+
binary: true
|
|
106
|
+
- src: nemo_skills/dataset/gsm8k/__init__.py
|
|
107
|
+
dst: dataset/gsm8k/__init__.py
|
|
108
|
+
- src: nemo_skills/dataset/gsm8k/prepare.py
|
|
109
|
+
dst: dataset/gsm8k/prepare.py
|
|
110
|
+
- src: nemo_skills/dataset/mmlu/__init__.py
|
|
111
|
+
dst: dataset/mmlu/__init__.py
|
|
112
|
+
- src: nemo_skills/dataset/mmlu/prepare.py
|
|
113
|
+
dst: dataset/mmlu/prepare.py
|
|
114
|
+
- src: nemo_skills/dataset/gpqa/__init__.py
|
|
115
|
+
dst: dataset/gpqa/__init__.py
|
|
116
|
+
- src: nemo_skills/dataset/gpqa/prepare.py
|
|
117
|
+
dst: dataset/gpqa/prepare.py
|
|
118
|
+
# `dst` de-hyphenates because `_resolve_upstream_metadata` imports this dir
|
|
119
|
+
# as a Python module. Unlike gpqa/mmlu, this prepare.py exposes only an
|
|
120
|
+
# argparse `main(args)`, which the registry row flags with `argparse_main`.
|
|
121
|
+
# `subsets/` is deliberately absent: it backs upstream's `10pct_opt_v1`
|
|
122
|
+
# split, and sgl-eval evaluates `test`.
|
|
123
|
+
- src: nemo_skills/dataset/mmlu-pro/__init__.py
|
|
124
|
+
dst: dataset/mmlu_pro/__init__.py
|
|
125
|
+
- src: nemo_skills/dataset/mmlu-pro/prepare.py
|
|
126
|
+
dst: dataset/mmlu_pro/prepare.py
|
|
127
|
+
# MMMU-Pro `vision` config (see `_registry.py` for what it evaluates).
|
|
128
|
+
# `dst` de-hyphenates because `_resolve_upstream_metadata` imports this dir
|
|
129
|
+
# as a Python module; it says `vision` to stay distinct from the `mmmu_pro`
|
|
130
|
+
# row, which evaluates a config upstream does not ship.
|
|
131
|
+
- src: nemo_skills/dataset/mmmu-pro/__init__.py
|
|
132
|
+
dst: dataset/mmmu_pro_vision/__init__.py
|
|
133
|
+
- src: nemo_skills/dataset/mmmu-pro/prepare.py
|
|
134
|
+
dst: dataset/mmmu_pro_vision/prepare.py
|
|
135
|
+
|
|
136
|
+
# --- RULER2 (synthetic long-context; generated per tokenizer + seq length) ---
|
|
137
|
+
# Upstream ships no test split for this one: `__init__.py` is just
|
|
138
|
+
# REQUIRES_DATA_DIR = True, and the 12 subtasks are generated locally. Note
|
|
139
|
+
# sgl-eval calls the per-task `prepare_<task>(output_folder, ...)` functions
|
|
140
|
+
# directly rather than `prepare_dataset`, whose output_folder is hardcoded to
|
|
141
|
+
# `Path(__file__).parent / setup` -- i.e. it would write into _vendored.
|
|
142
|
+
- src: nemo_skills/dataset/ruler2/__init__.py
|
|
143
|
+
dst: dataset/ruler2/__init__.py
|
|
144
|
+
- src: nemo_skills/dataset/ruler2/prepare.py
|
|
145
|
+
dst: dataset/ruler2/prepare.py
|
|
146
|
+
- src: nemo_skills/dataset/ruler2/prepare_niah.py
|
|
147
|
+
dst: dataset/ruler2/prepare_niah.py
|
|
148
|
+
- src: nemo_skills/dataset/ruler2/prepare_qa.py
|
|
149
|
+
dst: dataset/ruler2/prepare_qa.py
|
|
150
|
+
- src: nemo_skills/dataset/ruler2/prepare_mmlu.py
|
|
151
|
+
dst: dataset/ruler2/prepare_mmlu.py
|
|
152
|
+
- src: nemo_skills/dataset/ruler2/tokenizer.py
|
|
153
|
+
dst: dataset/ruler2/tokenizer.py
|
|
154
|
+
# GeminiTokenizer is the only module-level `tenacity` user and needs a
|
|
155
|
+
# GEMINI_API_KEY. sgl-eval restricts tokenizer_type to hf/openai.
|
|
156
|
+
drop_functions:
|
|
157
|
+
- GeminiTokenizer
|
|
158
|
+
drop_imports:
|
|
159
|
+
- tenacity
|
|
160
|
+
- src: nemo_skills/dataset/ruler2/ruler2_score.py
|
|
161
|
+
dst: dataset/ruler2/ruler2_score.py
|
|
162
|
+
|
|
163
|
+
# --- prompt templates ---
|
|
164
|
+
- src: nemo_skills/prompt/config/generic/math.yaml
|
|
165
|
+
dst: prompts/math.yaml
|
|
166
|
+
- src: nemo_skills/prompt/config/eval/aai/mcq-4choices.yaml
|
|
167
|
+
dst: prompts/mcq-4choices.yaml
|
|
168
|
+
# Not a default for any benchmark -- reachable only via `run --prompt
|
|
169
|
+
# matharena-aime`. Published AIME numbers are often produced with this
|
|
170
|
+
# phrasing (it states the 0-999 integer range, which `generic/math` does
|
|
171
|
+
# not), so a run reproducing one needs it available.
|
|
172
|
+
- src: nemo_skills/prompt/config/eval/matharena/aime.yaml
|
|
173
|
+
dst: prompts/matharena-aime.yaml
|
|
174
|
+
- src: nemo_skills/prompt/config/eval/aai/mcq-4choices-boxed.yaml
|
|
175
|
+
dst: prompts/mcq-4choices-boxed.yaml
|
|
176
|
+
# MMLU-Pro's default. Hardcodes A-J, so it is not interchangeable with
|
|
177
|
+
# sgl-eval's own `mmmu-pro-cot` -- see the note there.
|
|
178
|
+
- src: nemo_skills/prompt/config/eval/aai/mcq-10choices.yaml
|
|
179
|
+
dst: prompts/mcq-10choices.yaml
|
|
180
|
+
# RULER2's ++prompt_config. Pure passthrough (`user: "{question}"`) -- the
|
|
181
|
+
# long context is already assembled by the prepare scripts.
|
|
182
|
+
- src: nemo_skills/prompt/config/generic/default.yaml
|
|
183
|
+
dst: prompts/default.yaml
|
|
184
|
+
# mmmu_pro_vision's ++prompt_config (`vlm/mmmu-pro`). The `dst` basename
|
|
185
|
+
# must stay hyphenated: `_resolve_upstream_metadata` derives it from
|
|
186
|
+
# GENERATION_ARGS via `prompt_config.split("/")[-1]`. Carries
|
|
187
|
+
# `image_position: before`, which `_prompts.prompt_media_config` reads.
|
|
188
|
+
- src: nemo_skills/prompt/config/vlm/mmmu-pro.yaml
|
|
189
|
+
dst: prompts/mmmu-pro.yaml
|
|
190
|
+
|
|
191
|
+
# --- upstream's own behavior tests ---
|
|
192
|
+
# Run as part of `pytest`. These are NS's canonical regression cases,
|
|
193
|
+
# so any drift in the vendored grader / metrics / dep versions surfaces
|
|
194
|
+
# as a test failure here. Do NOT hand-edit; refresh via sync_vendored.
|
|
195
|
+
- src: tests/test_math_equal.py
|
|
196
|
+
dst: tests/test_math_equal.py
|
|
197
|
+
- src: tests/test_base_metrics.py
|
|
198
|
+
dst: tests/test_base_metrics.py
|