Skip to content

Commit 01a8896

Browse files
committed
fix: safely parse Arabic HellaSwag endings
1 parent 64f4f5a commit 01a8896

2 files changed

Lines changed: 52 additions & 1 deletion

File tree

src/lighteval/tasks/multilingual/tasks/arabic.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
paper:
1818
"""
1919

20+
import ast
2021
import random
2122
import re
2223
from string import ascii_uppercase
@@ -600,7 +601,7 @@ def copa_arabic_pfn(line, task_name: str = None):
600601
def hellaswag_arabic_pfn(line, task_name: str = None):
601602
ctx = re.sub(r"\[.*?\]", "", line["ctx"]) # Remove latin words within brackets
602603
endings = [
603-
re.sub(r"\[.*?\]", "", e) for e in eval(line["endings"])
604+
re.sub(r"\[.*?\]", "", e) for e in ast.literal_eval(line["endings"])
604605
] # endings is a string representation of a list
605606
answer_index = line["label"]
606607
instruction = "بناء على السياق التالي، اختر النهاية الصحيحة من الاقتراحات التالية"

tests/unit/tasks/test_arabic.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# MIT License
2+
#
3+
# Copyright (c) 2024 The HuggingFace Team
4+
#
5+
# Permission is hereby granted, free of charge, to any person obtaining a copy
6+
# of this software and associated documentation files (the "Software"), to deal
7+
# in the Software without restriction, including without limitation the rights
8+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
# copies of the Software, and to permit persons to whom the Software is
10+
# furnished to do so, subject to the following conditions:
11+
#
12+
# The above copyright notice and this permission notice shall be included in all
13+
# copies or substantial portions of the Software.
14+
#
15+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
# SOFTWARE.
22+
23+
import pytest
24+
25+
from lighteval.tasks.multilingual.tasks.arabic import hellaswag_arabic_pfn
26+
27+
28+
def test_hellaswag_arabic_pfn_parses_literal_endings():
29+
line = {
30+
"ctx": "سياق",
31+
"endings": "['نهاية أولى', 'نهاية ثانية']",
32+
"label": 1,
33+
}
34+
35+
doc = hellaswag_arabic_pfn(line, task_name="test_task")
36+
37+
assert doc.task_name == "test_task"
38+
assert doc.choices == ["نهاية أولى", "نهاية ثانية"]
39+
assert doc.gold_index == 1
40+
41+
42+
def test_hellaswag_arabic_pfn_rejects_non_literal_endings():
43+
line = {
44+
"ctx": "سياق",
45+
"endings": "['safe'] + ['still an expression']",
46+
"label": 0,
47+
}
48+
49+
with pytest.raises(ValueError):
50+
hellaswag_arabic_pfn(line)

0 commit comments

Comments
 (0)