Skip to content

Commit 352d4ce

Browse files
authored
Merge pull request #5 from LumiOpen/daniel/translate-prompts
Add multilingual MATH-500 (mmath500) task
2 parents e92848e + 63e69a6 commit 352d4ce

1 file changed

Lines changed: 108 additions & 0 deletions

File tree

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
"""
2+
name:
3+
mMATH-500
4+
5+
dataset:
6+
LumiOpen/MATH-500_mt
7+
8+
abstract:
9+
Multilingual translations of the MATH-500 benchmark, a subset of 500 problems
10+
from the MATH benchmark that OpenAI created in their Let's Verify Step by Step
11+
paper. Currently contains Finnish translations produced with Claude Opus 4.5.
12+
13+
languages:
14+
finnish
15+
16+
tags:
17+
math, reasoning, multilingual
18+
19+
paper:
20+
https://arxiv.org/abs/2305.20050
21+
"""
22+
23+
import os
24+
25+
from inspect_ai.dataset import Sample
26+
from inspect_ai.model import GenerateConfig, get_model
27+
from inspect_ai.scorer import model_graded_fact
28+
from inspect_ai.solver import generate, prompt_template
29+
30+
from lighteval.metrics.metrics import Metrics
31+
from lighteval.tasks.lighteval_task import LightevalTaskConfig
32+
from lighteval.tasks.requests import Doc
33+
34+
35+
MATH_QUERY_TEMPLATES = {
36+
"fi": """
37+
Ratkaise seuraava tehtävä. Vastauksesi viimeisen rivin TÄYTYY olla seuraavassa muodossa:
38+
"ANSWER: $ANSWER" (ilman lainausmerkkejä), jossa $ANSWER on lopullinen vastaus. Ajattele vaiheittain ennen vastaamista.
39+
40+
{prompt}
41+
""".strip(),
42+
}
43+
44+
45+
def _get_scorer_model():
46+
"""Resolve the scorer model from environment variables if available.
47+
48+
When SCORER_MODEL_BASE_URL is set (e.g. by the eval harness which starts
49+
a dedicated scorer vLLM server), connect to it via the OpenAI-compatible
50+
API. Otherwise return None so model_graded_fact uses the eval model.
51+
"""
52+
base_url = os.environ.get("SCORER_MODEL_BASE_URL")
53+
if base_url:
54+
model_name = os.environ.get("SCORER_MODEL_PATH", "Qwen/Qwen3.5-9B")
55+
return get_model(
56+
f"openai-api/scorer/{model_name}",
57+
config=GenerateConfig(
58+
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
59+
),
60+
base_url=base_url,
61+
api_key=os.environ.get("VLLM_API_KEY", "inspectai"),
62+
)
63+
return None
64+
65+
66+
def _mmath500_prompt_fn(lang: str):
67+
template = MATH_QUERY_TEMPLATES[lang]
68+
69+
def mmath500_prompt(line, task_name: str = None):
70+
query = template.format(prompt=line["problem"])
71+
return Doc(
72+
task_name=task_name,
73+
query=query,
74+
choices=[f"ANSWER: {line['answer']}"],
75+
gold_index=0,
76+
)
77+
78+
return mmath500_prompt
79+
80+
81+
def record_to_sample(record):
82+
query = record["problem"]
83+
target = record["answer"]
84+
return Sample(input=query, target=target)
85+
86+
87+
mmath500_fi = LightevalTaskConfig(
88+
name="mmath500:fi",
89+
prompt_function=_mmath500_prompt_fn("fi"),
90+
hf_repo="LumiOpen/MATH-500_mt",
91+
hf_subset="default",
92+
hf_avail_splits=["fi"],
93+
evaluation_splits=["fi"],
94+
few_shots_split=None,
95+
few_shots_select=None,
96+
generation_size=32768,
97+
metrics=[
98+
Metrics.pass_at_k_math(sample_params={"k": 1, "n": 1}),
99+
],
100+
version=1,
101+
sample_fields=record_to_sample,
102+
solver=[prompt_template(MATH_QUERY_TEMPLATES["fi"]), generate(cache=True)],
103+
scorer=model_graded_fact(model=_get_scorer_model()),
104+
)
105+
106+
TASKS_TABLE = [
107+
mmath500_fi,
108+
]

0 commit comments

Comments
 (0)