o
    پi	                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z
d dlmZ d dlmZmZ dZdd Zdd	 Zd
d Zdd Zdd Zedkrze  Zejdedd ejdee dd ejdedd ejdedd e ZeeZdS dS )    N)Optional)get_or_create_event_loop)download_and_cache_file
read_jsonliigc                 C   s0   d| | d  d }|r|d| | d  7 }|S )Nz
Question: questionz
Answer: answer )linesiinclude_answerretr	   r	   U/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/few_shot_gsm8k_engine.pyget_one_example   s   r   c                 C   s*   d}t |D ]}|t| |dd 7 }q|S )N Tz

)ranger   )r
   kr   r   r	   r	   r   get_few_shot_examples   s   r   c                 C   sP   |  dd} td| }t|dk rtS zt|d W S  ty'   t Y S w )N,r   z\d+   )replacerefindalllenINVALIDastliteral_evalSyntaxError)
answer_strnumbersr	   r	   r   get_answer_value   s   r!   c              	      s<   g }|D ]}| t| || qtj| I d H }|S N)appendasynciocreate_taskasync_generategather)enginepromptssampling_paramtaskspromptoutputsr	   r	   r   concurrent_generate*   s   r.   c                 C   s  t j| jdd}| jd u rd}t|}n| j}tt|}| j}| j}t	||}g }g }	t
t|d | D ]}
|t||
d |	t||
 d  q6tdd |	D sXJ dd	 |D }g }t|D ]\}
}|d
 }|| }|| qeg dddd}t }t }|t|||}t | }|  g }|D ]}|t|d  qtt|t|	k}tt|tk}tdd |D }|| }td|d td|d td|dd td|dd |||dS )Nerror)
model_path	log_levelzchttps://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonlFr   c                 s   s    | ]}|t kV  qd S r"   )r   ).0lr	   r	   r   	<genexpr>J   s    zrun_eval.<locals>.<genexpr>c                 S   s   g | ]}d |iqS )r   r	   )r2   qr	   r	   r   
<listcomp>K   s    zrun_eval.<locals>.<listcomp>r   )Questionz
Assistant:z<|separator|>i   r   )stopmax_new_tokenstemperaturetextc                 s   s    | ]	}|d  d V  qdS )	meta_infocompletion_tokensNr	   )r2   outputr	   r	   r   r4   t   s    
z
Accuracy: z.3fz	Invalid: z	Latency: z szOutput throughput: z token/s)accuracylatencyoutput_throughput)sglEnginer0   local_data_pathr   listr   num_questions	num_shotsr   r   r   r#   r   r!   all	enumeratetimeperf_counterr   run_until_completer.   shutdownnpmeanarrayr   sumprint)argsr(   urlfilenamer
   rF   rG   few_shot_examples	questionslabelsr   	argumentsr)   argr5   r,   r*   ticloopr-   r@   predsr>   accinvalidnum_output_tokensrA   r	   r	   r   run_eval3   sb   



ra   __main__z--model-pathz%meta-llama/Meta-Llama-3.1-8B-Instruct)typedefaultz--local-data-pathz--num-shots   z--num-questions   )argparser   r$   r   rJ   typingr   numpyrN   sglangrB   sglang.srt.utilsr   sglang.utilsr   r   r   r   r   r!   r.   ra   __name__ArgumentParserparseradd_argumentstrint
parse_argsrS   metricsr	   r	   r	   r   <module>   s6    	S