Ë
    S^(hE\  ã                   ó‚  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlZd dlmZmZ ddlmZ  ej,                  «       d	k7  rd dlZ e«       rd d
lmZ d dlmZ d dlmZ  e«       rd dlZd dlm Z m!Z!m"Z"m#Z#  e$ejJ                  ejL                  z   «      Z' e$ejJ                  ejP                  z   ejL                  z   dz   «      Z)dZ*g d¢Z+ddiddiddiddiddiddidœZ,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1ded   fd „Z2d!„ Z3d"„ Z4 G d#„ d$«      Z5e
 G d%„ d&«      «       Z6d'efd(„Z7 G d)„ d*e«      Z8y)+é    N)ÚArgumentParserÚ	Namespace)Ú	dataclassÚfield)ÚThread)ÚOptional)Úis_rich_availableÚis_torch_availableé   )ÚBaseTransformersCLICommandÚWindows)ÚConsole)ÚLive)ÚMarkdown)ÚAutoModelForCausalLMÚAutoTokenizerÚBitsAndBytesConfigÚTextIteratorStreamerz .!\"#$%&'()*+,\-/:<=>?@[]^_`{|}~a#  
**TRANSFORMERS CHAT INTERFACE**

The chat interface is a simple tool to try out a chat model.

Besides talking to the model there are several commands:
- **help**: show this help message
- **clear**: clears the current conversation and start a new one
- **example {NAME}**: load example named `{NAME}` from the config and use it as the user input
- **set {SETTING_NAME}={SETTING_VALUE};**: change the system prompt or generation settings (multiple settings are separated by a ';').
- **reset**: same as clear but also resets the generation configs to defaults if they have been changed by **set**
- **save {SAVE_NAME} (optional)**: save the current chat and settings to file by default to `./chat_history/{MODEL_NAME}/chat_{DATETIME}.yaml` or `{SAVE_NAME}` if provided
- **exit**: closes the interface
)Úmax_new_tokensÚ	do_sampleÚ	num_beamsÚtemperatureÚtop_pÚtop_kÚrepetition_penaltyÚtextz5There is a Llama in my lawn, how can I get rid of it?zyWrite a Python function that integrates any Python function f(x) numerically over an arbitrary interval [x_start, x_end].z4How many helicopters can a human eat in one sitting?z4Count to 10 but skip every number ending with an 'e'zWhy aren't birds real?z2Why is it important to eat socks after meditating?)ÚllamaÚcodeÚ
helicopterÚnumbersÚbirdsÚsocksc                  óº   — t        j                  «       dk(  rt        j                  «       S t	        j
                  t        j                  «       «      j                  S )Nr   )ÚplatformÚsystemÚosÚgetloginÚpwdÚgetpwuidÚgetuidÚpw_name© ó    úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/commands/chat.pyÚget_usernamer/   Z   s8   € Ü‡�Ó˜IÒ%Ü�{‰{‹}Ðä�|‰|œBŸI™I›KÓ(×0Ñ0Ð0r-   c                 ó<   — t        j                  d«      }| › d|› d�S )Nz%Y-%m-%d_%H-%M-%Sz/chat_z.json)ÚtimeÚstrftime)Ú
model_nameÚtime_strs     r.   Úcreate_default_filenamer5   a   s$   € Ü�}‰}Ð0Ó1€HØˆ\˜ ˜z¨Ð/Ð/r-   c                 óÊ  — i }t        |«      |d<   | |d<   |j                  }|€5t        |j                  «      }t        j
                  j                  ||«      }t	        j                  t        j
                  j                  |«      d¬«       t        |d«      5 }t        j                  ||d¬«       d d d «       t        j
                  j                  |«      S # 1 sw Y   Œ(xY w)NÚsettingsÚchat_historyT)Úexist_okÚwé   )Úindent)ÚvarsÚsave_folderr5   Úmodel_name_or_pathr&   ÚpathÚjoinÚmakedirsÚdirnameÚopenÚjsonÚdumpÚabspath)ÚchatÚargsÚfilenameÚoutput_dictÚfolderÚfs         r.   Ú	save_chatrN   f   s³   € Ø€KÜ" 4›j€K�
ÑØ"&€K�Ñà×Ñ€FàÐÜ*¨4×+BÑ+BÓCˆÜ—7‘7—<‘< ¨Ó1ˆÜ‡K�K”—‘—‘ Ó)°DÕ9ä	ˆh˜Ó	ð , Ü�	‰	�+˜q¨Õ+÷,ä�7‰7�?‰?˜8Ó$Ð$÷,ð ,ús   ÂCÃC"c                 ó   — | €g }|S d| dœg}|S )Nr%   ©ÚroleÚcontentr,   )Úsystem_promptrH   s     r.   Úclear_chat_historyrT   w   s(   € ØÐØˆð €Kð "¨mÑ<Ð=ˆØ€Kr-   c                 óF  — | dd  j                  «       j                  d«      }|D �cg c]9  }|j                  d«      d   |t        |j                  d«      d   «      dz   d  f‘Œ; }}t        |«      }d}|D ]‚  }t	        ||«      r_	 t        t        ||«      t        «      r"||   dk(  rd||<   n5||   d	k(  rd||<   n't        ‚ t        t        ||«      «      ||   «      ||<   Œn|j                  d|› d�«       Œ„ |r|j                  d«       |dfS |D ]-  }t        ||||   «       |j                  d|› d||   › d�«       Œ/ t        j                  d«       |dfS c c}w # t        $ r5 |j                  d
|› d||   › dt        t        ||«      «      › d�«       Y �Œ)w xY w)Nr;   ú;ú=r   r   FÚTrueTÚFalsezCannot cast setting z (=z) to ú.zThere is no 'z
' setting.zGThere was an issue parsing the settings. No settings have been changed.zSet z to g      ø?)ÚstripÚsplitÚlenÚdictÚhasattrÚ
isinstanceÚgetattrÚboolÚ
ValueErrorÚtypeÚ	print_redÚsetattrÚprint_greenr1   Úsleep)Ú
user_inputÚcurrent_argsÚ	interfacer7   ÚsettingÚerrorÚnames          r.   Úparse_settingsro      sß  € Ø˜!˜"ˆ~×#Ñ#Ó%×+Ñ+¨CÓ0€HØbjÖkÐW^�—‘˜sÓ# AÑ&¨´°G·M±MÀ#Ó4FÀqÑ4IÓ0JÈQÑ0NÐ0PÐ(QÒRÐk€HÐkÜ�H‹~€HØ€Eàò BˆÜ�< Ô&ðÜœg l°DÓ9¼4Ô@Ø ‘~¨Ò/Ø)-˜ šØ! $™¨7Ò2Ø).˜ šä(Ð(à%F¤T¬'°,ÀÓ*EÓ%FÀxÐPTÁ~Ó%V�H˜T‘Nøð ×Ñ -°¨v°ZÐ @ÕAð#Bñ& Ø×ÑÐeÔfØ˜UÐ"Ð"àò 	FˆDÜ�L $¨°©Ô7Ø×!Ñ! D¨¨¨d°8¸D±>Ð2BÀ!Ð"DÕEð	Fô 	�
‰
�3ŒØ˜TÐ!Ð!ùòA løô  ò Ø×#Ñ#Ø*¨4¨&°°H¸T±NÐ3CÀ5ÌÌgÐVbÐdhÓNiÓIjÐHkÐklÐm÷ðús   §>EÂAE"Å":F ÆF Úreturnr   c                 óÊ   — | j                   r:t        d| j                  | j                  | j                  | j                  ¬«      }|S | j
                  rt        d¬«      }|S d }|S )NT)Úload_in_4bitÚbnb_4bit_compute_dtypeÚbnb_4bit_quant_typeÚbnb_4bit_use_double_quantÚbnb_4bit_quant_storage)Úload_in_8bit)rr   r   Útorch_dtypert   Úuse_bnb_nested_quantrw   )Ú
model_argsÚquantization_configs     r.   Úget_quantization_configr|   ¤   st   € Ø×ÒÜ0ØØ#-×#9Ñ#9Ø *× >Ñ >Ø&0×&EÑ&EØ#-×#9Ñ#9ô
Ðð Ðð 
×	 Ò	 Ü0Øô
Ðð Ðð #ÐàÐr-   c                 óÔ  — t        j                  | j                  | j                  | j                  ¬«      }| j
                  dv r| j
                  nt        t        | j
                  «      }t        | «      }| j                  | j                  |d|dœ}t        j                  | j                  fd| j                  i|¤Ž}t        |dd «      €|j                  | j                  «      }||fS )N)ÚrevisionÚtrust_remote_code)ÚautoNr€   )r~   Úattn_implementationrx   Ú
device_mapr{   r   Úhf_device_map)r   Úfrom_pretrainedr?   Úmodel_revisionr   rx   ra   Útorchr|   r�   r   ÚtoÚdevice)rI   Ú	tokenizerrx   r{   Úmodel_kwargsÚmodels         r.   Úload_model_and_tokenizerrŒ   ·   sä   € Ü×-Ñ-Ø×ÑØ×$Ñ$Ø×0Ñ0ô€Ið '+×&6Ñ&6¸.Ñ&H�$×"Ò"ÌgÔV[Ð]a×]mÑ]mÓNn€KÜ1°$Ó7Ðà×'Ñ'Ø#×7Ñ7Ø"ØØ2ñ€Lô !×0Ñ0Ø×ÑñØ37×3IÑ3IðØMYñ€Eô ˆu�o tÓ,Ð4Ø—‘˜Ÿ™Ó%ˆà�)ÐÐr-   c                 óˆ  — | j                   €| j                  }n| j                   }g }|�/|j                  | j                  |j	                  d«      «      «       |�7|j                  |j	                  d«      D �cg c]  }t        |«      ‘Œ c}«       t        |«      dk(  r|j                  | j                  «       ||fS c c}w )Nú,r   )Úpad_token_idÚeos_token_idÚextendÚconvert_tokens_to_idsr\   Úintr]   Úappend)r‰   Ú
eos_tokensÚeos_token_idsr�   Úall_eos_token_idsÚtoken_ids         r.   Úparse_eos_tokensr™   Ñ   s¸   € Ø×ÑÐ%Ø ×-Ñ-‰à ×-Ñ-ˆàÐàÐØ× Ñ  ×!@Ñ!@À×AQÑAQÐRUÓAVÓ!WÔXàÐ Ø× Ñ À×@SÑ@SÐTWÓ@XÖ!Y°H¤# h¥-Ò!YÔZä
ÐÓ Ò"Ø× Ñ  ×!7Ñ!7Ô8àÐ*Ð*Ð*ùò "Zs   Á9B?c                   ó>   — e Zd Zd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
y)ÚRichInterfaceNc                 óf   — t        «       | _        |€d| _        n|| _        |€d| _        y || _        y )NÚ	assistantÚuser)r   Ú_consoler3   Ú	user_name)Úselfr3   r    s      r.   Ú__init__zRichInterface.__init__æ   s3   € Ü›	ˆŒØÐØ)ˆD�Oà(ˆDŒOØÐØ#ˆD�Nà&ˆD�Nr-   c                 óX  — d}| j                   j                  d| j                  › d�«       t        | j                   d¬«      5 }t	        |«      D ]©  \  }}|r|dk(  rŒ||z  }g }|j                  «       D ]G  }|j                  |«       |j                  d«      r|j                  d«       Œ7|j                  d	«       ŒI t        dj                  |«      j                  «       d
¬«      }|j                  |«       Œ« 	 ddd«       | j                   j                  «        |S # 1 sw Y   Œ%xY w)zStream output from a role.Ú z[bold blue]<z>:r;   )ÚconsoleÚrefresh_per_secondr   z```ú
z  
zgithub-dark)Ú
code_themeN)rŸ   Úprintr3   r   Ú	enumerateÚ
splitlinesr”   Ú
startswithr   rA   r[   Úupdate)	r¡   Úoutput_streamr   ÚliveÚiÚoutputsÚlinesÚlineÚmarkdowns	            r.   Ústream_outputzRichInterface.stream_outputñ   s  € ð ˆØ�‰×Ñ˜l¨4¯?©?Ð*;¸2Ð>Ô?Ü˜$Ÿ-™-¸AÔ>ð 	&À$ä'¨Ó6ò &‘
��7Ù ! q¢&ØØ˜‘�ð �Ø ŸO™OÓ-ò -�DØ—L‘L Ô&Ø—‘ uÔ-ð Ÿ™ TÕ*àŸ™ VÕ,ð-ô $ B§G¡G¨E£N×$8Ñ$8Ó$:À}ÔU�à—‘˜HÕ%ñ5&÷	&ð: 	�‰×ÑÔØˆ÷=	&ð 	&ús   ÁB8D Ä D)c                 óŒ   — | j                   j                  d| j                  › d�«      }| j                   j                  «        |S )Nú[bold red]<z>:
)rŸ   Úinputr    r©   )r¡   r¸   s     r.   r¸   zRichInterface.input  s9   € Ø—‘×#Ñ# k°$·.±.Ð1AÀÐ$FÓGˆØ�‰×ÑÔØˆr-   c                 ó8   — | j                   j                  «        y ©N)rŸ   Úclear©r¡   s    r.   r»   zRichInterface.clear  s   € Ø�‰×ÑÕr-   c                 óŽ   — | j                   j                  d| j                  › d|› �«       | j                   j                  «        y )Nr·   z>:[/ bold red]
)rŸ   r©   r    ©r¡   r   s     r.   Úprint_user_messagez RichInterface.print_user_message  s7   € Ø�‰×Ñ˜k¨$¯.©.Ð)9Ð9IÈ$ÈÐPÔQØ�‰×ÑÕr-   c                 ót   — | j                   j                  d|› �«       | j                   j                  «        y )Nz[bold green]©rŸ   r©   r¾   s     r.   rg   zRichInterface.print_green#  s+   € Ø�‰×Ñ˜l¨4¨&Ð1Ô2Ø�‰×ÑÕr-   c                 ót   — | j                   j                  d|› �«       | j                   j                  «        y )Nz
[bold red]rÁ   r¾   s     r.   re   zRichInterface.print_red'  s+   € Ø�‰×Ñ˜j¨¨Ð/Ô0Ø�‰×ÑÕr-   c                 óˆ   — | j                   j                  t        t        «      «       | j                   j                  «        y rº   )rŸ   r©   r   ÚHELP_STRINGr¼   s    r.   Ú
print_helpzRichInterface.print_help+  s)   € Ø�‰×ÑœH¤[Ó1Ô2Ø�‰×ÑÕr-   )NN)Ú__name__Ú
__module__Ú__qualname__r¢   rµ   r¸   r»   r¿   rg   re   rÅ   r,   r-   r.   r›   r›   å   s+   „ ó	'ò$òLò
òòòór-   r›   c                   óT  — e Zd ZU dZ eddi¬«      Zeed<    edddi¬«      Ze	e   ed	<    eddd
i¬«      Z
e	e   ed<    edddi¬«      Zeed<    edddi¬«      Zeed<    edddi¬«      Ze	e   ed<    edddi¬«      Zeed<    edddi¬«      Zeed<    edddi¬«      Zeed<    edddi¬«      Zeed<    ed dd!i¬«      Zeed"<    eddd#i¬«      Zeed$<    eddd%i¬«      Zeed&<    eddd'i¬«      Ze	e   ed(<    eddd)i¬«      Ze	e   ed*<    ed+dd,i¬«      Zeed-<    ed.d/g d0¢d1œ¬«      Ze	e   ed2<    ed3dd4i¬«      Zeed5<    eddd6i¬«      Ze	e   ed7<    ed3dd8i¬«      Zeed9<    ed3dd:i¬«      Zeed;<    ed<d=d>d<gd1œ¬«      Z eed?<    ed3dd@i¬«      Z!eedA<   y)BÚChatArgumentsa%  
    Arguments for the chat script.

    Args:
        model_name_or_path (`str`):
            Name of the pre-trained model.
        user (`str` or `None`, *optional*, defaults to `None`):
            Username to display in chat interface.
        system_prompt (`str` or `None`, *optional*, defaults to `None`):
            System prompt.
        save_folder (`str`, *optional*, defaults to `"./chat_history/"`):
            Folder to save chat history.
        device (`str`, *optional*, defaults to `"cpu"`):
            Device to use for inference.
        examples_path (`str` or `None`, *optional*, defaults to `None`):
            Path to a yaml file with examples.
        max_new_tokens (`int`, *optional*, defaults to `256`):
            Maximum number of tokens to generate.
        do_sample (`bool`, *optional*, defaults to `True`):
            Whether to sample outputs during generation.
        num_beams (`int`, *optional*, defaults to `1`):
            Number of beams for beam search.
        temperature (`float`, *optional*, defaults to `1.0`):
            Temperature parameter for generation.
        top_k (`int`, *optional*, defaults to `50`):
            Value of k for top-k sampling.
        top_p (`float`, *optional*, defaults to `1.0`):
            Value of p for nucleus sampling.
        repetition_penalty (`float`, *optional*, defaults to `1.0`):
            Repetition penalty.
        eos_tokens (`str` or `None`, *optional*, defaults to `None`):
            EOS tokens to stop the generation. If multiple they should be comma separated.
        eos_token_ids (`str` or `None`, *optional*, defaults to `None`):
            EOS token IDs to stop the generation. If multiple they should be comma separated.
        model_revision (`str`, *optional*, defaults to `"main"`):
            Specific model version to use (can be a branch name, tag name or commit id).
        torch_dtype (`str` or `None`, *optional*, defaults to `None`):
            Override the default `torch.dtype` and load the model under this dtype. If `'auto'` is passed, the dtype
            will be automatically derived from the model's weights.
        trust_remote_code (`bool`, *optional*, defaults to `False`):
            Whether to trust remote code when loading a model.
        attn_implementation (`str` or `None`, *optional*, defaults to `None`):
            Which attention implementation to use; you can run --attn_implementation=flash_attention_2, in which case
            you must install this manually by running `pip install flash-attn --no-build-isolation`.
        load_in_8bit (`bool`, *optional*, defaults to `False`):
            Whether to use 8 bit precision for the base model - works only with LoRA.
        load_in_4bit (`bool`, *optional*, defaults to `False`):
            Whether to use 4 bit precision for the base model - works only with LoRA.
        bnb_4bit_quant_type (`str`, *optional*, defaults to `"nf4"`):
            Quantization type.
        use_bnb_nested_quant (`bool`, *optional*, defaults to `False`):
            Whether to use nested quantization.
    ÚhelpzName of the pre-trained model.)Úmetadatar?   Nz&Username to display in chat interface.)ÚdefaultrÌ   rž   zSystem prompt.rS   z./chat_history/zFolder to save chat history.r>   ÚcpuzDevice to use for inference.rˆ   z"Path to a yaml file with examples.Úexamples_pathé   z%Maximum number of tokens to generate.r   Tz,Whether to sample outputs during generation.r   r   z Number of beams for beam search.r   g      ð?z%Temperature parameter for generation.r   é2   zValue of k for top-k sampling.r   z Value of p for nucleus sampling.r   zRepetition penalty.r   zNEOS tokens to stop the generation. If multiple they should be comma separated.r•   zQEOS token IDs to stop the generation. If multiple they should be comma separated.r–   ÚmainzLSpecific model version to use (can be a branch name, tag name or commit id).r…   r€   z Override the default `torch.dtype` and load the model under this dtype. If `'auto'` is passed, the dtype will be automatically derived from the model's weights.)r€   Úbfloat16Úfloat16Úfloat32)rË   Úchoicesrx   Fz2Whether to trust remote code when loading a model.r   zÂWhich attention implementation to use; you can run --attn_implementation=flash_attention_2, in which case you must install this manually by running `pip install flash-attn --no-build-isolation`.r�   zIWhether to use 8 bit precision for the base model - works only with LoRA.rw   zIWhether to use 4 bit precision for the base model - works only with LoRA.rr   Únf4zQuantization type.Úfp4rt   z#Whether to use nested quantization.ry   )"rÆ   rÇ   rÈ   Ú__doc__r   r?   ÚstrÚ__annotations__rž   r   rS   r>   rˆ   rÏ   r   r“   r   rb   r   r   Úfloatr   r   r   r•   r–   r…   rx   r   r�   rw   rr   rt   ry   r,   r-   r.   rÊ   rÊ   0  sŽ  … ñ4ñn $¨fÐ6VÐ-WÔXÐ˜ÓXÙ¨¸Ð@hÐ7iÔj€Dˆ(�3‰-ÓjÙ#(°ÀÐIYÐ@ZÔ#[€M�8˜C‘=Ó[ÙÐ%6À&ÐJhÐAiÔj€K�ÓjÙ °Ð9WÐ0XÔY€FˆCÓYÙ#(°ÀÐImÐ@nÔ#o€M�8˜C‘=Óoñ  ¨°vÐ?fÐ6gÔh€N�CÓhÙ D°FÐ<jÐ3kÔl€IˆtÓlÙ 1°Ð8ZÐ/[Ô\€IˆsÓ\Ù s°fÐ>eÐ5fÔg€K�ÓgÙ˜r¨VÐ5UÐ,VÔW€Eˆ3ÓWÙ °Ð8ZÐ/[Ô\€Eˆ5Ó\Ù %¨c¸VÐEZÐ<[Ô \Ð˜Ó\Ù %ØØÐjÐkô!€J�˜‘ó ñ $)ØØÐmÐnô$€M�8˜C‘=ó ñ  ØØÐhÐiô€N�Có ñ "'ØðPâAñ
ô"€K�˜#‘ó ñ $Ø Ð)]Ð ^ôÐ�tó ñ */Øàð rð
ô*Ð˜ #™ó ñ ØØÐeÐfô€L�$ó ñ ØØÐeÐfô€L�$ó ñ  %¨UÐFZÐhmÐotÐguÑ=vÔwÐ˜ÓwÙ!&¨uÀÐHmÐ?nÔ!oÐ˜$Ôor-   rÊ   rI   c                 ó   — t        | «      S )z;
    Factory function used to chat with a local model.
    )ÚChatCommand©rI   s    r.   Úchat_command_factoryrà   ¤  s   € ô �tÓÐr-   c                   óH   — e Zd Zedefd„«       Zd„ Zededefd„«       Z	d„ Z
y)	rÞ   Úparserc                 ón   — t         f}| j                  dt        |¬«      }|j                  t        ¬«       y)z³
        Register this command to argparse so it's available for the transformer-cli

        Args:
            parser: Root parser to register command-specific arguments
        rH   )rË   Údataclass_types)ÚfuncN)rÊ   Ú
add_parserrÄ   Úset_defaultsrà   )râ   rä   Úchat_parsers      r.   Úregister_subcommandzChatCommand.register_subcommand¬  s6   € ô )Ð*ˆØ×'Ñ'¨´[ÐRaÐ'ÓbˆØ× Ñ Ô&:Ð Õ;r-   c                 ó   — || _         y rº   rß   )r¡   rI   s     r.   r¢   zChatCommand.__init__¸  s	   € Øˆ�	r-   Úsrp   c                 óê  — | j                  d«      rd| vry| dd  j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}|D ]“  }|j                  d«      dk7  r y|j                  dd«      \  }}|j                  «       }|j                  «       }|r|s yt	        |«      j                  t        «      s yt	        |«      j                  t        «      rŒ“ y yc c}w )Nzset rW   Fr;   rV   r   T)r¬   r\   r[   ÚcountÚsetÚissubsetÚALLOWED_KEY_CHARSÚALLOWED_VALUE_CHARS)rë   ÚaÚassignmentsÚ
assignmentÚkeyÚvalues         r.   Úis_valid_setting_commandz$ChatCommand.is_valid_setting_command»  sß   € ð �|‰|˜FÔ# s°!¡|Øð +,¨A¨B¨%¯+©+°cÓ*:ÖH Q¸a¿g¹g½i�q—w‘w•yÐHˆÐHà%ò 	ˆJà×Ñ Ó$¨Ò)Ùà#×)Ñ)¨#¨qÓ1‰JˆC�Ø—)‘)“+ˆCØ—K‘K“MˆEÙ™eÙô �s“8×$Ñ$Ô%6Ô7Ùô �u“:×&Ñ&Ô':Õ;Ùð#	ð& ùò+ Is   ­C0ÁC0c                 óˆ  — t        «       st        d«      ‚t        «       st        d«      ‚| j                  }|j                  €t
        }n3t        |j                  «      5 }t        j                  |«      }d d d «       t        j                  |«      }|j                  €t        «       }n|j                  }t        |«      \  }}t        |dd¬«      }t        ||j                   |j"                  «      \  }	}
t%        |j&                  |¬«      }|j)                  «        t+        |j,                  «      }	 	 |j/                  «       }|dk(  r&t+        |j,                  «      }|j)                  «        Œ=|dk(  r|j1                  «        ŒS|dk(  ry |d	k(  r;|j)                  «        t        j                  |«      }t+        |j,                  «      }Œ™|j3                  d
«      rft5        |j7                  «       «      dk  rJ|j7                  «       }t5        |«      dk(  r|d   }nd }t9        |||«      }|j;                  d|› d�«       �Œ| j=                  |«      r&t?        |||«      \  }}|rg }|j)                  «        �ŒG|j3                  d«      r–t5        |j7                  «       «      dk(  rz|j7                  «       d   }|v r2|j)                  «        g }|jA                  ||   d   «       ||   d   }n1|jC                  d|› dtE        |jG                  «       «      › d�«       �Œî|jI                  d|dœ«       |jK                  |dd¬«      jM                  |jN                  «      }tQ        jR                  |«      }||||jT                  |jV                  |jX                  |jZ                  |j\                  |j^                  |j`                  |	|
dœ}tc        |jd                  |¬«      }|jg                  «        |ji                  |«      }|jk                  «        |jI                  d|dœ«       �Œö# 1 sw Y   �ŒµxY w# tl        $ r Y y w xY w)NzHYou need to install rich to use the chat interface. (`pip install rich`)zJYou need to install torch to use the chat interface. (`pip install torch`)T)Úskip_special_tokensÚskip_prompt)r3   r    r»   rË   ÚexitÚresetÚsaveé   r   zChat saved in ú!Úexampler   zExample z* not found in list of available examples: rZ   rž   rP   Úpt)Úreturn_tensorsÚadd_generation_prompt)ÚinputsÚattention_maskÚstreamerr   r   r   r   r   r   r   r�   r�   )ÚtargetÚkwargsr�   )7r	   ÚImportErrorr
   rI   rÏ   ÚDEFAULT_EXAMPLESrD   ÚyamlÚ	safe_loadÚcopyÚdeepcopyrž   r/   rŒ   r   r™   r•   r–   r›   r?   r»   rT   rS   r¸   rÅ   r¬   r]   r\   rN   rg   r÷   ro   r¿   re   ÚlistÚkeysr”   Úapply_chat_templater‡   rˆ   r†   Ú	ones_liker   r   r   r   r   r   r   r   ÚgenerateÚstartrµ   rA   ÚKeyboardInterrupt)r¡   rI   ÚexamplesrM   rj   rž   r‹   r‰   Úgeneration_streamerr�   r–   rk   rH   ri   Úsplit_inputrJ   ÚsuccessÚexample_namer  r  Úgeneration_kwargsÚthreadÚmodel_outputs                          r.   ÚrunzChatCommand.runÙ  sñ  € Ü Ô"ÜÐhÓiÐiÜ!Ô#ÜÐjÓkÐkà�y‰yˆØ×ÑÐ%Ü'‰Hä�d×(Ñ(Ó)ð -¨QÜŸ>™>¨!Ó,�÷-ô —}‘} TÓ*ˆà�9‰9ÐÜ“>‰Dà—9‘9ˆDä3°DÓ9ÑˆˆyÜ2°9ÐRVÐdhÔiÐä&6°yÀ$Ç/Á/ÐSW×SeÑSeÓ&fÑ#ˆ�mä!¨T×-DÑ-DÐPTÔUˆ	Ø�‰ÔÜ! ,×"<Ñ"<Ó=ˆØðPØ&Ÿ_™_Ó.�
à Ò(Ü-¨l×.HÑ.HÓI�DØ—O‘OÔ%Øà Ò'Ø×(Ñ(Ô*Øà Ò'Øà Ò(Ø—O‘OÔ%Ü#'§=¡=°Ó#6�LÜ-¨l×.HÑ.HÓI�DØà×(Ñ(¨Ô0´S¸×9IÑ9IÓ9KÓ5LÈqÒ5PØ",×"2Ñ"2Ó"4�Kä˜;Ó'¨1Ò,Ø#.¨q¡>™à#'˜Ü(¨¨|¸XÓF�HØ×)Ñ)¨N¸8¸*ÀAÐ*FÔGÙà×0Ñ0°Ô<Ü,:¸:À|ÐU^Ó,_Ñ)�L 'ÙØ!˜Ø!Ÿ™Ô)Ù à×(Ñ(¨Ô3¼¸J×<LÑ<LÓ<NÓ8OÐSTÒ8TØ#-×#3Ñ#3Ó#5°aÑ#8�LØ# xÑ/Ø!Ÿ™Ô)Ø!˜Ø!×4Ñ4°X¸lÑ5KÈFÑ5SÔTØ%-¨lÑ%;¸FÑ%C™
à!×+Ñ+Ø& | nÐ4^Ô_cÐdl×dqÑdqÓdsÓ_tÐ^uÐuvÐwôñ !à—‘ V¸
ÑCÔDà"×6Ñ6°tÈDÐhlÐ6Óm×pÑpØ—L‘Ló�ô "'§¡°Ó!8�à$Ø&4Ø 3Ø&2×&AÑ&AØ!-×!7Ñ!7Ø!-×!7Ñ!7Ø#/×#;Ñ#;Ø)×/Ñ/Ø)×/Ñ/Ø*6×*IÑ*IØ$0Ø$1ñ%Ð!ô   u§~¡~Ð>OÔP�Ø—‘”Ø(×6Ñ6Ð7JÓK�Ø—‘”Ø—‘ [¸\ÑJÔKñ] ÷%-ñ -ûôD %ò ÙðúsK   ÁP(Ä3:P5 Å.P5 ÆP5 Æ
?P5 Ç
A5P5 É5P5 É8B%P5 ÌDP5 Ð(P2Ð5	QÑ QN)rÆ   rÇ   rÈ   Ústaticmethodr   ré   r¢   rÚ   rb   r÷   r  r,   r-   r.   rÞ   rÞ   «  sH   „ Øð	< Nò 	<ó ð	<òð ð Cð ¨Dò ó ðó:mr-   rÞ   )9r  rE   r&   r$   Ústringr1   Úargparser   r   Údataclassesr   r   Ú	threadingr   Útypingr   r  Útransformers.utilsr	   r
   r¤   r   r%   r(   Úrich.consoler   Ú	rich.liver   Úrich.markdownr   r†   Útransformersr   r   r   r   rî   Úascii_lettersÚ
whitespacerð   Údigitsrñ   rÄ   ÚSUPPORTED_GENERATION_KWARGSr
  r/   r5   rN   rT   ro   r|   rŒ   r™   r›   rÊ   rà   rÞ   r,   r-   r.   ú<module>r.     s€  ðó  Û Û 	Û Û Û ß .ß (Ý Ý ã ç Då (ð €8‡?�?Ó˜	Ò!ÛáÔÝ$ÝÝ&áÔÛçjÓjá˜×,Ñ,¨v×/@Ñ/@Ñ@ÓAÐ ÙØ
×Ñ˜6Ÿ=™=Ñ(¨6×+<Ñ+<Ñ<Ð?bÑbóÐ ð€ò Ð ð ÐMÐNàð  Lðð ÐQÐRØÐNÐOØÐ.Ð/ØÐJÐKñ	Ð ò1ò0ò
%ò"ò""ðJ¨8Ð4HÑ+Ió ò&ò4+÷(Hñ HðV ÷ppð ppó ðppðf˜yó ô[Ð,õ [r-   