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d D  tdrBt	t
 tjW d   n1 s=w   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.
    c                 s   s    | ]}t |V  qd S N)len).0tok r   H/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/tokenizers/hf.py	<genexpr>   s    z'get_cached_tokenizer.<locals>.<genexpr>
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	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 r   r   self)tokenizer_all_special_idsr   r   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   2   r   z:get_cached_tokenizer.<locals>.CachedTokenizer.max_token_idc                    r   r   r   r   )max_chars_per_tokenr   r   r   6   r   zAget_cached_tokenizer.<locals>.CachedTokenizer.max_chars_per_tokenc                    r   r   r   r   )tokenizer_vocabr   r   	get_vocab:      z7get_cached_tokenizer.<locals>.CachedTokenizer.get_vocabc                    r   r   r   r   )tokenizer_lenr   r   __len__=   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   r   dictr    r#   r%   r   r   r   r   r   r   r"   r   r   r   CachedTokenizer)   s    r/   Cached)copyr   r   r    r   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_idr;   r<   r=   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)r;   r<   	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)r   kvr   r   r   
<dictcomp>x   s    z5CachedHfTokenizer.from_pretrained.<locals>.<dictcomp>)r   from_pretrained
ValueErrorr,   RuntimeErrorr   
isinstancer-   getspecial_tokens_mapitemsadd_special_tokensr$   )clsr>   r;   r<   r=   argskwargsr   eerr_msgencoder_configrJ   r   r   r   rE   J   sB   



z!CachedHfTokenizer.from_pretrained)	r&   r'   r(   classmethodr,   r   boolr
   rE   r   r   r   r   r:   I   s     r:   )r5   r1   pathlibr   typingr   transformersr   r   r   vllm.transformers_utils.configr   protocolr	   r
   __annotations__r$   r:   r   r   r   r   <module>   s   
8