o
    -ix                     @   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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)
TextPromptTokensPrompt)init_logger)cached_get_tokenizer)MistralTokenizer)
make_async   )RendererLike	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   S/home/ubuntu/veenaModal/venv/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ee eeB f fddZdee deee eeB f fddZ  ZS )MistralRendererconfigtokenizer_kwargsr   r   c                 C   s
   | ||S Nr   )clsr#   r$   r   r   r    from_config4   s   
zMistralRenderer.from_configNc                    sT   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__r#   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.   )r1   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   )r1   r   r   r   r    get_tokenizerX   s   zMistralRenderer.get_tokenizerr   c           	      K   sv   |   }t|| jdd\}}}t||fi |}t|tr"t|dnt|d}|d ur/||d< |d ur7||d< ||fS Nstring)content_format)prompt)prompt_token_idsmulti_modal_datamulti_modal_uuids)r4   r   r#   r!   
isinstancer   r	   r
   	r1   r   r   r   conversationmm_datamm_uuids
prompt_rawr8   r   r   r    render_messages_   s    zMistralRenderer.render_messagesc           	         s   |   }t|| jddI d H \}}}| j||fi |I d H }t|tr*t|dnt|d}|d ur7||d< |d ur?||d< ||fS r5   )r4   r   r#   r0   r<   r   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   r4   listr   tupler   r	   r
   rB   rC   __classcell__r   r   r2   r    r"   3   s:    


r"   N)concurrent.futuresr   typingr   vllm.configr   vllm.entrypoints.chat_utilsr   r   r   r   vllm.inputsr	   r
   vllm.loggerr   vllm.tokenizersr   vllm.tokenizers.mistralr   vllm.utils.async_utilsr   protocolr   rD   r   rJ   r   intr!   r"   r   r   r   r    <module>   s&   

