o
    
۾iX0                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddlmZmZ erbd dlmZ d dl m!Z!m"Z" G dd deZ#dS )    N)ABCabstractmethod)Sequence)TYPE_CHECKINGAnyoverload)EmbedsPrompt
TextPromptTokensPrompt)TokenizerLike)AsyncMicrobatchTokenizer   )safe_load_prompt_embeds)
DictPromptEncoderDecoderDictPromptEncoderDecoderTokPrompt	TokPrompt)extract_target_prompt)
ChatParamsTokenizeParams)ModelConfig)ChatCompletionMessageParamConversationMessagec                       s  e Zd Zeedddeeef dd fddZdI fdd	Z	e
ededB fd
dZdefddZdefddZdeeB defddZdeeeB  dee fddZdeeeB  dee fddZeded dedeed ef fddZded dedeed ef fddZdededefd d!Zdededefd"d#Zdedefd$d%Z dedefd&d'Z!de"dede#fd(d)Z$de"dede#fd*d+Z%e&deeB dedefd,d-Z'e&de(dede(fd.d-Z'e&de"dede#fd/d-Z'dedede)fd0d-Z'dee dedee) fd1d2Z*e&deeB dedefd3d4Z+e&de(dede(fd5d4Z+e&de"dede#fd6d4Z+dedede)fd7d4Z+dee dedee) fd8d9Z,deee)B  d:eeef dB fd;d<Z-dd=deeeB  d>ed:eeef dB fd?d@Z.dd=deeeB  d>ed:eeef dB fdAdBZ/dd=dCeed  dDed>ed:eeef dB fdEdFZ0dd=dCeed  dDed>ed:eeef dB fdGdHZ1  Z2S )JBaseRendererconfigr   tokenizer_kwargsreturnc                 C      t NNotImplementedError)clsr   r    r"   K/home/ubuntu/.local/lib/python3.10/site-packages/vllm/renderers/protocol.pyfrom_config   s   zBaseRenderer.from_configNc                    s   t    || _d | _d S r   )super__init__r   _async_tokenizer)selfr   	__class__r"   r#   r&   (   s   

zBaseRenderer.__init__c                 C   r   r   r   r(   r"   r"   r#   	tokenizer0   s   zBaseRenderer.tokenizerc                 C   s   | j }|d u rtd|S )Nz7Tokenizer not available when `skip_tokenizer_init=True`)r,   
ValueError)r(   r,   r"   r"   r#   get_tokenizer5   s   zBaseRenderer.get_tokenizerc                 C   s   | j d u rt|  | _ | j S r   )r'   r   r.   r+   r"   r"   r#   get_async_tokenizer<   s   
z BaseRenderer.get_async_tokenizerpromptc                 C   s$   t |trt| j|}t|d}|S )N)prompt_embeds)
isinstancebytesr   r   r   )r(   r0   embedsr"   r"   r#   render_promptC   s   

zBaseRenderer.render_promptpromptsc                    s&   t |dkr
td fdd|D S )Nr   z!You must pass at least one promptc                    s   g | ]}  |qS r"   )r5   .0r0   r+   r"   r#   
<listcomp>T   s    z/BaseRenderer.render_prompts.<locals>.<listcomp>)lenr-   r(   r6   r"   r+   r#   render_promptsM   s   zBaseRenderer.render_promptsc                    s   |  |S r   )r<   r;   r"   r"   r#   render_prompts_asyncV   s   
z!BaseRenderer.render_prompts_asyncmessagesr   paramsr   c                 C   r   r   r   r(   r>   r?   r"   r"   r#   render_messages\   s   zBaseRenderer.render_messagesc                    s   |  ||S r   rA   r@   r"   r"   r#   render_messages_asyncd   s   z"BaseRenderer.render_messages_asyncc                 C   s4   |   }|j|d fi | }tdd|i|S Nr0   prompt_token_idsr"   )r.   encodeget_encode_kwargsr
   r(   r0   r?   r,   rE   r"   r"   r#   _tokenize_promptl   s   zBaseRenderer._tokenize_promptc                    s<   |   }|j|d fi | I d H }tdd|i|S rD   )r/   rF   rG   r
   rH   r"   r"   r#   _tokenize_prompt_asyncy   s   z#BaseRenderer._tokenize_prompt_asyncc                 C   s   |   }||d |d< |S NrE   r0   )r.   decoder(   r0   r,   r"   r"   r#   _detokenize_prompt   s   zBaseRenderer._detokenize_promptc                    s&   |   }||d I d H |d< |S rK   )r/   rL   rM   r"   r"   r#   _detokenize_prompt_async   s   z%BaseRenderer._detokenize_prompt_asyncc                 C   s>   |  |d ||d d u rd n|  |d |}}t||dS )Nencoder_promptdecoder_promptrP   rQ   )tokenize_promptr   r(   r0   r?   
enc_prompt
dec_promptr"   r"   r#   _tokenize_enc_dec_prompt   s   	z%BaseRenderer._tokenize_enc_dec_promptc                    sR   t | |d ||d d u rt dn| |d |I d H \}}t||dS )NrP   rQ   r   rR   )asynciogathertokenize_prompt_asyncsleepr   rT   r"   r"   r#   _tokenize_enc_dec_prompt_async   s   
	z+BaseRenderer._tokenize_enc_dec_prompt_asyncc                 C      d S r   r"   r(   r0   r?   r"   r"   r#   rS         zBaseRenderer.tokenize_promptc                 C   r]   r   r"   r^   r"   r"   r#   rS      r_   c                 C   r]   r   r"   r^   r"   r"   r#   rS      r_   c                 C   st   d|v r
|  ||S d|vrd|vr|| j|}| ||}|jr3d|vr3d|vr.td| |}|| j|S NrP   rE   r1   r0   z'Cannot run detokenization on embeddings)rW   apply_pre_tokenizationr,   rI   needs_detokenizationRuntimeErrorrN   apply_post_tokenizationr^   r"   r"   r#   rS      s   
c                    s    fdd|D S )Nc                       g | ]} | qS r"   )rS   r7   r?   r(   r"   r#   r9      s    z1BaseRenderer.tokenize_prompts.<locals>.<listcomp>r"   r(   r6   r?   r"   rf   r#   tokenize_prompts   s   zBaseRenderer.tokenize_promptsc                       d S r   r"   r^   r"   r"   r#   rZ         z"BaseRenderer.tokenize_prompt_asyncc                    ri   r   r"   r^   r"   r"   r#   rZ      rj   c                    ri   r   r"   r^   r"   r"   r#   rZ      rj   c                    s   d|v r|  ||I d H S d|vr&d|vr&|| j|}| ||I d H }|jr=d|vr=d|vr5td| |I d H }|| j|S r`   )r\   ra   r,   rJ   rb   rc   rO   rd   r^   r"   r"   r#   rZ      s   c                    s"   t j fdd|D  I d H S )Nc                 3   s    | ]	} | V  qd S r   )rZ   r7   rf   r"   r#   	<genexpr>  s    z6BaseRenderer.tokenize_prompts_async.<locals>.<genexpr>)rX   rY   rg   r"   rf   r#   tokenize_prompts_async  s   
z#BaseRenderer.tokenize_prompts_asyncprompt_extrasc                 C   s,   |sd S |D ]}t | j|}|| qd S r   )r   r   update)r(   r6   rm   r0   target_promptr"   r"   r#   _apply_prompt_extras  s   z!BaseRenderer._apply_prompt_extras)rm   
tok_paramsc                C   s>   |  |}| jjr| || |S | ||}| || |S r   )r<   r   is_multimodal_modelrp   rh   r(   r6   rq   rm   dict_promptstok_promptsr"   r"   r#   render_cmpl(  s   
zBaseRenderer.render_cmplc                   s4   |  |I d H }| ||I d H }| || |S r   )r=   rl   rp   rs   r"   r"   r#   render_cmpl_async>  s
   zBaseRenderer.render_cmpl_asyncconversationschat_paramsc                   sn    fdd|D }t t d   }t t  }|D ]\}}	|| ||	 q||}
|
| ||
fS )Nc                    re   r"   rB   r8   conversationry   r(   r"   r#   r9   X      
z,BaseRenderer.render_chat.<locals>.<listcomp>r   )listr   appendrh   rp   r(   rx   ry   rq   rm   renderedout_conversationsrt   convr0   ru   r"   r|   r#   render_chatP  s   

zBaseRenderer.render_chatc                   s    fdd|D }t t d   }t t  }tj| I d H D ]\}}	|| ||	 q||I d H }
|
| ||
fS )Nc                    re   r"   )rC   rz   r|   r"   r#   r9   r  r}   z2BaseRenderer.render_chat_async.<locals>.<listcomp>r   )r~   r   rX   rY   r   rl   rp   r   r"   r|   r#   render_chat_asyncj  s   

zBaseRenderer.render_chat_async)r   r   r   N)3__name__
__module____qualname__classmethodr   dictstrr   r$   r&   propertyr   r,   r.   r   r/   r   r3   r5   r   r~   r<   r=   r   tuplerA   rC   r	   r   r
   rI   rJ   rN   rO   r   r   rW   r\   r   rS   r   r   rh   rZ   rl   rp   rv   rw   r   r   __classcell__r"   r"   r)   r#   r      s   




	



















 
r   )$rX   abcr   r   collections.abcr   typingr   r   r   vllm.inputsr   r	   r
   vllm.tokenizersr   vllm.utils.async_utilsr   embed_utilsr   inputsr   r   r   r   inputs.preprocessr   r?   r   r   vllm.configr   vllm.entrypoints.chat_utilsr   r   r   r"   r"   r"   r#   <module>   s   