From 01a889649ec1a8e47bc33746af4062d1daa77e38 Mon Sep 17 00:00:00 2001 From: chosch801 <189966085+chosch801@users.noreply.github.com> Date: Sun, 9 Aug 2026 21:51:28 +0800 Subject: [PATCH] fix: safely parse Arabic HellaSwag endings --- .../tasks/multilingual/tasks/arabic.py | 3 +- tests/unit/tasks/test_arabic.py | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 tests/unit/tasks/test_arabic.py diff --git a/src/lighteval/tasks/multilingual/tasks/arabic.py b/src/lighteval/tasks/multilingual/tasks/arabic.py index 2d78f9887..226e8bac5 100644 --- a/src/lighteval/tasks/multilingual/tasks/arabic.py +++ b/src/lighteval/tasks/multilingual/tasks/arabic.py @@ -17,6 +17,7 @@ paper: """ +import ast import random import re from string import ascii_uppercase @@ -600,7 +601,7 @@ def copa_arabic_pfn(line, task_name: str = None): def hellaswag_arabic_pfn(line, task_name: str = None): ctx = re.sub(r"\[.*?\]", "", line["ctx"]) # Remove latin words within brackets endings = [ - re.sub(r"\[.*?\]", "", e) for e in eval(line["endings"]) + re.sub(r"\[.*?\]", "", e) for e in ast.literal_eval(line["endings"]) ] # endings is a string representation of a list answer_index = line["label"] instruction = "بناء على السياق التالي، اختر النهاية الصحيحة من الاقتراحات التالية" diff --git a/tests/unit/tasks/test_arabic.py b/tests/unit/tasks/test_arabic.py new file mode 100644 index 000000000..cbaebac13 --- /dev/null +++ b/tests/unit/tasks/test_arabic.py @@ -0,0 +1,50 @@ +# MIT License +# +# Copyright (c) 2024 The HuggingFace Team +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import pytest + +from lighteval.tasks.multilingual.tasks.arabic import hellaswag_arabic_pfn + + +def test_hellaswag_arabic_pfn_parses_literal_endings(): + line = { + "ctx": "سياق", + "endings": "['نهاية أولى', 'نهاية ثانية']", + "label": 1, + } + + doc = hellaswag_arabic_pfn(line, task_name="test_task") + + assert doc.task_name == "test_task" + assert doc.choices == ["نهاية أولى", "نهاية ثانية"] + assert doc.gold_index == 1 + + +def test_hellaswag_arabic_pfn_rejects_non_literal_endings(): + line = { + "ctx": "سياق", + "endings": "['safe'] + ['still an expression']", + "label": 0, + } + + with pytest.raises(ValueError): + hellaswag_arabic_pfn(line)