o
    5ti                      @   s\   d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ edG dd de	ZdS )	    )DictListOptionalTupleUnion)register_model)LocalCompletionsAPI)handle_stop_sequenceszsglang-generatec                       s   e Zd Z		d fdd	Z				ddeeee  ee ee ef de	e d	ed
efddZ
e		ddeeee f deee  dee d
eeeef  fddZedeeee f d
ee fddZedd Z  ZS )SGLANGGENERATEAPINhuggingfacec                    s   t  jd||d| d S )N)base_urltokenizer_backend )super__init__)selfr   r   kwargs	__class__r   V/home/ubuntu/.local/lib/python3.10/site-packages/lm_eval/models/sglang_generate_API.pyr   
   s
   
zSGLANGGENERATEAPI.__init__F  messages
gen_kwargsseedreturnc                 K   s   t |tst |d trdnd}|rV|dd d|v r"|d}n|d| j}|dd}	t|dd |}
d	||	|
d
|i}|rM|d|i |S |d|i |S |r\J d|ddddddd}|S )Nr   TF	do_sample
max_tokensmax_gen_tokstemperatureuntilsampling_params)max_new_tokensr   stoptext	input_idsz0Logprobs are only supported for tokenized inputs   )r!   r   )r$   r    logprob_start_lentop_logprobs_numreturn_logprob)
isinstancestrpop_max_gen_toksr	   update)r   r   generater   r   eosr   	is_stringr   r   r"   requestr   r   r   _create_payload   sF   z!SGLANGGENERATEAPI._create_payloadoutputstokensctxlensc           	      K   s   g }t | ts
| g} t| |D ]>\}}|d }|dksJ dtdd |d |d  D }tdd t|d |d  |d |d  D }|||f q|S )	N	meta_infor   z%Context length must be greater than 0c                 s   s    | ]}|d  V  qdS )r   Nr   ).0xr   r   r   	<genexpr>N   s    z3SGLANGGENERATEAPI.parse_logprobs.<locals>.<genexpr>input_token_logprobsc                 s   s(    | ]\}}|d  |d d  kV  qdS )r%   r   Nr   )r7   r8   yr   r   r   r9   O   s
    
input_top_logprobs)r)   listzipsumallappend)	r3   r4   r5   r   reschoicectxlenlogprobs	is_greedyr   r   r   parse_logprobsA   s   
z SGLANGGENERATEAPI.parse_logprobsc                 K   s0   g }t | ts
| g} | D ]	}||d  q|S )Nr#   )r)   r=   rA   )r3   r   rB   outr   r   r   parse_generationsY   s   
z#SGLANGGENERATEAPI.parse_generationsc                 C   s   dS )N r   )r   r   r   r   api_keyb   s   zSGLANGGENERATEAPI.api_key)Nr   )FNr   N)NN)__name__
__module____qualname__r   r   r   intdictr*   r   r2   staticmethodr   r   floatboolrG   rI   propertyrK   __classcell__r   r   r   r   r
      sB    
-
$r
   N)typingr   r   r   r   r   lm_eval.api.registryr   !lm_eval.models.openai_completionsr   lm_eval.models.utilsr	   r
   r   r   r   r   <module>   s    