§
    Ý˜ºh�¡  ã                   óž  — d Z ddlZ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 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d
dl.m/Z/m0Z0m1Z1  e1j2        e3¦  «        Z4dZ5dZ6dZ7dZ8dZ9e$dz  Z$eeeedœZ:e5e8dœZ; e0e$¦  «         G d„ de)¦  «        ¦   «         Z<dS )z‘
Tokenization classes for fast tokenizers (provided by HuggingFace's tokenizers library). For slow (python) tokenizers
see tokenization_utils.py
é    N)Údefaultdict)ÚIterable)ÚAnyÚOptionalÚUnion)ÚEncoding)Ú	Tokenizer)ÚDecoder)Ú
BpeTrainerÚUnigramTrainerÚWordLevelTrainerÚWordPieceTraineré   )Úconvert_slow_tokenizer)Úconvert_gguf_tokenizer)Úload_gguf_checkpoint)ÚPreTrainedTokenizer)
ÚINIT_TOKENIZER_DOCSTRINGÚ
AddedTokenÚBatchEncodingÚPreTokenizedInputÚPreTokenizedInputPairÚPreTrainedTokenizerBaseÚSpecialTokensMixinÚ	TextInputÚTextInputPairÚTruncationStrategy)ÚPaddingStrategyÚadd_end_docstringsÚloggingztokenizer.jsonzspecial_tokens_map.jsonztokenizer_config.jsonztokenizer.modelzadded_tokens.jsonu¡  
        tokenizer_object ([`tokenizers.Tokenizer`]):
            A [`tokenizers.Tokenizer`] object from ðŸ¤— tokenizers to instantiate from. See [Using tokenizers from ðŸ¤—
            tokenizers](../fast_tokenizers) for more information.
        tokenizer_file ([`str`]):
            A path to a local JSON file representing a previously serialized [`tokenizers.Tokenizer`] object from ðŸ¤—
            tokenizers.
)ÚBPEÚUnigramÚ	WordLevelÚ	WordPiece)Útokenizer_fileÚ
vocab_filec            )       ó~  ‡ — e Zd ZU dZeZdZeed<   ˆ fd„Z	e
defd„¦   «         Ze
defd„¦   «         Ze
defd„¦   «         Zdeeef         fd	„Ze
deeef         fd
„¦   «         Ze
deeef         fd„¦   «         Ze
deeef         fd„¦   «         Zdeeef         fd„Zdefd„Zdefd„Ze
defd„¦   «         Ze
defd„¦   «         Z	 	 	 	 	 	 	 dFdedee         dee         dededededede eee!f         e"e         f         fd„Z#de$ee%e         f         de$ee"e         f         fd„Z&dedefd „Z'd!edee         fd"„Z(dGd#e"e$eef                  defd$„Z)dGd%edefd&„Z*	 dGd'e$ee"e         f         d(ede$ee"e         f         fd)„Z+dHd*ed%ee         d+ede"e         fd,„Z,d-e-d.e.d/ed0ed1ee         d2ee         fd3„Z/de-j0        e.j1        dd4ddddddddddddfd5e$e"e2         e"e3         e"e4         e"e5         f         d+ed-e-d.e.d/ee         d0ed6ed1ee         d2ee         d7ee         dee         dee         dededededed8ede6f&d9„Z7dde-j0        e.j1        dd4ddddddddddddfd*e$e2e4f         d:ee$e2e4f                  d+ed-e-d.e.d/ee         d0ed6ed1ee         d2ee         d7ee         dee         dee         dededededed8ede6f(d;„Z8de"e         defd<„Z9	 	 dId=e$ee"e         f         d(ed>ee         defd?„Z:	 	 dJd@e$ee;j<        f         dAe e         dBee         dCee         de e         f
dD„Z=	 	 	 dKdE„Z>ˆ xZ?S )LÚPreTrainedTokenizerFastaQ  
    Base class for all fast tokenizers (wrapping HuggingFace tokenizers library).

    Inherits from [`~tokenization_utils_base.PreTrainedTokenizerBase`].

    Handles all the shared methods for tokenization and special tokens, as well as methods for
    downloading/caching/loading pretrained tokenizers, as well as adding tokens to the vocabulary.

    This class also contains the added tokens in a unified way on top of all tokenizers so we don't have to handle the
    specific vocabulary augmentation methods of the various underlying dictionary structures (BPE, sentencepiece...).
    NÚslow_tokenizer_classc                 óh  •‡‡‡— |                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd¦  «        }|                      di ¦  «        }|                     dd¦  «        | _        |r|€| j        €t	          d	¦  «        ‚|�t          j        |¦  «        }	�nB|�|st          j        |¦  «        }	�n(|rt          |¦  «        }	�n|�‘t          |                     d
¦  «        ¦  «        }
|
d         d         }|
d         }|
d         }t          ||¦  «        \  }	}|                     |¦  «         t          |¦  «        dk    r|                     |¦  «         n‚| j        �!|dur | j        |i |¤Ž}t          |¦  «        }	nZ|sI|                     d
¦  «        | _        |                     dg ¦  «        | _        t          | d¬¦  «        }	d }nt	          d¦  «        ‚|	| _        |�|                     |j        ¦  «         d| _        | j        j        }|�ƒ | j        j        d(i |¤Ž |                     d|d         ¦  «         |                     d|d         ¦  «         |                     d|d         ¦  «         |                     d|d         ¦  «         n| j                             ¦   «          | j        j        }|�ž | j        j        d(i |¤Ž |                     d|d         ¦  «         |                     d|d         ¦  «         |                     d|d         ¦  «         |                     d|d         ¦  «         |                     d|d         ¦  «          t3          ¦   «         j        d(i |¤Ž | j        | j        _        d „ | j        D ¦   «         Šˆfd!„t=          |                     ¦   «         d"„ ¬#¦  «        D ¦   «         ŠtA          | j!         "                    ¦   «         ¦  «        d$„ ‰D ¦   «         z   Š‰ˆˆfd%„| j#        D ¦   «         z  Št          ‰¦  «        dk    r¦g }| j$        }‰D ]ƒ}tK          |tL          ¦  «        r|j'        ptQ          |¦  «        |v ntQ          |¦  «        |v }tK          |tP          ¦  «        rtM          ||¬&¦  «        }n||_'        | )                    |¦  «         Œ„|r|  *                    |¦  «         	 tW          j,        | j-        j.         /                    ¦   «         ¦  «        }|                     d| j        ¦  «        | j        k    rFta          tb          |                      d'¦  «        ¦  «        }| j        |d<    |d(i |¤Ž| j-        _.        d S d S # td          $ r Y d S w xY w))NÚtokenizer_objectÚ__slow_tokenizerÚ	gguf_filer%   Ú	from_slowFÚadded_tokens_decoderÚadd_prefix_spacez‚Cannot instantiate this tokenizer from a slow version. If it's based on sentencepiece, make sure you have sentencepiece installed.r&   ÚconfigÚ
model_typeÚ	tokenizerÚtokenizer_configr   Úadditional_special_tokensT)Úfrom_tiktokena9  Couldn't instantiate the backend tokenizer from one of: 
(1) a `tokenizers` library serialization file, 
(2) a slow tokenizer instance to convert or 
(3) an equivalent slow tokenizer class to instantiate and convert. 
You need to have sentencepiece or tiktoken installed to convert a slow tokenizer to a fast one.Ú
max_lengthÚtruncation_sideÚ	directionÚstrideÚtruncation_strategyÚstrategyÚ	pad_tokenÚpad_token_type_idÚpad_type_idÚpadding_sideÚlengthÚpad_to_multiple_ofc                 óF   — h | ]}t          t          |¦  «        ¦  «        ’ŒS © ©ÚhashÚrepr©Ú.0Útokens     úl/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/tokenization_utils_fast.pyú	<setcomp>z3PreTrainedTokenizerFast.__init__.<locals>.<setcomp>µ   s&   € Ð$^Ð$^Ð$^¸5¥T­$¨u©+¬+Ñ%6Ô%6Ð$^Ð$^Ð$^ó    c                 óV   •— g | ]%\  }}t          t          |¦  «        ¦  «        ‰v¯#|‘Œ&S rD   rE   )rI   ÚindexrJ   Úadded_tokens_decoder_hashs      €rK   ú
<listcomp>z4PreTrainedTokenizerFast.__init__.<locals>.<listcomp>¶   sA   ø€ ð 
ð 
ð 
á��uÝ•D˜‘K”KÑ Ô Ð(AÐAÐAð àAÐAÐArM   c                 ó   — | d         S ©Nr   rD   )Úxs    rK   ú<lambda>z2PreTrainedTokenizerFast.__init__.<locals>.<lambda>¸   s   € ÐSTÐUVÔSW€ rM   ©Úkeyc                 ó,   — g | ]}t          |¦  «        ‘ŒS rD   )ÚstrrH   s     rK   rQ   z4PreTrainedTokenizerFast.__init__.<locals>.<listcomp>»   s   € Ð;bÐ;bÐ;bÈ5½CÀ¹J¼JÐ;bÐ;bÐ;brM   c                 ó$   •— g | ]}|‰v¯|‰v¯
|‘ŒS rD   rD   )rI   rJ   ÚencoderÚtokens_to_adds     €€rK   rQ   z4PreTrainedTokenizerFast.__init__.<locals>.<listcomp>½   s7   ø€ ð 
ð 
ð 
ØÀ5ÐPWÐCWÐCWÐ\aÐivÐ\vÐ\vˆEÐ\vÐ\vÐ\vrM   )ÚspecialÚtyperD   )3ÚpopÚgetr0   r)   Ú
ValueErrorÚcopyÚdeepcopyÚTokenizerFastÚ	from_filer   r   r   ÚupdateÚlenr&   r5   Ú
_tokenizerÚinit_kwargsÚ_decode_use_source_tokenizerÚ
truncationÚenable_truncationÚ
setdefaultÚno_truncationÚpaddingÚenable_paddingÚsuperÚ__init__Úsplit_special_tokensÚencode_special_tokensr/   ÚsortedÚitemsÚlistÚadded_tokens_encoderÚkeysÚall_special_tokens_extendedÚall_special_tokensÚ
isinstancer   r]   rY   ÚappendÚ
add_tokensÚjsonÚloadsÚbackend_tokenizerÚpre_tokenizerÚ__getstate__ÚgetattrÚpre_tokenizers_fastÚ	Exception)ÚselfÚargsÚkwargsr+   Úslow_tokenizerr-   Úfast_tokenizer_filer.   r/   Úfast_tokenizerÚ
gguf_paramÚarchitectureÚtokenizer_dictr4   Úadditional_kwargsÚ_truncationÚ_paddingÚtokensÚspecial_tokensrJ   Ú
is_specialÚpre_tok_stateÚpre_tok_classrP   r[   r\   Ú	__class__s                          @@@€rK   rr   z PreTrainedTokenizerFast.__init__b   sU  øøøø€ Ø!Ÿ:š:Ð&8¸$Ñ?Ô?ÐØŸšÐ$6¸Ñ=Ô=ˆØ—J’J˜{¨DÑ1Ô1ˆ	Ø$ŸjšjÐ)9¸4Ñ@Ô@ÐØ—J’J˜{¨EÑ2Ô2ˆ	Ø%ŸzšzÐ*@À"ÑEÔEÐØ &§
¢
Ð+=¸uÑ EÔ EˆÔàð 	˜Ð/°DÔ4MÐ4UÝð0ñô ð ð
 Ð'Ý!œ]Ð+;Ñ<Ô<ˆN‰NØ Ð,°YÐ,å*Ô4Ð5HÑIÔIˆN‰NØð 	å3°NÑCÔCˆN‰NØÐ"å-¨f¯jªj¸Ñ.FÔ.FÑGÔGˆJØ% hÔ/°Ô=ˆLØ'¨Ô4ˆNØ)Ð*<Ô=ÐÝ0FÀ|ÐUcÑ0dÔ0dÑ-ˆNÐ-Ø�MŠMÐ*Ñ+Ô+Ð+ÝÐ$Ñ%Ô%¨Ò)Ð)Ø—’Ð/Ñ0Ô0Ð0øØÔ&Ð2°~ÈUÐ7RÐ7Rà6˜TÔ6¸ÐGÀÐGÐGˆNÝ3°NÑCÔCˆNˆNØð 	à$Ÿjšj¨Ñ6Ô6ˆDŒOØ-3¯ZªZÐ8SÐUWÑ-XÔ-XˆDÔ*Ý3°DÈÐMÑMÔMˆNØ!ˆNˆNåðrñô ð ð )ˆŒàÐ%Ø�MŠM˜.Ô4Ñ5Ô5Ð5à,1ˆÔ)à”oÔ0ˆàÐ"Ø-ˆDŒOÔ-Ð<Ð<°Ð<Ð<Ð<Ø×Ò˜l¨K¸Ô,EÑFÔFÐFØ×ÒÐ/°¸[Ô1IÑJÔJÐJØ×Ò˜h¨°HÔ(=Ñ>Ô>Ð>Ø×ÒÐ3°[ÀÔ5LÑMÔMÐMÐMàŒO×)Ò)Ñ+Ô+Ð+à”?Ô*ˆØÐØ*ˆDŒOÔ*Ð6Ð6¨XÐ6Ð6Ð6Ø×Ò˜k¨8°KÔ+@ÑAÔAÐAØ×ÒÐ1°8¸MÔ3JÑKÔKÐKØ×Ò˜n¨h°{Ô.CÑDÔDÐDØ×Ò˜l¨H°XÔ,>Ñ?Ô?Ð?Ø×ÒÐ2°HÐ=QÔ4RÑSÔSÐSð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø04Ô0IˆŒÔ-à$^Ð$^ÀDÔD]Ð$^Ñ$^Ô$^Ð!ð
ð 
ð 
ð 
å &Ð';×'AÒ'AÑ'CÔ'CÈÈÐ XÑ XÔ Xð
ñ 
ô 
ˆõ
 �tÔ0×5Ò5Ñ7Ô7Ñ8Ô8Ð;bÐ;bÐTaÐ;bÑ;bÔ;bÑbˆàð 
ð 
ð 
ð 
ð 
Ø#Ô?ð
ñ 
ô 
ñ 	
ˆõ ˆ}ÑÔ Ò!Ð!ØˆFØ!Ô4ˆNØ&ð 
%ð 
%�õ " %­Ñ4Ô4ð6�U”]ÐB¥c¨%¡j¤j°NÐ&Bøå˜U™œ ~Ð5ð õ
 ˜e¥SÑ)Ô)ð /Ý& u°jÐAÑAÔA�E�Eà$.�E”MØ—’˜eÑ$Ô$Ð$Ð$Øð (Ø—’ Ñ'Ô'Ð'ð
	Ý œJ tÔ'=Ô'K×'XÒ'XÑ'ZÔ'ZÑ[Ô[ˆMØ× Ò Ð!3°TÔ5JÑKÔKÈtÔOdÒdÐdÝ 'Õ(;¸]×=NÒ=NÈvÑ=VÔ=VÑ WÔ W�Ø48Ô4I�Ð0Ñ1Ø7D°}Ð7UÐ7UÀ}Ð7UÐ7U�Ô&Ô4Ð4Ð4ð eÐdøõ ð 	ð 	ð 	ð ˆDˆDð		øøøs   ÔBV# Ö#
V1Ö0V1Úreturnc                 ó   — dS )NTrD   ©r‡   s    rK   Úis_fastzPreTrainedTokenizerFast.is_fastÞ   s   € àˆtrM   c                 óÒ   — d| j         v r]| j         d                              d¦  «        r=t          | d¦  «        r+| j        r$t          j                             | j        ¦  «        S dS dS )zÌ
        `bool`: Whether or not the slow tokenizer can be saved. For a sentencepiece based slow tokenizer, this
        can only be `True` if the original `"sentencepiece.model"` was not deleted.
        r&   z.modelFT)Úvocab_files_namesÚendswithÚhasattrr&   ÚosÚpathÚisfiler›   s    rK   Úcan_save_slow_tokenizerz/PreTrainedTokenizerFast.can_save_slow_tokenizerâ   si   € ð ˜4Ô1Ð1Ð1°dÔ6LÈ\Ô6Z×6cÒ6cÐdlÑ6mÔ6mÐ1Ý�t˜\Ñ*Ô*ð 7¨t¬ð 7å”w—~’~ d¤oÑ6Ô6Ð6Ø�5à�4rM   c                 ó8   — | j                              d¬¦  «        S )zP
        `int`: Size of the base vocabulary (without the added tokens).
        F©Úwith_added_tokens©rh   Úget_vocab_sizer›   s    rK   Ú
vocab_sizez"PreTrainedTokenizerFast.vocab_sizeð   s   € ð
 Œ×-Ò-ÀÐ-ÑFÔFÐFrM   c                 ó8   — | j                              d¬¦  «        S )NTr¦   )rh   Ú	get_vocabr›   s    rK   r¬   z!PreTrainedTokenizerFast.get_vocab÷   s   € ØŒ×(Ò(¸4Ð(Ñ@Ô@Ð@rM   c                 ó*   — |                       ¦   «         S ©N)r¬   r›   s    rK   ÚvocabzPreTrainedTokenizerFast.vocabú   s   € à�~Š~ÑÔÐrM   c                 óh   — d„ t          | j                             ¦   «         d„ ¬¦  «        D ¦   «         S )zÃ
        Returns the sorted mapping from string to index. The added tokens encoder is cached for performance
        optimisation in `self._added_tokens_encoder` for the slow tokenizers.
        c                 ó$   — i | ]\  }}|j         |“ŒS rD   ©Úcontent©rI   ÚvÚks      rK   ú
<dictcomp>z@PreTrainedTokenizerFast.added_tokens_encoder.<locals>.<dictcomp>  ó    € ÐmÐmÐm¡  A�”	˜1ÐmÐmÐmrM   c                 ó   — | d         S rS   rD   ©Úitems    rK   rU   z>PreTrainedTokenizerFast.added_tokens_encoder.<locals>.<lambda>  ó   € ÐdhÐijÔdk€ rM   rV   ©ru   r/   rv   r›   s    rK   rx   z,PreTrainedTokenizerFast.added_tokens_encoderþ   s9   € ð nÐm­°Ô0I×0OÒ0OÑ0QÔ0QÐWkÐWkÐ)lÑ)lÔ)lÐmÑmÔmÐmrM   c                 ó4   — | j                              ¦   «         S )z¦
        Returns the added tokens in the vocabulary as a dictionary of index to AddedToken.

        Returns:
            `dict[str, int]`: The added tokens.
        )rh   Úget_added_tokens_decoderr›   s    rK   r/   z,PreTrainedTokenizerFast.added_tokens_decoder  s   € ð Œ×7Ò7Ñ9Ô9Ð9rM   c                 óh   — d„ t          | j                             ¦   «         d„ ¬¦  «        D ¦   «         S )z¡
        Returns the added tokens in the vocabulary as a dictionary of token to index.

        Returns:
            `dict[str, int]`: The added tokens.
        c                 ó$   — i | ]\  }}|j         |“ŒS rD   r²   r´   s      rK   r·   z;PreTrainedTokenizerFast.get_added_vocab.<locals>.<dictcomp>  r¸   rM   c                 ó   — | d         S rS   rD   rº   s    rK   rU   z9PreTrainedTokenizerFast.get_added_vocab.<locals>.<lambda>  r¼   rM   rV   r½   r›   s    rK   Úget_added_vocabz'PreTrainedTokenizerFast.get_added_vocab  s9   € ð nÐm­°Ô0I×0OÒ0OÑ0QÔ0QÐWkÐWkÐ)lÑ)lÔ)lÐmÑmÔmÐmrM   c                 ó   — dS )zN
        Returns True, to avoid expensive `assert tokenizer` gotchas.
        TrD   r›   s    rK   Ú__bool__z PreTrainedTokenizerFast.__bool__  s	   € ð ˆtrM   c                 ó8   — | j                              d¬¦  «        S )zD
        Size of the full vocabulary with the added tokens.
        Tr¦   r¨   r›   s    rK   Ú__len__zPreTrainedTokenizerFast.__len__  s   € ð Œ×-Ò-ÀÐ-ÑEÔEÐErM   c                 ó   — | j         S )zc
        `tokenizers.implementations.BaseTokenizer`: The Rust tokenizer used as a backend.
        )rh   r›   s    rK   r�   z)PreTrainedTokenizerFast.backend_tokenizer%  s   € ð
 ŒÐrM   c                 ó   — | j         j        S )zU
        `tokenizers.decoders.Decoder`: The Rust decoder for this tokenizer.
        )rh   Údecoderr›   s    rK   rÊ   zPreTrainedTokenizerFast.decoder,  s   € ð
 ŒÔ&Ð&rM   FTÚencodingÚreturn_token_type_idsÚreturn_attention_maskÚreturn_overflowing_tokensÚreturn_special_tokens_maskÚreturn_offsets_mappingÚreturn_lengthÚverbosec	                 óF  — |€	d| j         v }|€	d| j         v }|r|j        �|g|j        z   }	n|g}	t          t          ¦  «        }
|	D ]Ù}|
d                              |j        ¦  «         |r |
d                              |j        ¦  «         |r |
d                              |j        ¦  «         |r |
d                              |j        ¦  «         |r |
d                              |j	        ¦  «         |r-|
d                              t          |j        ¦  «        ¦  «         ŒÚ|
|	fS )a¢  
        Convert the encoding representation (from low-level HuggingFace tokenizer output) to a python Dict and a list
        of encodings, take care of building a batch from overflowing tokens.

        Overflowing tokens are converted to additional examples (like batches) so the output values of the dict are
        lists (overflows) of lists (tokens).

        Output shape: (overflows, sequence length)
        NÚtoken_type_idsÚattention_maskÚ	input_idsÚspecial_tokens_maskÚoffset_mappingrA   )Úmodel_input_namesÚoverflowingr   rw   r}   ÚidsÚtype_idsrÕ   r×   Úoffsetsrg   )r‡   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   Ú	encodingsÚencoding_dictÚes               rK   Ú_convert_encodingz)PreTrainedTokenizerFast._convert_encoding3  sV  € ð( !Ð(Ø$4¸Ô8NÐ$NÐ!Ø Ð(Ø$4¸Ô8NÐ$NÐ!à$ð 	#¨Ô)=Ð)IØ!˜
 XÔ%9Ñ9ˆIˆIà!˜
ˆIå#¥DÑ)Ô)ˆØð 	;ð 	;ˆAØ˜+Ô&×-Ò-¨a¬eÑ4Ô4Ð4à$ð CØÐ.Ô/×6Ò6°q´zÑBÔBÐBØ$ð IØÐ.Ô/×6Ò6°qÔ7GÑHÔHÐHØ)ð SØÐ3Ô4×;Ò;¸AÔ<QÑRÔRÐRØ%ð BØÐ.Ô/×6Ò6°q´yÑAÔAÐAØð ;Ø˜hÔ'×.Ò.­s°1´5©z¬zÑ:Ô:Ð:øà˜iÐ'Ð'rM   r“   c                 ót   ‡ — t          |t          ¦  «        r‰                      |¦  «        S ˆ fd„|D ¦   «         S )aX  
        Converts a token string (or a sequence of tokens) in a single integer id (or a Iterable of ids), using the
        vocabulary.

        Args:
            tokens (`str` or `Iterable[str]`): One or several token(s) to convert to token id(s).

        Returns:
            `int` or `list[int]`: The token id or list of token ids.
        c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rD   )Ú#_convert_token_to_id_with_added_voc)rI   rJ   r‡   s     €rK   rQ   zAPreTrainedTokenizerFast.convert_tokens_to_ids.<locals>.<listcomp>p  s'   ø€ ÐTÐTÐTÀE�×8Ò8¸Ñ?Ô?ÐTÐTÐTrM   )r|   rY   rä   ©r‡   r“   s   ` rK   Úconvert_tokens_to_idsz-PreTrainedTokenizerFast.convert_tokens_to_idsb  sF   ø€ õ �f�cÑ"Ô"ð 	DØ×;Ò;¸FÑCÔCÐCàTÐTÐTÐTÈVÐTÑTÔTÐTrM   rJ   c                 óL   — | j                              |¦  «        }|€| j        S |S r®   )rh   Útoken_to_idÚunk_token_id)r‡   rJ   rO   s      rK   rä   z;PreTrainedTokenizerFast._convert_token_to_id_with_added_vocr  s*   € Ø”×+Ò+¨EÑ2Ô2ˆØˆ=ØÔ$Ð$ØˆrM   rO   c                 óP   — | j                              t          |¦  «        ¦  «        S r®   )rh   Úid_to_tokenÚint)r‡   rO   s     rK   Ú_convert_id_to_tokenz,PreTrainedTokenizerFast._convert_id_to_tokenx  s   € ØŒ×*Ò*­3¨u©:¬:Ñ6Ô6Ð6rM   Ú
new_tokensc                 ón   — |r| j                              |¦  «        S | j                              |¦  «        S r®   )rh   Úadd_special_tokensr~   )r‡   rî   r”   s      rK   Ú_add_tokensz#PreTrainedTokenizerFast._add_tokens{  s7   € Øð 	BØ”?×5Ò5°jÑAÔAÐAàŒ×)Ò)¨*Ñ5Ô5Ð5rM   Úpairc                 ó6   — | j                              |¦  «        S )aG  
        Returns the number of added tokens when encoding a sequence with special tokens.

        <Tip>

        This encodes a dummy input and checks the number of added tokens, and is therefore not efficient. Do not put
        this inside your training loop.

        </Tip>

        Args:
            pair (`bool`, *optional*, defaults to `False`):
                Whether the number of added tokens should be computed in the case of a sequence pair or a single
                sequence.

        Returns:
            `int`: Number of special tokens added to sequences.
        )rh   Únum_special_tokens_to_add)r‡   rò   s     rK   rô   z1PreTrainedTokenizerFast.num_special_tokens_to_add�  s   € ð& Œ×8Ò8¸Ñ>Ô>Ð>rM   rÛ   Úskip_special_tokensc                 ó<  — t          |t          ¦  «        r| j                             |¦  «        S g }|rt	          | j        ¦  «        nt	          ¦   «         }|D ]C}t          |¦  «        }||v rŒ|                     | j                             |¦  «        ¦  «         ŒD|S )aì  
        Converts a single index or a sequence of indices in a token or a sequence of tokens, using the vocabulary and
        added tokens.

        Args:
            ids (`int` or `list[int]`):
                The token id (or token ids) to convert to tokens.
            skip_special_tokens (`bool`, *optional*, defaults to `False`):
                Whether or not to remove special tokens in the decoding.

        Returns:
            `str` or `list[str]`: The decoded token(s).
        )r|   rì   rh   rë   ÚsetÚall_special_idsr}   )r‡   rÛ   rõ   r“   Úids_to_skiprO   s         rK   Úconvert_ids_to_tokensz-PreTrainedTokenizerFast.convert_ids_to_tokens–  s¡   € õ  �c�3ÑÔð 	4Ø”?×.Ò.¨sÑ3Ô3Ð3Øˆà3FÐQ•c˜$Ô.Ñ/Ô/Ð/ÍCÉEÌEˆØð 	>ð 	>ˆEÝ˜‘J”JˆEØ˜Ð#Ð#ØØ�MŠM˜$œ/×5Ò5°eÑ<Ô<Ñ=Ô=Ð=Ð=ØˆrM   Útextrð   c                 óH   —  | j         d|||dœ|¤Ž                     ¦   «         S )N)rû   Ú	text_pairrð   rD   )Úencode_plusr“   )r‡   rû   rò   rð   r‰   s        rK   Útokenizez PreTrainedTokenizerFast.tokenize²  s2   € ØˆtÔÐk T°TÐN`ÐkÐkÐdjÐkÐk×rÒrÑtÔtÐtrM   Úpadding_strategyr;   r7   r:   rB   r@   c                 ó  ‡— | j         j        Š| j         j        }|t          j        k    r‰�| j                              ¦   «          n<|||j        | j        dœ}‰€d}	nˆfd„|D ¦   «         }	|	|k    r | j         j        di |¤Ž |t          j
        k    r|�| j                              ¦   «          dS dS |t          j        k    r|nd}
|
|�|n| j        | j        | j        | j        |dœ}||k    r | j         j        di |¤Ž dS dS )a•  
        Define the truncation and the padding strategies for fast tokenizers (provided by HuggingFace tokenizers
        library) and restore the tokenizer settings afterwards.

        The provided tokenizer has no padding / truncation strategy before the managed section. If your tokenizer set a
        padding / truncation strategy before, then it will be reset to no padding / truncation when exiting the managed
        section.

        Args:
            padding_strategy ([`~utils.PaddingStrategy`]):
                The kind of padding that will be applied to the input
            truncation_strategy ([`~tokenization_utils_base.TruncationStrategy`]):
                The kind of truncation that will be applied to the input
            max_length (`int`):
                The maximum size of a sequence.
            stride (`int`):
                The stride to use when handling overflow.
            pad_to_multiple_of (`int`, *optional*):
                If set will pad the sequence to a multiple of the provided value. This is especially useful to enable
                the use of Tensor Cores on NVIDIA hardware with compute capability `>= 7.5` (Volta).
            padding_side (`str`, *optional*):
                The side on which the model should have padding applied. Should be selected between ['right', 'left'].
                Default value is picked from the class attribute of the same name.
        N)r7   r:   r<   r9   c                 ó>   •— i | ]}|‰                      |d ¦  «        “ŒS r®   ©r`   )rI   r¶   r‘   s     €rK   r·   zFPreTrainedTokenizerFast.set_truncation_and_padding.<locals>.<dictcomp>ë  s)   ø€ ÐGÐGÐG¸1˜1˜kŸošo¨a°Ñ6Ô6ÐGÐGÐGrM   )rA   r9   Úpad_idr=   r?   rB   rD   )rh   rk   ro   r   ÚDO_NOT_TRUNCATErn   Úvaluer8   rl   r   Ú
DO_NOT_PADÚ
no_paddingÚ
MAX_LENGTHr@   Úpad_token_idr=   r>   rp   )r‡   r   r;   r7   r:   rB   r@   r’   ÚtargetÚcurrentrA   r‘   s              @rK   Úset_truncation_and_paddingz2PreTrainedTokenizerFast.set_truncation_and_paddingµ  si  ø€ ðB ”oÔ0ˆØ”?Ô*ˆàÕ"4Ô"DÒDÐDØÐ&Ø”×-Ò-Ñ/Ô/Ð/øð )Ø Ø/Ô5Ø!Ô1ð	ð ˆFð Ð"Ø��àGÐGÐGÐGÀÐGÑGÔG�à˜&Ò Ð Ø1�”Ô1Ð;Ð;°FÐ;Ð;Ð;à�Ô9Ò9Ð9ØÐ#Ø”×*Ò*Ñ,Ô,Ð,Ð,Ð,ð $Ð#ð $4µÔ7QÒ#QÐ#Q�Z�ZÐW[ˆFà Ø-9Ð-E˜\˜\È4ÔK\ØÔ+Ø!œ^Ø#Ô5Ø&8ðð ˆFð ˜6Ò!Ð!Ø.�”Ô.Ð8Ð8°Ð8Ð8Ð8Ð8Ð8ð "Ð!rM   r   Úbatch_text_or_text_pairsÚis_split_into_wordsÚreturn_tensorsrs   c                 ó¤  ‡ ‡‡‡‡‡‡‡‡— t          |t          t          f¦  «        s t          dt	          |¦  «        › d�¦  «        ‚‰                      ||||||	¬¦  «         ‰ j        j        |k    r|‰ j        _        ‰ j                             |||¬¦  «        }ˆˆˆˆˆˆˆ ˆfd„|D ¦   «         }i }|d         d         D ]Šˆfd„|D ¦   «         }||‰<   Œd„ |D ¦   «         }‰r;g }t          |¦  «        D ]$\  }\  }}||gt          |d	         ¦  «        z  z  }Œ%||d
<   |d	         D ]}‰                      ||‰¦  «         Œt          |||
¬¦  «        S )Nz:batch_text_or_text_pairs has to be a list or a tuple (got ú))r   r;   r7   r:   rB   r@   )rð   Úis_pretokenizedc                 óJ   •— g | ]}‰                      |‰‰‰‰‰‰‰	¬ ¦  «        ‘Œ S ))rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   )rá   )
rI   rË   rÍ   rÑ   rÐ   rÎ   rÏ   rÌ   r‡   rÒ   s
     €€€€€€€€rK   rQ   z>PreTrainedTokenizerFast._batch_encode_plus.<locals>.<listcomp>5  sX   ø€ ð  
ð  
ð  
ð ð ×"Ò"Ø!Ø&;Ø&;Ø*CØ+EØ'=Ø+Øð #ñ 	ô 	ð 
ð  
ð  
rM   r   c                 ó0   •— g | ]\  }}|‰         D ]}|‘ŒŒS rD   rD   )rI   r»   Ú_rà   rW   s       €rK   rQ   z>PreTrainedTokenizerFast._batch_encode_plus.<locals>.<listcomp>K  s.   ø€ ÐNÐNÐN™7˜4 ÀDÈÄIÐNÐN¸q�QÐNÐNÐNÐNrM   c                 ó"   — g | ]\  }}|D ]}|‘ŒŒS rD   rD   )rI   r  r»   rà   s       rK   rQ   z>PreTrainedTokenizerFast._batch_encode_plus.<locals>.<listcomp>M  s)   € ÐSÐSÐS¡W Q¨ÈdÐSÐSÈ˜qÐSÐSÐSÐSrM   rÖ   Úoverflow_to_sample_mapping)Útensor_type)r|   Útuplerw   Ú	TypeErrorr^   r  rh   rt   Úencode_batchÚ	enumeraterg   Ú&_eventual_warn_about_too_long_sequencer   )r‡   r  rð   r   r;   r7   r:   r  rB   r@   r  rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rs   rÞ   Útokens_and_encodingsÚsanitized_tokensÚstackÚsanitized_encodingsr  ÚiÚtoksr  rÖ   rW   s   `          ```````           @rK   Ú_batch_encode_plusz*PreTrainedTokenizerFast._batch_encode_plus   s  øøøøøøøøø€ õ. Ð2µU½D°MÑBÔBð 	ÝØnÍTÐRjÑMkÔMkÐnÐnÐnñô ð ð
 	×'Ò'Ø-Ø 3Ø!ØØ1Ø%ð 	(ñ 	
ô 	
ð 	
ð Œ?Ô0Ð4HÒHÐHØ4HˆDŒOÔ1à”O×0Ò0Ø$Ø1Ø/ð 1ñ 
ô 
ˆ	ð 
ð  
ð  
ð  
ð  
ð  
ð  
ð  
ð  
ð  
ð  
ð &ð 
ñ  
ô  
Ðð( ÐØ'¨Ô*¨1Ô-ð 	*ð 	*ˆCØNÐNÐNÐNÐ&:ÐNÑNÔNˆEØ$)Ð˜SÑ!Ð!ØSÐSÐ0DÐSÑSÔSÐð %ð 	XØ)+Ð&Ý )Ð*>Ñ ?Ô ?ð Kð K‘�‘9�D˜!Ø*¨q¨cµC¸¸[Ô8IÑ4JÔ4JÑ.JÑJÐ*Ð*Ø=WÐÐ9Ñ:à)¨+Ô6ð 	Xð 	XˆIØ×7Ò7¸	À:ÈwÑWÔWÐWÐWÝÐ-Ð/BÐP^Ð_Ñ_Ô_Ð_rM   rý   c                 ó@  — |r||fgn|g} | j         |fi d|“d|“d|“d|“d|“d|“d|	“d|
“d	|“d
|“d|“d|“d|“d|“d|“d|“d|“|¤Ž}|€3|s1t          d„ |                     ¦   «         D ¦   «         |j        ¦  «        }|                      |d         ||¦  «         |S )Nr  rð   r   r;   r7   r:   rB   r@   r  rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rs   c                 ó†   — i | ]>\  }}|t          |¦  «        d k    r#t          |d          t          ¦  «        r|d          n|“Œ?S )r   )rg   r|   rw   )rI   rW   r  s      rK   r·   z8PreTrainedTokenizerFast._encode_plus.<locals>.<dictcomp>�  sW   € ð ð ð á"˜˜Uð ¥c¨%¡j¤j°1¢n n½ÀEÈ!ÄHÍdÑ9SÔ9S n˜% œ(˜(ÐY^ðð ð rM   rÖ   )r%  r   rv   rÞ   r  )r‡   rû   rý   rð   r   r;   r7   r:   r  rB   r@   r  rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   rÒ   rs   r‰   Úbatched_inputÚbatched_outputs                          rK   Ú_encode_plusz$PreTrainedTokenizerFast._encode_plus[  sŒ  € ð. 09ÐD˜$ 	Ð*Ð+Ð+¸t¸fˆØ0˜Ô0Øð
ð 
ð 
à 3Ð 3ð
ð  2Ð1ð
ð .Ð-ð	
ð
 !4Ð 3ð
ð "�zð
ð �6ð
ð  2Ð1ð
ð &˜ð
ð *˜>ð
ð #8Ð"7ð
ð #8Ð"7ð
ð '@Ð&?ð
ð (BÐ'Að
ð $:Ð#9ð
ð  (˜-ð!
ð" �Gð#
ð$ "6Ð!5Øð'
ð 
ˆð0 Ð!Ð*CÐ!Ý*ðð à&4×&:Ò&:Ñ&<Ô&<ðñ ô ð Ô(ñô ˆNð 	×3Ò3°NÀ;Ô4OÐQ[Ð]dÑeÔeÐeàÐrM   c                 ó‚   — | j         j        �| j         j                             |¦  «        nd                     |¦  «        S )Nú )r�   rÊ   ÚdecodeÚjoinrå   s     rK   Úconvert_tokens_to_stringz0PreTrainedTokenizerFast.convert_tokens_to_string˜  s@   € ð Ô%Ô-Ð9ð Ô"Ô*×1Ò1°&Ñ9Ô9Ð9à—’˜&Ñ!Ô!ð	
rM   Ú	token_idsÚclean_up_tokenization_spacesc                 óì   — |                      dd¦  «        | _        t          |t          ¦  «        r|g}| j                             ||¬¦  «        }|�|n| j        }|r|                      |¦  «        }|S |S )NÚuse_source_tokenizerF)rõ   )r_   rj   r|   rì   rh   r-  r1  Úclean_up_tokenization)r‡   r0  rõ   r1  r‰   rû   Ú
clean_texts          rK   Ú_decodezPreTrainedTokenizerFast._decodeŸ  s’   € ð -3¯JªJÐ7MÈuÑ,UÔ,UˆÔ)å�i¥Ñ%Ô%ð 	$Ø"˜ˆIØŒ×%Ò% iÐEXÐ%ÑYÔYˆð ,Ð7ð )Ð(àÔ2ð 	%ð
 (ð 	Ø×3Ò3°DÑ9Ô9ˆJØÐàˆKrM   Úsave_directoryÚ
file_namesÚlegacy_formatÚfilename_prefixc                 óà  ‡ — t          |¦  «        }‰ j        €|du rt          d¦  «        ‚|du s|du o‰ j        duo‰ j        }|du p|du }|rÐt          j                             ||r|dz   ndt          z   ¦  «        }ˆ fd„‰ j         	                    ¦   «         D ¦   «         }|rZt          |dd	¬
¦  «        5 }	t          j        |ddd¬¦  «        dz   }
|	                     |
¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      ||¬¦  «        }||z   |fz   }|rOt          j                             ||r|dz   ndt          z   ¦  «        }‰ j                             |¦  «         ||fz   }|S )z¹
        Save a tokenizer using the slow-tokenizer/legacy format: vocabulary + added tokens as well as in a unique JSON
        file containing {config + vocab + added-tokens}.
        NTz²Your tokenizer does not have a legacy version defined and therefore cannot register this version. You might consider leaving the legacy_format at `None` or setting it to `False`.Fú-Ú c                 ó2   •— i | ]\  }}|‰j         k    ¯||“ŒS rD   )rª   )rI   ÚtokrO   r‡   s      €rK   r·   z<PreTrainedTokenizerFast._save_pretrained.<locals>.<dictcomp>Ö  s.   ø€ ÐvÐvÐv©*¨#¨uÐ]bÐfjÔfuÒ]uÐ]u˜3 Ð]uÐ]uÐ]urM   Úwzutf-8)rË   é   )ÚindentÚ	sort_keysÚensure_asciiú
)r:  )rY   r)   ra   r¤   r¡   r¢   r.  ÚADDED_TOKENS_FILErx   rv   Úopenr   ÚdumpsÚwriteÚsave_vocabularyÚTOKENIZER_FILEr�   Úsave)r‡   r7  r8  r9  r:  Ú	save_slowÚ	save_fastÚadded_tokens_fileÚadded_vocabÚfÚout_strÚvocab_filesr%   s   `            rK   Ú_save_pretrainedz(PreTrainedTokenizerFast._save_pretrained·  s  ø€ õ ˜^Ñ,Ô,ˆàÔ$Ð,°À$Ð1FÐ1FÝð`ñô ð ð ˜dÐ"Ð; m°tÐ&;ð -ØÔ)°Ð5ð-àÔ,ð 	ð
 " TÐ)ÐC¨]¸eÐ-Cˆ	àð 	IÝ "¤§¢Ø¸/Ð!Q °3Ñ!6Ð!6ÈrÕUfÑ fñ!ô !Ðð wÐvÐvÐv¸Ô8Q×8WÒ8WÑ8YÔ8YÐvÑvÔvˆKØð %ÝÐ+¨S¸7ÐCÑCÔCð %ÀqÝ"œj¨¸QÈ$Ð]bÐcÑcÔcÐfjÑj�GØ—G’G˜GÑ$Ô$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð ×.Ò.¨~ÈÐ.Ñ_Ô_ˆKØ# kÑ1Ð5FÐ4HÑHˆJàð 	8ÝœWŸ\š\Ø¸/Ð!Q °3Ñ!6Ð!6ÈrÕUcÑ cñô ˆNð Ô"×'Ò'¨Ñ7Ô7Ð7Ø# ~Ð&7Ñ7ˆJàÐs   Â51C2Ã2C6Ã9C6c           	      óp  ‡‡— t          j        | j                             ¦   «         ¦  «        }|                     d¦  «        }|                     d¦  «        }	d}
|d         d         dk    ri |d         d<   g |d         d<   n«|d         d         d	k    r^|d         d
         �O|d         d
         }|d         d         |         d         }
‰�|
‰v r‰|
         }
d|d         d
<   |
dgg|d         d<   n;|d         d         dv ri |d         d<   nt          d|d         d         › d�¦  «        ‚‰�7d|d         v r-|d         d         ‰v r‰|d         d                  |d         d<   t          j        t          j        |¦  «        ¦  «        Šg }|D ]}|                     dd¦  «        }|                     dd¦  «        }|d         d         d	k    r|sŒC‰�|d         ‰v r‰|d                  |d<   | 	                    t          d)i |¤Ž¦  «         Œ€|�|                     |¦  «         |d         d         dk    r#d|vr|d         d         �|d         d         |d<   |d         d         dk    r#d|vr|d         d         �|d         d         |d<   |d         d         d	k    r|
�|
|d<   |d         �t|d         d         dk    sA|d         d         dk    rPd|d         v rFt          d„ |d         d         D ¦   «         ¦  «        r!t          j                             ¦   «         |d<   t           |d         d                  } |d)||dœ|¤Ž}‰                     |||¬¦  «         |	��,t          j        ‰                     ¦   «         ¦  «        }d|	v rˆ|	d         D ]}|	d         |         d         }‰�ˆfd „|D ¦   «         }||	d         |         d<   |D ](}‰                     |¦  «        }|€t          d!¦  «        ‚Œ)ˆfd"„|D ¦   «         |	d         |         d#<   Œ€d$D ]L}||	v rF|	|         \  }}‰�|‰v r‰|         }‰                     |¦  «        }|€t          d!¦  «        ‚||g|	|<   ŒM|	|d<   t          j        t          j        |¦  «        ¦  «        Š| j                             ¦   «         }t*          j                             ¦   «         }|                     d%¦  «         |D ]’}t1          | |¦  «        �€t1          | |¦  «        }‰�|‰v r‰|         }| j                             |d¦  «        }t7          |t          ¦  «        r-t          ||j        |j        |j        |j        d&¬'¦  «        ||<   Œ�|||<   Œ“| j         }|�|                     |¦  «         tC          |¦  «        dk    r||d%<    | j"        d)d(‰i|¤ŽS )*uf  
        Trains a tokenizer on a new corpus with the same defaults (in terms of special tokens or tokenization pipeline)
        as the current one.

        Args:
            text_iterator (generator of `list[str]`):
                The training corpus. Should be a generator of batches of texts, for instance a list of lists of texts
                if you have everything in memory.
            vocab_size (`int`):
                The size of the vocabulary you want for your tokenizer.
            length (`int`, *optional*):
                The total number of sequences in the iterator. This is used to provide meaningful progress tracking
            new_special_tokens (list of `str` or `AddedToken`, *optional*):
                A list of new special tokens to add to the tokenizer you are training.
            special_tokens_map (`dict[str, str]`, *optional*):
                If you want to rename some of the special tokens this tokenizer uses, pass along a mapping old special
                token name to new special token name in this argument.
            kwargs (`dict[str, Any]`, *optional*):
                Additional keyword arguments passed along to the trainer from the ðŸ¤— Tokenizers library.

        Returns:
            [`PreTrainedTokenizerFast`]: A new tokenizer of the same type as the original one, trained on
            `text_iterator`.

        Úadded_tokensÚpost_processorNÚmodelr^   r!   r¯   Úmergesr"   Úunk_idr   g        )r#   r$   z;This method does not support this type of tokenizer (found z-) only BPE, Unigram, WordLevel and WordPiece.Ú	unk_tokenr]   Úidr³   Úcontinuing_subword_prefixÚend_of_word_suffixr‚   Ú	ByteLevelÚSequenceÚpretokenizersc              3   ó.   K  — | ]}|d          dk    V — ŒdS )r^   r_  NrD   )rI   Úpretokenizers     rK   ú	<genexpr>zBPreTrainedTokenizerFast.train_new_from_iterator.<locals>.<genexpr>P  s@   è è € ð ð à$ð ! Ô(¨KÒ7ðð ð ð ð ð rM   Úinitial_alphabet)rª   r”   )rA   Útrainerr”   r“   c                 ó<   •— g | ]}‰                      ||¦  «        ‘ŒS rD   r  )rI   rJ   Úspecial_tokens_maps     €rK   rQ   zCPreTrainedTokenizerFast.train_new_from_iterator.<locals>.<listcomp>b  s*   ø€ Ð![Ð![Ð![È5Ð"4×"8Ò"8¸ÀÑ"FÔ"FÐ![Ð![Ð![rM   zQAttempted to set a token in the post processor that does not exist in the mappingc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rD   )rè   )rI   rJ   r3   s     €rK   rQ   zCPreTrainedTokenizerFast.train_new_from_iterator.<locals>.<listcomp>k  s)   ø€ ÐCuÐCuÐCuÐejÀI×DYÒDYÐZ_ÑD`ÔD`ÐCuÐCuÐCurM   rÛ   )ÚclsÚsepr5   T)Úsingle_wordÚlstripÚrstripÚ
normalizedr]   r+   rD   )#r   r€   rh   Úto_strr_   ra   rd   Úfrom_strrH  r}   r   ÚextendÚanyr…   r_  ÚalphabetÚMODEL_TO_TRAINER_MAPPINGÚtrain_from_iteratorrè   ri   rb   r   ÚSPECIAL_TOKENS_ATTRIBUTESÚremover„   Ú_special_tokens_mapr`   r|   rl  rm  rn  ro  r5   rg   r˜   )r‡   Útext_iteratorrª   rA   Únew_special_tokensrh  r‰   Útokenizer_jsonrV  rW  r[  rZ  r”   Úadded_tokenr]   r  Útrainer_classrf  Útrained_tokenizer_jsonrW   r“   rJ   Útoken_idÚspecial_tokenÚspecial_tokens_listÚspecial_token_fullr5   r3   s        `                     @rK   Útrain_new_from_iteratorz/PreTrainedTokenizerFast.train_new_from_iteratorè  s;  øø€ õD œ D¤O×$:Ò$:Ñ$<Ô$<Ñ=Ô=ˆà%×)Ò)¨.Ñ9Ô9ˆà'×+Ò+Ð,<Ñ=Ô=ˆàˆ	à˜'Ô" 6Ô*¨eÒ3Ð3Ø/1ˆN˜7Ô# GÑ,Ø02ˆN˜7Ô# HÑ-Ð-Ø˜GÔ$ VÔ,°	Ò9Ð9Ø˜gÔ& xÔ0Ð<Ø'¨Ô0°Ô:�Ø*¨7Ô3°GÔ<¸VÔDÀQÔG�	Ø%Ð1°iÐCUÐ6UÐ6UØ 2°9Ô =�IØ45�˜wÔ'¨Ñ1Ø5>ÀÐ4DÐ3E�˜wÔ'¨Ñ0øØ˜GÔ$ VÔ,Ð0JÐJÐJØ/1ˆN˜7Ô# GÑ,Ð,åð>ÈnÐ]dÔNeÐflÔNmð >ð >ð >ñô ð ð Ð*Ø˜~¨gÔ6Ð6Ð6Ø˜wÔ'¨Ô4Ð8JÐJÐJà3EÀnÐU\ÔF]Ð^iÔFjÔ3kˆN˜7Ô# KÑ0å!Ô*­4¬:°nÑ+EÔ+EÑFÔFˆ	ð ˆØ'ð 	=ð 	=ˆKØ!—o’o i°Ñ6Ô6ˆGØ—’  dÑ+Ô+ˆAØ˜gÔ& vÔ.°)Ò;Ð;ÀGÐ;ØØ!Ð-°+¸iÔ2HÐL^Ð2^Ð2^Ø);¸KÈ	Ô<RÔ)S�˜IÑ&Ø×!Ò!¥*Ð";Ð";¨{Ð";Ð";Ñ<Ô<Ð<Ð<àÐ)Ø×!Ò!Ð"4Ñ5Ô5Ð5ð ˜7Ô# FÔ+¨uÒ4Ð4Ø+°6Ð9Ð9Ø˜wÔ'Ð(CÔDÐPà2@ÀÔ2IÐJeÔ2fˆFÐ.Ñ/à˜7Ô# FÔ+¨uÒ4Ð4Ø$¨FÐ2Ð2Ø˜wÔ'Ð(<Ô=ÐIà+9¸'Ô+BÐCWÔ+XˆFÐ'Ñ(Ø˜'Ô" 6Ô*¨iÒ7Ð7¸IÐ<QØ"+ˆF�;ÑØ˜/Ô*Ð6à˜Ô/°Ô7¸;ÒFÐFØ! /Ô2°6Ô:¸jÒHÐHØ# ~°oÔ'FÐFÐFÝð ð à(6°Ô(GÈÔ(Xðñ ô ñ ô ð Gõ .AÔ-J×-SÒ-SÑ-UÔ-U�Ð)Ñ*å0°ÀÔ1HÈÔ1PÔQˆØ�-Ð_¨:ÀnÐ_Ð_ÐX^Ð_Ð_ˆØ×%Ò% m¸FÈGÐ%ÑTÔTÐTàÑ%Ý%)¤Z°	×0@Ò0@Ñ0BÔ0BÑ%CÔ%CÐ"à >Ð1Ð1Ø)Ð*:Ô;ð vð v�CØ+Ð,<Ô=¸cÔBÀ8ÔL�FØ)Ð5Ø![Ð![Ð![Ð![ÐTZÐ![Ñ![Ô![˜ØFL�NÐ#3Ô4°SÔ9¸(ÑCØ!'ð ð ˜Ø#,×#8Ò#8¸Ñ#?Ô#?˜Ø#Ð+Ý",Ø sñ#ô #ð ð ,ð
 DvÐCuÐCuÐCuÐntÐCuÑCuÔCu�NÐ#3Ô4°SÔ9¸%Ñ@Ð@à!/ð 
Fð 
F�Ø  NÐ2Ð2Ø-¨mÔ<‘H�E˜1Ø)Ð5¸%ÐCUÐ:UÐ:UØ 2°5Ô 9˜Ø(×4Ò4°UÑ;Ô;�HØÐ'Ý(Øoñô ð ð 6;¸HÐ4E�N =Ñ1øà7EÐ"Ð#3Ñ4Ý%Ô.­t¬zÐ:PÑ/QÔ/QÑRÔRˆIàÔ!×&Ò&Ñ(Ô(ˆå0ÔJ×OÒOÑQÔQÐØ×"Ò"Ð#>Ñ?Ô?Ð?Ø(ð 	2ð 	2ˆEÝ�t˜UÑ#Ô#Ð/Ý '¨¨eÑ 4Ô 4�Ø%Ð1°mÐGYÐ6YÐ6YØ$6°}Ô$E�Mà%)Ô%=×%AÒ%AÀ%ÈÑ%NÔ%NÐ"ÝÐ0µ*Ñ=Ô=ð 2å$.Ø%Ø$6Ô$BØ1Ô8Ø1Ô8Ø#5Ô#@Ø $ð%ñ %ô %�F˜5‘M�Mð %2�F˜5‘Møà$(Ô$BÐ!ØÐ)Ø%×,Ò,Ð-?Ñ@Ô@Ð@ÝÐ(Ñ)Ô)¨AÒ-Ð-Ø2KˆFÐ.Ñ/àˆtŒ~ÐCÐC¨yÐC¸FÐCÐCÐCrM   )NNFFFFT)F)NF)FN)NN)NNN)@Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚVOCAB_FILES_NAMESrž   r)   r   Ú__annotations__rr   ÚpropertyÚboolrœ   r¤   rì   rª   ÚdictrY   r¬   r¯   rx   r   r/   rÃ   rÅ   rÇ   rd   r�   ÚDecoderFastrÊ   ÚEncodingFastr   r  r   rw   rá   r   r   ræ   rä   rí   rñ   rô   rú   rÿ   r   r   r  r  r  r   r   r   r   r   r%  r*  r/  r6  r¡   ÚPathLikerT  r„  Ú__classcell__)r˜   s   @rK   r(   r(   Q   sÉ  ø€ € € € € € ð
ð 
ð *ÐØ04ÐÐ-Ð4Ð4Ñ4ðzð zð zð zð zðx ð˜ð ð ð ñ „Xðð ð¨ð ð ð ñ „Xðð ðG˜Cð Gð Gð Gñ „XðGðA˜4  S œ>ð Að Að Að Að ð �t˜C ˜H”~ð  ð  ð  ñ „Xð ð ðn d¨3°¨8¤nð nð nð nñ „Xðnð ð: d¨3°
¨?Ô&;ð :ð :ð :ñ „Xð:ðn  c¨3 h¤ð nð nð nð nð˜$ð ð ð ð ðF˜ð Fð Fð Fð Fð ð =ð ð ð ñ „Xðð ð'˜ð 'ð 'ð 'ñ „Xð'ð 15Ø04Ø*/Ø+0Ø',Ø#Øð-(ð -(àð-(ð  (¨œ~ð-(ð  (¨œ~ð	-(ð
 $(ð-(ð %)ð-(ð !%ð-(ð ð-(ð ð-(ð 
ˆt�C˜�HŒ~˜t LÔ1Ð1Ô	2ð-(ð -(ð -(ð -(ð^U¨E°#°xÀ´}Ð2DÔ,Eð UÈ%ÐPSÐUYÐZ]ÔU^ÐP^ÔJ_ð Uð Uð Uð Uð ¸ð Àð ð ð ð ð7¨#ð 7°(¸3´-ð 7ð 7ð 7ð 7ð6ð 6 d¨5°°j°Ô+AÔ&Bð 6Ð]`ð 6ð 6ð 6ð 6ð?ð ?¨dð ?¸sð ?ð ?ð ?ð ?ð, GLðð Ø˜˜d 3œi˜Ô(ðØ?Cðà	ˆs�D˜”Iˆ~Ô	ðð ð ð ð8uð u˜Sð u¨°¬ð uÐRVð uÐmqÐruÔmvð uð uð uð uðI9à)ðI9ð 0ðI9ð ð	I9ð
 ðI9ð % SœMðI9ð ˜s”mðI9ð I9ð I9ð I9ð` $(Ø,;Ô,FØ2DÔ2TØ$(ØØ$)Ø,0Ø&*Ø(,Ø04Ø04Ø*/Ø+0Ø',Ø#ØØ%*ð+Y`ð Y`à"'Ø�ŒO˜T -Ô0°$Ð7HÔ2IÈ4ÐPeÔKfÐfô#
ðY`ð
 !ðY`ð *ðY`ð 0ðY`ð ˜S”MðY`ð ðY`ð "ðY`ð % SœMðY`ð ˜s”mðY`ð ! œðY`ð  (¨œ~ðY`ð  (¨œ~ðY`ð  $(ð!Y`ð" %)ð#Y`ð$ !%ð%Y`ð& ð'Y`ð( ð)Y`ð* #ð+Y`ð, 
ð-Y`ð Y`ð Y`ð Y`ð| DHØ#'Ø,;Ô,FØ2DÔ2TØ$(ØØ$)Ø,0Ø&*Ø)-Ø04Ø04Ø*/Ø+0Ø',Ø#ØØ%*ð);ð ;à�IÐ0Ð0Ô1ð;ð ˜E )Ð->Ð">Ô?Ô@ð;ð !ð	;ð
 *ð;ð 0ð;ð ˜S”Mð;ð ð;ð "ð;ð % SœMð;ð ˜s”mð;ð ! œð;ð  (¨œ~ð;ð  (¨œ~ð;ð $(ð;ð  %)ð!;ð" !%ð#;ð$ ð%;ð& ð';ð( #ð);ð, 
ð-;ð ;ð ;ð ;ðz
¨t°C¬yð 
¸Sð 
ð 
ð 
ð 
ð %*Ø7;ð	ð à˜˜d 3œi˜Ô(ðð "ðð '/¨t¤nð	ð 
ðð ð ð ð8 )-Ø)-ð/ð /à˜c 2¤;Ð.Ô/ð/ð ˜#”Jð/ð   ”~ð	/ð
 " #œð/ð 
ˆsŒð/ð /ð /ð /ðj ØØðrDð rDð rDð rDð rDð rDð rDð rDrM   r(   )=rˆ  rb   r   r¡   Úcollectionsr   Úcollections.abcr   Útypingr   r   r   Útokenizers.pre_tokenizersÚpre_tokenizersr…   Ú
tokenizersr   r�  r	   rd   Útokenizers.decodersr
   rŽ  Útokenizers.trainersr   r   r   r   r   Úintegrations.ggmlr   Úmodeling_gguf_pytorch_utilsr   Útokenization_utilsr   Útokenization_utils_baser   r   r   r   r   r   r   r   r   r   Úutilsr   r   r    Ú
get_loggerr…  ÚloggerrK  ÚSPECIAL_TOKENS_MAP_FILEÚTOKENIZER_CONFIG_FILEÚTIKTOKEN_VOCAB_FILErF  ru  r‰  r(   rD   rM   rK   ú<module>r¤     sŽ  ððð ð
 €€€Ø €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^à :Ð :Ð :Ð :Ð :Ð :Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð 
ˆÔ	˜HÑ	%Ô	%€ð "€Ø3Ð Ø/Ð Ø'Ð ð (Ð à ð ñ Ð ð ØØ!Ø!ð	ð Ð ð (6ÐEXÐYÐYÐ ð ÐÐ,Ñ-Ô-ðHDð HDð HDð HDð HDÐ5ñ HDô HDñ .Ô-ðHDð HDð HDrM   