o
    -i                     @   s   U d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ ddlmZ ee	B Zeed< d	ed
efddZG dd deZdS )    N)Path)	TypeAlias)AutoTokenizerPreTrainedTokenizerPreTrainedTokenizerFast))get_sentence_transformer_tokenizer_config   )TokenizerLikeHfTokenizer	tokenizerreturnc                    s   t  }jj tt  tdr9t	t
 t j W d   n1 s4w   Y  G  fdddj}djj |_||_|S )z
    By default, transformers will recompute multiple tokenizer properties
    each time they are called, leading to a significant slowdown.
    This proxy caches these properties for faster access.
    
vocab_sizeNc                       s   e Zd Zedee ffddZedee ffddZedef fddZ	de
eef ffdd	Zdeffd
dZfddZdS )z-get_cached_tokenizer.<locals>.CachedTokenizerr   c                        S N self)tokenizer_all_special_idsr   O/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/tokenizers/hf.pyall_special_ids(      z=get_cached_tokenizer.<locals>.CachedTokenizer.all_special_idsc                    r   r   r   r   )tokenizer_all_special_tokensr   r   all_special_tokens,   r   z@get_cached_tokenizer.<locals>.CachedTokenizer.all_special_tokensc                    r   r   r   r   )max_token_idr   r   r   0   r   z:get_cached_tokenizer.<locals>.CachedTokenizer.max_token_idc                    r   r   r   r   )tokenizer_vocabr   r   	get_vocab4      z7get_cached_tokenizer.<locals>.CachedTokenizer.get_vocabc                    r   r   r   r   )tokenizer_lenr   r   __len__7   r   z5get_cached_tokenizer.<locals>.CachedTokenizer.__len__c                    s
   t  ffS r   )get_cached_tokenizerr   )r   r   r   
__reduce__:   s   
z8get_cached_tokenizer.<locals>.CachedTokenizer.__reduce__N)__name__
__module____qualname__propertylistintr   strr   r   dictr   r   r    r   r   r   r   r   r   r   r   r   CachedTokenizer'   s    r*   Cached)copyr   r   r   lenmaxvalueshasattr
contextlibsuppressNotImplementedErrorr   	__class__r!   )r   cached_tokenizerr*   r   r)   r   r      s   

 r   c                   @   sD   e Zd ZedddddeeB dededB dedB def
d	d
ZdS )CachedHfTokenizerFN)trust_remote_coderevisiondownload_dirpath_or_repo_idr7   r8   r9   r   c             
   O   s   zt j|g|R |||d|}W n# ty5 } z|s/dt|v s(dt|v r/d}	t|	||d }~ww t||}
t|
trU|
ddrUdd |j	
 D }|| t|S )	N)r7   r8   	cache_dirz,does not exist or is not currently imported.z*requires you to execute the tokenizer filezFailed to load the tokenizer. If the tokenizer is a custom tokenizer not yet available in the HuggingFace transformers library, consider setting `trust_remote_code=True` in LLM or using the `--trust-remote-code` flag in the CLI.do_lower_caseFc                 S   s   i | ]	\}}||  qS r   )lower).0kvr   r   r   
<dictcomp>r   s    z5CachedHfTokenizer.from_pretrained.<locals>.<dictcomp>)r   from_pretrained
ValueErrorr'   RuntimeErrorr   
isinstancer(   getspecial_tokens_mapitemsadd_special_tokensr   )clsr:   r7   r8   r9   argskwargsr   eerr_msgencoder_configrG   r   r   r   rB   D   sB   



z!CachedHfTokenizer.from_pretrained)	r!   r"   r#   classmethodr'   r   boolr
   rB   r   r   r   r   r6   C   s     r6   )r1   r,   pathlibr   typingr   transformersr   r   r   vllm.transformers_utils.configr   protocolr	   r
   __annotations__r   r6   r   r   r   r   <module>   s   
2