o
    i                     @   s   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 d dlmZ d dlmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ eeZdedee deee B fddZ G dd deZ!dS )    )ThreadPoolExecutor)Any)ModelConfig)ChatCompletionMessageParamConversationMessageparse_chat_messagesparse_chat_messages_async)init_logger)cached_get_tokenizer)MistralTokenizer)
make_async   )
DictPrompt)parse_dec_only_prompt)
ChatParams)BaseRenderer	tokenizermessagesreturnc              
   K   sz   ddl m} z
| j|fi |W S  t|fy% } ztt||d }~w ty< } ztd tt||d }~ww )Nr   )MistralCommonExceptionzBAn error occurred in `mistral_common` while applying chat template)	mistral_common.exceptionsr   apply_chat_templateAssertionError
ValueErrorstr	Exceptionlogger	exception)r   r   kwargsr   e r    L/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/renderers/mistral.pysafe_apply_chat_template   s   r"   c                       s   e Zd Zededeeef ddfddZdedeeef ddf fdd	Z	e
dedB fd
dZdefddZdee dedeee ef fddZdee dedeee ef fddZ  ZS )MistralRendererconfigtokenizer_kwargsr   r   c                 C   s
   | ||S Nr    )clsr$   r%   r    r    r!   from_config6   s   
zMistralRenderer.from_configNc                    sP   t  | |jrd }n	tddti|}|| _tdd| _tt	| jd| _
d S )Ntokenizer_clsr   )max_workers)executorr    )super__init__skip_tokenizer_initr
   r   
_tokenizerr   _apply_chat_template_executorr   r"   _apply_chat_template_async)selfr$   r%   r   	__class__r    r!   r-   >   s   zMistralRenderer.__init__c                 C   s   | j S r&   )r/   )r2   r    r    r!   r   T   s   zMistralRenderer.tokenizerc                 C   s   | j }|d u rtd|S )Nz7Tokenizer not available when `skip_tokenizer_init=True`)r   r   )r2   r   r    r    r!   get_tokenizerX   s   zMistralRenderer.get_tokenizerr   paramsc           	      C   sd   |   }t|| jdd\}}}t||fi | }t|}|d ur&||d< |d ur.||d< ||fS Nstring)content_formatmulti_modal_datamulti_modal_uuids)r5   r   r$   r"   get_apply_chat_template_kwargsr   	r2   r   r6   r   conversationmm_datamm_uuids
prompt_rawpromptr    r    r!   render_messages_   s$   zMistralRenderer.render_messagesc           	         st   |   }t|| jddI d H \}}}| j||fi | I d H }t|}|d ur.||d< |d ur6||d< ||fS r7   )r5   r   r$   r1   r<   r   r=   r    r    r!   render_messages_asyncy   s&   z%MistralRenderer.render_messages_async)__name__
__module____qualname__classmethodr   dictr   r   r(   r-   propertyr   r   r5   listr   r   tupler   r   rC   rD   __classcell__r    r    r3   r!   r#   5   sB    


r#   N)"concurrent.futuresr   typingr   vllm.configr   vllm.entrypoints.chat_utilsr   r   r   r   vllm.loggerr	   vllm.tokenizersr
   vllm.tokenizers.mistralr   vllm.utils.async_utilsr   inputsr   inputs.preprocessr   r6   r   protocolr   rE   r   rK   r   intr"   r#   r    r    r    r!   <module>   s*   

