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.
Files changed (82) hide show
  1. sgl_eval/__init__.py +10 -0
  2. sgl_eval/_vendored/__init__.py +6 -0
  3. sgl_eval/_vendored/nemo_skills/SOURCES.yaml +198 -0
  4. sgl_eval/_vendored/nemo_skills/__init__.py +5 -0
  5. sgl_eval/_vendored/nemo_skills/_metrics_base.py +465 -0
  6. sgl_eval/_vendored/nemo_skills/_metrics_utils.py +79 -0
  7. sgl_eval/_vendored/nemo_skills/_utils.py +44 -0
  8. sgl_eval/_vendored/nemo_skills/dataset/__init__.py +4 -0
  9. sgl_eval/_vendored/nemo_skills/dataset/_utils.py +346 -0
  10. sgl_eval/_vendored/nemo_skills/dataset/aime24/__init__.py +22 -0
  11. sgl_eval/_vendored/nemo_skills/dataset/aime24/test.txt +30 -0
  12. sgl_eval/_vendored/nemo_skills/dataset/aime25/__init__.py +22 -0
  13. sgl_eval/_vendored/nemo_skills/dataset/aime25/test.txt +30 -0
  14. sgl_eval/_vendored/nemo_skills/dataset/aime26/__init__.py +22 -0
  15. sgl_eval/_vendored/nemo_skills/dataset/aime26/test.txt +30 -0
  16. sgl_eval/_vendored/nemo_skills/dataset/gpqa/__init__.py +23 -0
  17. sgl_eval/_vendored/nemo_skills/dataset/gpqa/prepare.py +101 -0
  18. sgl_eval/_vendored/nemo_skills/dataset/gsm8k/__init__.py +22 -0
  19. sgl_eval/_vendored/nemo_skills/dataset/gsm8k/prepare.py +95 -0
  20. sgl_eval/_vendored/nemo_skills/dataset/mmlu/__init__.py +23 -0
  21. sgl_eval/_vendored/nemo_skills/dataset/mmlu/prepare.py +176 -0
  22. sgl_eval/_vendored/nemo_skills/dataset/mmlu_pro/__init__.py +22 -0
  23. sgl_eval/_vendored/nemo_skills/dataset/mmlu_pro/prepare.py +75 -0
  24. sgl_eval/_vendored/nemo_skills/dataset/mmmu_pro_vision/__init__.py +25 -0
  25. sgl_eval/_vendored/nemo_skills/dataset/mmmu_pro_vision/prepare.py +87 -0
  26. sgl_eval/_vendored/nemo_skills/dataset/ruler2/__init__.py +20 -0
  27. sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare.py +582 -0
  28. sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_mmlu.py +482 -0
  29. sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_niah.py +281 -0
  30. sgl_eval/_vendored/nemo_skills/dataset/ruler2/prepare_qa.py +392 -0
  31. sgl_eval/_vendored/nemo_skills/dataset/ruler2/ruler2_score.py +48 -0
  32. sgl_eval/_vendored/nemo_skills/dataset/ruler2/tokenizer.py +74 -0
  33. sgl_eval/_vendored/nemo_skills/evaluator/__init__.py +1 -0
  34. sgl_eval/_vendored/nemo_skills/evaluator/base.py +96 -0
  35. sgl_eval/_vendored/nemo_skills/evaluator/math.py +88 -0
  36. sgl_eval/_vendored/nemo_skills/evaluator/mcq.py +132 -0
  37. sgl_eval/_vendored/nemo_skills/evaluator/ruler.py +193 -0
  38. sgl_eval/_vendored/nemo_skills/math_grader.py +166 -0
  39. sgl_eval/_vendored/nemo_skills/math_metrics.py +120 -0
  40. sgl_eval/_vendored/nemo_skills/prompts/default.yaml +8 -0
  41. sgl_eval/_vendored/nemo_skills/prompts/math.yaml +20 -0
  42. sgl_eval/_vendored/nemo_skills/prompts/matharena-aime.yaml +13 -0
  43. sgl_eval/_vendored/nemo_skills/prompts/mcq-10choices.yaml +12 -0
  44. sgl_eval/_vendored/nemo_skills/prompts/mcq-4choices-boxed.yaml +12 -0
  45. sgl_eval/_vendored/nemo_skills/prompts/mcq-4choices.yaml +12 -0
  46. sgl_eval/_vendored/nemo_skills/prompts/mmmu-pro.yaml +16 -0
  47. sgl_eval/_vendored/nemo_skills/ruler2_metrics.py +50 -0
  48. sgl_eval/_vendored/nemo_skills/tests/test_base_metrics.py +199 -0
  49. sgl_eval/_vendored/nemo_skills/tests/test_math_equal.py +83 -0
  50. sgl_eval/cli.py +198 -0
  51. sgl_eval/evals/__init__.py +7 -0
  52. sgl_eval/evals/_loader.py +304 -0
  53. sgl_eval/evals/_math.py +125 -0
  54. sgl_eval/evals/_mmmu_pro.py +139 -0
  55. sgl_eval/evals/_multichoice.py +144 -0
  56. sgl_eval/evals/_prompts.py +71 -0
  57. sgl_eval/evals/_registry.py +357 -0
  58. sgl_eval/evals/_ruler2.py +482 -0
  59. sgl_eval/evals/_vision.py +91 -0
  60. sgl_eval/evals/prompts/mmmu-pro-cot.yaml +13 -0
  61. sgl_eval/metrics.py +136 -0
  62. sgl_eval/model_preset.py +139 -0
  63. sgl_eval/model_presets.yaml +33 -0
  64. sgl_eval/pipeline/__init__.py +9 -0
  65. sgl_eval/pipeline/report.py +106 -0
  66. sgl_eval/pipeline/run.py +26 -0
  67. sgl_eval/pipeline/setup.py +140 -0
  68. sgl_eval/predictions.py +105 -0
  69. sgl_eval/preset.py +417 -0
  70. sgl_eval/registry.py +74 -0
  71. sgl_eval/runner/__init__.py +143 -0
  72. sgl_eval/runner/_executor.py +88 -0
  73. sgl_eval/runner/_progress.py +97 -0
  74. sgl_eval/sampler.py +187 -0
  75. sgl_eval/types.py +119 -0
  76. sgl_eval-0.1.0.dist-info/METADATA +199 -0
  77. sgl_eval-0.1.0.dist-info/RECORD +82 -0
  78. sgl_eval-0.1.0.dist-info/WHEEL +5 -0
  79. sgl_eval-0.1.0.dist-info/entry_points.txt +2 -0
  80. sgl_eval-0.1.0.dist-info/licenses/LICENSE +202 -0
  81. sgl_eval-0.1.0.dist-info/licenses/NOTICE +33 -0
  82. 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,6 @@
1
+ """Vendored third-party code, organized by upstream source.
2
+
3
+ Each subpackage corresponds to one upstream project; ``SOURCES.yaml`` inside
4
+ records the synced commit and import-rewrite map. See ROADMAP.md
5
+ "Dependency policy" and ``scripts/sync_vendored.py``.
6
+ """
@@ -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
@@ -0,0 +1,5 @@
1
+ """Vendored slice of NVIDIA/NeMo-Skills.
2
+
3
+ See ``SOURCES.yaml`` for the synced commit and rewrite map.
4
+ Apache-2.0 licensed (see top-level LICENSE).
5
+ """