o
    پi(                     @   s,  d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZ g dZg dZg dZd	d
ddddddddddZddddddddddddZd d!d"d#d$d%d&d'd(d)d*dZd+ed,ed-efd.d/Zd0ed1ed-efd2d3Zd4ed-eeeef  fd5d6Zd-eeeef  fd7d8ZG d9d: d:e
ZdS );a  
MGSM: Multilingual Grade School Math Benchmark (MGSM) is a benchmark of grade-school math problems.
Language Models are Multilingual Chain-of-Thought Reasoners
Freda Shi, Mirac Suzgun, Markus Freitag, Xuezhi Wang, Suraj Srivats, Soroush Vosoughi, Hyung Won Chung, Yi Tay, Sebastian Ruder, Denny Zhou, Dipanjan Das, Jason Wei
https://arxiv.org/abs/2210.03057 reference: https://github.com/google-research/url-nlp
    N)Optional)simple_eval_common)
HTML_JINJAEval
EvalResultSamplerBaseSingleEvalResult)bndeenesfrjaruswtethzh)r
   r   r   r   r   )r	   r   r   r   r   r   zChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_bn.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_de.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_en.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_es.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_fr.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_ja.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_ru.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_sw.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_te.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_th.tsvzChttps://openaipublic.blob.core.windows.net/simple-evals/mgsm_zh.tsvzSolve this math problem. Give the reasoning steps before giving the final answer on the last line by itself in the format of "Answer:". Do not add anything other than the integer answer after "Answer:".

{input}u  এই গণিতের সমস্যাটি সমাধান করুন। চূড়ান্ত উত্তর দেওয়ার আগে যুক্তিসম্পন্ন পদক্ষেপ প্রদান করুন। চূড়ান্ত উত্তরটি একক সংখ্যা হিসাবে "উত্তর:" এর পরে শেষ লাইনে দিন। "উত্তর:" এর পরে অন্য কিছু যুক্ত করবেন না।.

{input}u   Löse dieses Mathematikproblem. Gib die Schritte zur Begründung an, bevor du die endgültige Antwort in der letzten Zeile alleine im Format "Antwort:" gibst. Füge nichts anderes als die ganzzahlige Antwort nach "Antwort:" hinzu.

{input}u   Resuelve este problema matemático. Proporciona los pasos de razonamiento antes de dar la respuesta final en la última línea por sí misma en el formato de "Respuesta:". No añadas nada más que la respuesta entera después de "Respuesta:".

{input}u   Résolvez ce problème de mathématiques. Donnez les étapes de raisonnement avant de fournir la réponse finale sur la dernière ligne elle-même dans le format de "Réponse:". N'ajoutez rien d'autre que la réponse entière après "Réponse:".

{input}u  の数学の問題を解いてください。最終的な答えを出す前に、解答の推論過程を記述してください。そして最後の行には "答え:" の形式で答えを記述し、その後には整数の答え以外何も追加しないでください。

{input}u  Решите эту математическую задачу. Объясните шаги рассуждения перед тем, как дать окончательный ответ в последней строке сам по себе в формате "Ответ:". Не добавляйте ничего, кроме целочисленного ответа после "Ответ:".

{input}zSuluhisha tatizo hili la hesabu. Toa hatua za mantiki kabla ya kutoa jibu la mwisho kwenye mstari wa mwisho peke yake katika muundo wa "Jibu:". Usiongeze chochote kingine isipokuwa jibu la integer baada ya "Jibu:".

{input}us  ఈ గణిత సమస్యను పరిష్కరించండి. చివరి సమాధానాన్ని ఇవ్వదానికి ముందు తర్కాత్మక అదుగులను ఇవ్వండి. చివరి పంక్తిలో మాత్రమే 'సమాధానం:' అనే ఆకారంలో చివరి సమాధానాద్ని ఇవ్వండి సమాధానం: తర్వాత పూర్ణాంక సమాధానానికి తప్పించి ఎదేనా చేర్చవద్దు.

{input}u  แก้ปัญหาคณิตศาสตร์นี้ ให้ให้ขั้นตอนการใช้เหตุผลก่อนที่จะให้คำตอบสุดท้ายในบรรทัดสุดท้ายโดยอยู่ในรูปแบบ "คำตอบ:" ไม่ควรเพิ่มอะไรนอกจากคำตอบที่เป็นจำนวนเต็มหลังจาก "คำตอบ:"

{input}u   解决这个数学问题。在最后一行给出答案前，请提供推理步骤。最后一行应该以 "答案: " 的形式独立给出答案。在 "答案：" 后不要添加除整数答案之外的任何内容。

{input})r   r	   r
   r   r   r   r   r   r   r   r   Answeru   উত্তরAntwort	Respuestau   Réponseu   答えu
   ОтветJibuu   సమాధానంu   คำตอบu   答案answeranswer_prefixreturnc                 C   sH   || vrdS |  |d  }td|dd}|r"|d dS dS )N z	\d+\.?\d*,.)splitstriprefindallreplacerstrip)r   r   answer_textnumbers r'   P/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/simple_eval_mgsm.pyparse_answer[   s
   r)   target
predictionc                 C   s8   d|v r| d d}| dd} |dd}| |kS )Nr   0r   r   )r$   r#   )r*   r+   r'   r'   r(   
score_mgsmi   s
   r-   langc                 C   s   t |  }g }tj|3}| d D ] }| d\}}d|v r-t	d| d|
||| d qW d    |S 1 sBw   Y  |S )Nzutf-8	r   ztargets z contains a decimal point.)inputstargetsr.   )LANG_TO_FPATHurllibrequesturlopenreaddecode
splitlinesr    r   
ValueErrorappend)r.   fpathexamplesfliner0   r1   r'   r'   r(   get_lang_exampless   s   
r?   c                  C   s(   g } t D ]}|dkrq| t|7 } q| S )Nr   )ALL_LANGUAGESr?   )r<   r.   r'   r'   r(   get_all_examples   s   rA   c                	   @   sD   e Zd Zddefdededeee  fddZde	d	e
fd
dZdS )MGSMEval   @   num_examples_per_langnum_threads	languagesc                 C   s|   |d u rt }n|D ]}|t vrtd| dt  q	|| _|| _|| _g }| jD ]}t|}||d | j  q(|| _d S )Nz	language z. is not a valid language. It should be one in )r@   r9   
_languages_num_examples_per_lang_num_threadsr?   extendr<   )selfrE   rF   rG   languager<   r.   lang_examplesr'   r'   r(   __init__   s$   

zMGSMEval.__init__samplerr   c                    s<   dt ttf f fdd}tj|| j| jd}tj|ddS )Nexamplec              
      s   | d }|t v r
dnd}| d }t| } j|j| d dddg}z |}W n ty< } zd	}W Y d }~nd }~ww t| }t||}	t||	}
tj	
tj|t|d
d|
||	d}|t|d
dg }t||
|||
||
idS )Nr.   group_latingroup_non_latinr1   r0   )inputuser)contentroler   	assistant)prompt_messagesnext_messagescorecorrect_answerextracted_answer)htmlr[   convometrics)LATIN_LANGUAGESLANG_TO_INSTRUCTIONS_pack_messageformat	ExceptionLANG_TO_ANSWER_PREFIXr)   r-   common	jinja_envfrom_stringr   renderdictr   )rQ   rM   latin_languager\   instructoinrY   response_texter   r]   r[   r^   r_   rP   r'   r(   fn   s@   



zMGSMEval.__call__.<locals>.fn)rF   )meanstd)default_stats)rk   strrg   map_with_progressr<   rJ   aggregate_results)rL   rP   rq   resultsr'   rp   r(   __call__   s
   $
zMGSMEval.__call__N)__name__
__module____qualname__r@   intr   listru   rO   r   r   ry   r'   r'   r'   r(   rB      s    

rB   )__doc__r!   r3   typingr   sglang.testr   rg   sglang.test.simple_eval_commonr   r   r   r   r   r@   ra   NON_LATIN_LANGUAGESr2   rb   rf   ru   r)   boolr-   r~   rk   r?   rA   rB   r'   r'   r'   r(   <module>   sd   %
	