§
    ‚Štjq  ã                   ód  — 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Zd dlmZm	Z	 d dl
mZmZ d dlmZm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 d dlmZ 	 d dlZn# e$ r Y nw xY w ej        ¦   «         dk    rd dlZ e¦   «         r,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, d dl-m.Z. dddœZ/ e0ej1        ej2        z   ¦  «        Z3 e0ej1        ej4        z   ej2        z   dz   ¦  «        Z5ddiddiddiddiddiddiddidœZ6dZ7dd 8                    e6 9                    ¦   «         ¦  «        › d�Z: G d „ d!¦  «        Z; G d"„ d#¦  «        Z<d$e=dz  d%efd&„Z>d'e?e=         dz  d%e@fd(„ZAd3d)e=dz  d%e?e@         fd*„ZBd+e=d,e?e@         d-e@d%e=fd.„ZCd%e=fd/„ZDeEd0k    r e<d1¬2¦  «         dS dS )4é    N)ÚAsyncIteratorÚ	Awaitable)Ú	AnnotatedÚAny)ÚurljoinÚurlparse)ÚAsyncInferenceClientÚChatCompletionStreamOutput)ÚGenerationConfig)Úis_rich_availableÚWindows)Úfilesize)ÚConsole)ÚLive)ÚMarkdown)Ú	BarColumnÚProgressÚProgressColumnÚ
TextColumnÚTimeElapsedColumn)ÚTextÚ	localhosti@  )ÚhostnameÚportz .!\"#$%&'()*+,\-/:<=>?@[]^_`{|}~Ú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?z$Which number is larger, 9.9 or 9.11?)ÚllamaÚcodeÚ
helicopterÚnumbersÚbirdsÚsocksÚnumbers2aŒ  

**TRANSFORMERS CHAT INTERFACE**

Chat interface to try out a model. Besides chatting with the model, here are some basic commands:
- **!help**: shows all available commands (set generation settings, save chat, etc.)
- **!status**: shows the current status of the model and generation settings
- **!clear**: clears the current conversation and starts a new one
- **!exit**: closes the interface
am  

**TRANSFORMERS CHAT INTERFACE HELP**

Full command list:
- **!help**: shows this help message
- **!clear**: clears the current conversation and starts a new one
- **!status**: shows the current status of the model and generation settings
- **!example {NAME}**: loads example named `{NAME}` from the config and uses it as the user input.
Available example names: `z`, `a#  `
- **!set {ARG_1}={VALUE_1} {ARG_2}={VALUE_2}** ...: changes the system prompt or generation settings (multiple
settings are separated by a space). Accepts the same flags and format as the `generate_flags` CLI argument.
If you're a new user, check this basic flag guide: https://huggingface.co/docs/transformers/llm_tutorial#common-options
- **!save {SAVE_NAME} (optional)**: saves the current chat and settings to file by default to
`./chat_history/{MODEL_ID}/chat_{DATETIME}.yaml` or `{SAVE_NAME}` if provided
- **!exit**: closes the interface
c                   óÐ   — e Zd Zdededefd„Zdeee                  deeee	z  dz  f         fd„Z
defd	„Zd
„ Zdefd„Zdedefd„Zddededefd„Zddefd„Zdefd„Zdefd„ZdS )ÚRichInterfaceÚmodel_idÚuser_idÚbase_urlc                 óV   — t          ¦   «         | _        || _        || _        || _        d S ©N)r   Ú_consoler%   r&   r'   )Úselfr%   r&   r'   s       úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/cli/chat.pyÚ__init__zRichInterface.__init__k   s&   € Ý™	œ	ˆŒØ ˆŒØˆŒØ ˆŒˆˆó    ÚstreamÚreturnNc           	   ƒ   óf  K  — | j                              d| j        › d�¦  «         t          | j         d¬¦  «        5 }d}d}t	          j        ¦   «         }d }|ƒ d {V —†2 3 d {V —†}|j        d         j        j        }t          |j        d         d|¦  «        }t          |dd ¦  «        }	|	�t          |	d	|¦  «        }|sŒat          j
        d
d|¦  «        }||z  }g }
|                     ¦   «         D ]W}|
                     |¦  «         |                     d¦  «        r|
                     d¦  «         ŒB|
                     d¦  «         ŒXt          d                     |
¦  «                             ¦   «         d¬¦  «        }|                     |d¬¦  «         �Œ96 	 d d d ¦  «         n# 1 swxY w Y   t	          j        ¦   «         |z
  }|dk    rJ|dk    rD||z  }| j                              ¦   «          | j                              d|› d|d›d|d›d�¦  «         | j                              ¦   «          ||fS )Nz[bold blue]<z>:é   )ÚconsoleÚrefresh_per_secondÚ r   Úfinish_reasonÚusageÚcompletion_tokensz<(/*)(\w*)>z\<\1\2\>z```ú
z  
zgithub-dark)Ú
code_themeT)Úrefreshz[dim]z tokens in z.1fzs (z tok/s)[/dim])r*   Úprintr%   r   ÚtimeÚchoicesÚdeltaÚcontentÚgetattrÚreÚsubÚ
splitlinesÚappendÚ
startswithr   ÚjoinÚstripÚupdate)r+   r/   Úliver   r8   Ú
start_timer6   ÚtokenÚoutputsr7   ÚlinesÚlineÚmarkdownÚelapsedÚtok_per_secs                  r,   Ústream_outputzRichInterface.stream_outputq   s»  è è € ð 	Œ×ÒÐ<¨4¬=Ð<Ð<Ð<Ñ=Ô=Ð=Ý˜$œ-¸AÐ>Ñ>Ô>ð .	4À$ØˆDØ !ÐÝœ™œˆJØ(,ˆMØ%+˜|˜|˜|˜|˜|˜|ð )4ð )4ð )4ð )4ð )4ð )4ð )4�eØœ-¨Ô*Ô0Ô8�Ý '¨¬°aÔ(8¸/È=Ñ YÔ Y�å  w°Ñ5Ô5�ØÐ$Ý(/°Ð7JÐL]Ñ(^Ô(^Ð%àð Øõ œ& °¸gÑFÔF�à˜‘�ð �Ø ŸOšOÑ-Ô-ð -ð -�DØ—L’L Ñ&Ô&Ð&Ø—’ uÑ-Ô-ð -ð Ÿš TÑ*Ô*Ð*Ð*àŸš VÑ,Ô,Ð,Ð,å# B§G¢G¨E¡N¤N×$8Ò$8Ñ$:Ô$:À}ÐUÑUÔU�ð —’˜H¨d�Ñ3Ô3Ð3Ñ3ðS  ,˜|ð.	4ð .	4ð .	4ñ .	4ô .	4ð .	4ð .	4ð .	4ð .	4ð .	4ð .	4øøøð .	4ð .	4ð .	4ð .	4õ` ”)‘+”+ 
Ñ*ˆØ�QŠ;ˆ;Ð,¨qÒ0Ð0Ø+¨gÑ5ˆKØŒM×ÒÑ!Ô!Ð!ØŒM×ÒÐ tÐ(9Ð tÐ tÀgÐ tÐ tÐ tÐVaÐ tÐ tÐ tÐ tÑuÔuÐuØŒ×ÒÑÔÐà�]Ð"Ð"s   ¼"F%ÁFÁ$D4F%Æ%F)Æ,F)c                 ó~   — | j                              d| j        › d�¦  «        }| j                              ¦   «          |S )z!Gets user input from the console.ú[bold red]<z>:
)r*   Úinputr&   r<   )r+   rV   s     r,   rV   zRichInterface.input®   s>   € à”×#Ò#Ð$D°$´,Ð$DÐ$DÐ$DÑEÔEˆØŒ×ÒÑÔÐØˆr.   c                 ó8   — | j                              ¦   «          dS )zClears the console.N)r*   Úclear)r+   s    r,   rX   zRichInterface.clear´   s   € àŒ×ÒÑÔÐÐÐr.   r   c                 ó‚   — | j                              d| j        › d|› �¦  «         | j                              ¦   «          dS )z%Prints a user message to the console.rU   z>:[/ bold red]
N)r*   r<   r&   )r+   r   s     r,   Úprint_user_messagez RichInterface.print_user_message¸   sE   € àŒ×ÒÐN¨$¬,ÐNÐNÈÐNÐNÑOÔOÐOØŒ×ÒÑÔÐÐÐr.   Úcolorc                 óx   — | j                              d|› d|› �¦  «         | j                              ¦   «          dS )z,Prints text in a given color to the console.z[bold ú]N)r*   r<   )r+   r   r[   s      r,   Úprint_colorzRichInterface.print_color½   sC   € àŒ×ÒÐ3 UÐ3Ð3¨TÐ3Ð3Ñ4Ô4Ð4ØŒ×ÒÑÔÐÐÐr.   FÚmessageÚdefaultc                 óÞ   — |rdnd}| j                              d|› d|› d�¦  «        }| j                              ¦   «          |                     ¦   «                              ¦   «         }|s|S |dv S )zFDisplays a yes/no prompt to the user, returning True for confirmation.zY/nzy/Nz[bold yellow]z (z): >   ÚyÚyes)r*   rV   r<   rH   Úlower)r+   r_   r`   Údefault_hintÚresponses        r,   ÚconfirmzRichInterface.confirmÂ   s€   € à 'Ð2�u�u¨UˆØ”=×&Ò&Ð'S°wÐ'SÐ'SÀ,Ð'SÐ'SÐ'SÑTÔTˆØŒ×ÒÑÔÐà—>’>Ñ#Ô#×)Ò)Ñ+Ô+ˆØð 	ØˆNà˜<Ð'Ð'r.   Úminimalc                 ó¢   — | j                              t          |rt          nt          ¦  «        ¦  «         | j                              ¦   «          dS )z'Prints the help message to the console.N)r*   r<   r   ÚHELP_STRING_MINIMALÚHELP_STRING)r+   rh   s     r,   Ú
print_helpzRichInterface.print_helpÎ   sE   € àŒ×Ò�H¸GÐ%TÕ%8Ð%8ÍÑUÔUÑVÔVÐVØŒ×ÒÑÔÐÐÐr.   Úmodelc           
      ó¶  ‡‡‡— t          j        | j                             d¦  «        › d�d‰id¬¦  «        }|                     ¦   «           G d„ dt
          ¦  «        }dd	d
ddœŠ| j        j        t          ‰¦  «        dz   dz   k    Šˆˆˆfd„}t          t          d¦  «        t          d¬¦  «         |¦   «         t          ¦   «         | j        ¬¦  «        }|                      |d¦  «        d ¬¦  «        }d}t          || j        d¬¦  «        5  |                     ¦   «         D �](}|r|                     d¦  «        sŒt#          j        |dd …         ¦  «        }	|	                     d¦  «        }
|
dk    r|	                     dd¦  «        } nÀ|
dk    r#t)          |	                     dd¦  «        ¦  «        ‚|
d k    r�|	                     d!¦  «        }|	                     d"¦  «        } ||¦  «        }|r?|d#k    rd$nd%}|                     |||d&         |                     d'¦  «        |¬(¦  «         �Œ|                     ||d)d ¬*¦  «         �Œ*d d d ¦  «         n# 1 swxY w Y   |r,| j                             t/          d+‰› d,�¦  «        ¦  «         n+| j                             t/          d+‰› d-�¦  «        ¦  «         | j                             ¦   «          d S ).Nú/z/load_modelrm   T)Újsonr/   c                   ó   — e Zd Zd„ ZdS )ú3RichInterface.print_model_load.<locals>.StatsColumnc                 ó†  — |j         st          d¦  «        S |j                             d¦  «        dk    rÖt	          j        t          |j        ¦  «        ¦  «        }t	          j        t          |j         ¦  «        ¦  «        }|j        r*dt	          j        t          |j        ¦  «        ¦  «        › d�nd}|j	        �4dt          |j	        dz  ¦  «        › dt          |j	        dz  ¦  «        d›�}nd}t          |› d	|› |› |› �d
¬¦  «        S t          t          |j        ¦  «        › d	t          |j         ¦  «        › �¦  «        S )Nr5   ÚunitÚbytesz  z/sé<   ú:Ú02dro   zprogress.download)Ústyle)
Útotalr   ÚfieldsÚgetr   ÚdecimalÚintÚ	completedÚspeedÚtime_remaining)r+   ÚtaskÚdoneÚtotr€   Úetas         r,   Úrenderz:RichInterface.print_model_load.<locals>.StatsColumn.renderØ   s6  € Ø”zð $Ý ™8œ8�Oà”;—?’? 6Ñ*Ô*¨gÒ5Ð5Ý#Ô+­C°´Ñ,?Ô,?Ñ@Ô@�DÝ"Ô*­3¨t¬z©?¬?Ñ;Ô;�CØJNÌ*Ð\ÐF¥Ô!1µ#°d´j±/´/Ñ!BÔ!BÐFÐFÐFÐFÐZ\�EàÔ*Ð6Øg¥3 tÔ':¸bÑ'@Ñ#AÔ#AÐgÐgÅCÈÔH[Ð^`ÑH`ÑDaÔDaÐgÐgÐg˜˜à ˜å 4Ð ;Ð ;¨#Ð ;¨uÐ ;°cÐ ;Ð ;ÐCVÐWÑWÔWÐWÝ�s 4¤>Ñ2Ô2ÐFÐFµS¸¼±_´_ÐFÐFÑGÔGÐGr.   N)Ú__name__Ú
__module__Ú__qualname__r†   © r.   r,   ÚStatsColumnrr   ×   s(   € € € € € ðHð Hð Hð Hð Hr.   r‹   zLoading processorzLoading configzDownloading fileszLoading into memory)Ú	processorÚconfigÚdownloadÚweightsé   éF   c                 óF   •— ‰                      | | ¦  «        }‰r‰› d|› �S |S )Nu     â†’  )r|   )Ú	stage_keyÚ
stage_textrm   Úshow_model_prefixÚstage_labelss     €€€r,   Ú_labelz.RichInterface.print_model_load.<locals>._labelô   s:   ø€ Ø%×)Ò)¨)°YÑ?Ô?ˆJØ ð 5ØÐ4Ð4¨
Ð4Ð4Ð4ØÐr.   z[bold]{task.description}é(   )Ú	bar_width)r3   rŒ   )rz   F)r3   Ú	transients   data: é   ÚstatusÚreadyÚcachedÚerrorr_   zUnknown errorÚloadingÚstageÚprogressrŽ   ru   ÚitemsÚcurrentrz   )Údescriptionr   rz   rt   r   )r¥   r   rz   z_*z was already loaded.*_z is warm.*_)ÚrequestsÚpostr'   ÚrstripÚraise_for_statusr   r*   ÚwidthÚlenr   r   r   r   Úadd_taskr   Ú
iter_linesrF   rp   Úloadsr|   ÚRuntimeErrorrI   r<   r   )r+   rm   rf   r‹   r—   r¢   Útask_idrž   rO   Úeventrœ   r¡   ÚprogÚlabelrt   r•   r–   s    `             @@r,   Úprint_model_loadzRichInterface.print_model_loadÓ   s¨  øøø€ Ý”= D¤M×$8Ò$8¸Ñ$=Ô$=Ð!JÐ!JÐ!JÐRYÐ[`ÐQaÐjnÐoÑoÔoˆØ×!Ò!Ñ#Ô#Ð#ð	Hð 	Hð 	Hð 	Hð 	H�.ñ 	Hô 	Hð 	Hð& -Ø&Ø+Ø,ð	
ð 
ˆð !œMÔ/µ3°u±:´:À±>ÀBÑ3FÒFÐð	ð 	ð 	ð 	ð 	ð 	ð 	õ ÝÐ1Ñ2Ô2Ý Ð#Ñ#Ô#ØˆK‰MŒMÝÑÔØ”Mð
ñ 
ô 
ˆð ×#Ò# F F¨;Ñ$7Ô$7¸tÐ#ÑDÔDˆØˆå�( D¤M¸TÐBÑBÔBð 	]ð 	]Ø ×+Ò+Ñ-Ô-ð ]ñ ]�Øð  4§?¢?°9Ñ#=Ô#=ð ØÝœ
 4¨¨¨¤8Ñ,Ô,�ØŸš 8Ñ,Ô,�à˜WÒ$Ð$Ø"ŸYšY x°Ñ7Ô7�FØ�Eà˜WÒ$Ð$Ý& u§y¢y°¸OÑ'LÔ'LÑMÔMÐMà˜YÒ&Ð&Ø!ŸIšI gÑ.Ô.�EØ Ÿ9š9 ZÑ0Ô0�DØ"˜F 5™MœM�Eàð ]Ø*/°:Ò*=Ð*=˜w˜wÀ7˜Ø ŸšØ#°À$ÀyÄ/ÐY]×YaÒYaÐbiÑYjÔYjÐquð (ñ ô ð ñ ð !Ÿš¨¸UÈaÐW[˜Ñ\Ô\Ð\ùð3	]ð 	]ð 	]ñ 	]ô 	]ð 	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøð 	]ð 	]ð 	]ð 	]ð6 ð 	CØŒM×Ò¥Ð)K¨eÐ)KÐ)KÐ)KÑ LÔ LÑMÔMÐMÐMàŒM×Ò¥Ð)@¨eÐ)@Ð)@Ð)@Ñ AÔ AÑBÔBÐBØŒ×ÒÑÔÐÐÐs   ÄD?IÉI É#I r�   c                 ó¸   — | j                              d| j        › d�¦  «         | j                              d|› �¦  «         | j                              ¦   «          dS )zFPrints the status of the model and generation settings to the console.z[bold blue]Model: r9   z[bold blue]N)r*   r<   r%   )r+   r�   s     r,   Úprint_statuszRichInterface.print_status%  s_   € àŒ×ÒÐB°´ÐBÐBÐBÑCÔCÐCØŒ×ÒÐ2¨&Ð2Ð2Ñ3Ô3Ð3ØŒ×ÒÑÔÐÐÐr.   )F)r‡   rˆ   r‰   Ústrr-   r   r   r
   Útupler   rS   rV   rX   rZ   r^   Úboolrg   rl   r´   r   r¶   rŠ   r.   r,   r$   r$   j   sr  € € € € € ð! ð !¨sð !¸cð !ð !ð !ð !ð;#Ø Ð.HÔ IÔJð;#à	ˆs�C˜#‘I Ñ$Ð$Ô	%ð;#ð ;#ð ;#ð ;#ðz�sð ð ð ð ðð ð ð sð ð ð ð ð
 ð ¨Cð ð ð ð ð

(ð 
(˜sð 
(¨Tð 
(¸dð 
(ð 
(ð 
(ð 
(ðð  $ð ð ð ð ð
P cð Pð Pð Pð PðdÐ#3ð ð ð ð ð ð r.   r$   c                   ó–  — e Zd ZdZded         › ded         › �ddddddfdee ej        d	¬
¦  «        f         deedz   ej        d¬
¦  «        f         dee	e         dz   ej        d¬
¦  «        f         deedz   ej
        d¬
¦  «        f         deedz   ej
        d¬
¦  «        f         dee ej
        d¬
¦  «        f         deedz   ej
        d¬
¦  «        f         deedz   ej
        d¬
¦  «        f         ddfd„Zed„ ¦   «         Zdededeeeeef         f         ded e	e         dee	e         ef         fd!„Zd"„ ZdS )#ÚChatú(Chat with a model from the command line.zhttp://r   rw   r   Nz./chat_history/r%   z9ID of the model to use (e.g. 'HuggingFaceTB/SmolLM3-3B').)Úhelpr'   z7Base url to connect to (e.g. http://localhost:8000/v1).Úgenerate_flagsa¦  Flags to pass to `generate`, using a space as a separator between flags. Accepts booleans, numbers, and lists of integers, more advanced parameterization should be set through --generation-config. Example: `transformers chat <base_url> <model_id> max_new_tokens=100 do_sample=False eos_token_id=[1,2]`. If you're a new user, check this basic flag guide: https://huggingface.co/docs/transformers/llm_tutorial#common-optionsÚuserzKUsername to display in chat interface. Defaults to the current user's name.Úsystem_promptzSystem prompt.Úsave_folderzFolder to save chat history.Úexamples_pathz"Path to a yaml file with examples.Úgeneration_configzÏPath to a local generation config file or to a HuggingFace repo containing a `generation_config.json` file. Other generation settings passed as CLI arguments will be applied on top of this generation config.r0   c	                 ó  — || _         t          | j         ¦  «        }	|	j        t          d         k    r0|	j        t          d         k    r|                      | j         ¦  «         || _        || _        || _        t          |¦  «        }
|
 
                    dd¬¦  «          |
j
        d	i t          |¦  «        ¤Ž |
| _        ||| j                             ¦   «         dœ| _        |�|nt          ¦   «         | _        |rAt#          |¦  «        5 }t%          j        |¦  «        | _        ddd¦  «         n# 1 swxY w Y   nt*          | _        t-          ¦   «         st/          d¦  «        ‚t1          j        |                      ¦   «         ¦  «         dS )
r¼   r   r   Té   )Ú	do_sampleÚmax_new_tokens)r'   r%   r�   NzHYou need to install rich to use the chat interface. (`pip install rich`)rŠ   )r'   r   r   ÚDEFAULT_HTTP_ENDPOINTr   Úcheck_healthr%   rÀ   rÁ   Úload_generation_configrI   Úparse_generate_flagsr�   Úto_dictÚsettingsÚget_usernamer¿   ÚopenÚyamlÚ	safe_loadÚexamplesÚDEFAULT_EXAMPLESr   ÚImportErrorÚasyncioÚrunÚ
_inner_run)r+   r%   r'   r¾   r¿   rÀ   rÁ   rÂ   rÃ   Úparsedr�   Úfs               r,   r-   zChat.__init__1  s¸  € ðF !ˆŒå˜$œ-Ñ(Ô(ˆØŒ?Õ3°JÔ?Ò?Ð?ÀFÄKÕShÐioÔSpÒDpÐDpØ×Ò˜dœmÑ,Ô,Ð,à ˆŒØ*ˆÔØ&ˆÔõ (Ð(9Ñ:Ô:ˆØ�Š °SˆÑ9Ô9Ð9ØˆŒÐ=Ð=Õ,¨^Ñ<Ô<Ð=Ð=Ð=ØˆŒà%-¸8ÈtÌ{×ObÒObÑOdÔOdÐeÐeˆŒð !Ð,�D�Dµ,±.´.ˆŒ	ð ð 	-Ý�mÑ$Ô$ð 2¨Ý $¤¨qÑ 1Ô 1�”ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2øõ -ˆDŒMõ !Ñ"Ô"ð 	jÝÐhÑiÔiÐiõ 	Œ�D—O’OÑ%Ô%Ñ&Ô&Ð&Ð&Ð&s   ÄD.Ä.D2Ä5D2c                 óð   — t          | dz   d¦  «        }	 t          j        |¦  «        }|j        dk    rt	          d| › d|j        › d�¦  «        ‚n&# t          j        $ r t	          d| › d�¦  «        ‚w xY wd	S )
Nro   ÚhealthéÈ   zThe server running on z returned status code z on health check (/health).zNo server currently running on z™. To run a local server, please run `transformers serve` in aseparate shell. Find more information here: https://huggingface.co/docs/transformers/servingT)r   Úhttpxr|   Ústatus_codeÚ
ValueErrorÚConnectError)ÚurlÚ
health_urlÚoutputs      r,   rÉ   zChat.check_healthw  sº   € å˜S 3™Y¨Ñ1Ô1ˆ
ð
	Ý”Y˜zÑ*Ô*ˆFØÔ! SÒ(Ð(Ý Øw¨SÐwÐwÈÔHZÐwÐwÐwñô ð ð )øõ Ô!ð 	ð 	ð 	Ýðp°#ð pð pð pñô ð ð	øøøð ˆts   •:A Á#A3Ú
user_inputÚ	interfacerÒ   r�   Úchatc                 óö  — d}|dk    r*t          | j        ¦  «        }|                     ¦   «          �nÃ|dk    r|                     ¦   «          �n§|                     d¦  «        rÉt          |                     ¦   «         ¦  «        dk     r¤|                     ¦   «         }t          |¦  «        dk    r|d         n@t          j         	                    | j
        | j        dt          j        d¦  «        › d	�¦  «        }t          ||| j        ¬
¦  «         |                     d|› d�d¬¦  «         �nÉ|                     d¦  «        rr|dd…                              ¦   «         }	|	                     ¦   «         }	|	D ]#}
d|
vr|                     d|
› d�d¬¦  «          nŒ$ |j        d"i t'          |	¦  «        ¤Ž �nB|                     d¦  «        rßt          |                     ¦   «         ¦  «        dk    rº|                     ¦   «         d         }||v r\|                     ¦   «          g }|                     ||         d         ¦  «         |                     d||         d         dœ¦  «         nŽd|› dt-          |                     ¦   «         ¦  «        › d�}|                     |d¬¦  «         nN|dk    r|                     |¬¦  «         n1d}|                     d |› d!�d¬¦  «         |                     ¦   «          |||fS )#z£
        Handles all user commands except for `!exit`. May update the chat history (e.g. reset it) or the
        generation config (e.g. set a new flag).
        Tú!clearú!helpú!saveé   é   Úchat_ú%Y-%m-%d_%H-%M-%Sú.json©Úfilenameræ   rÍ   úChat saved to ú!Úgreen©r   r[   ú!setr2   Nú=ú(Invalid flag format, missing `=` after `ú;`. Please use the format `arg_1=value_1 arg_2=value_2 ...`.Úredú!exampler   r¿   ©Úroler@   úExample ú* not found in list of available examples: ú.ú!status©r�   Fú'ú/' is not a valid command. Showing help message.rŠ   )Únew_chat_historyrÀ   rX   rl   rF   r«   ÚsplitÚosÚpathrG   rÁ   r%   r=   ÚstrftimeÚ	save_chatrÍ   r^   rH   rI   rË   rZ   rE   ÚlistÚkeysr¶   )r+   rä   rå   rÒ   r�   ræ   Úvalid_commandÚsplit_inputrñ   Únew_generate_flagsÚflagÚexample_nameÚexample_errors                r,   Úhandle_non_exit_user_commandsz"Chat.handle_non_exit_user_commandsˆ  sp  € ð ˆà˜Ò!Ð!Ý# DÔ$6Ñ7Ô7ˆDØ�OŠOÑÔÐÑà˜7Ò"Ð"Ø× Ò Ñ"Ô"Ð"Ñ"à×"Ò" 7Ñ+Ô+ð 1	#µ°J×4DÒ4DÑ4FÔ4FÑ0GÔ0GÈ!Ò0KÐ0KØ$×*Ò*Ñ,Ô,ˆKõ �{Ñ#Ô# qÒ(Ð(ð ˜A”�å”W—\’\ $Ô"2°D´MÐCtÍ4Ì=ÐYlÑKmÔKmÐCtÐCtÐCtÑuÔuð õ
 ˜x¨d¸T¼]ÐKÑKÔKÐKØ×!Ò!Ð'C¸Ð'CÐ'CÐ'CÈ7Ð!ÑSÔSÐSÑSà×"Ò" 6Ñ*Ô*ð '	#ð ",¨A¨B¨B¤×!5Ò!5Ñ!7Ô!7ÐØ!3×!9Ò!9Ñ!;Ô!;Ðà*ð Jð J�Ø˜d�?�?Ø×)Ò)ðAÀtð Að Að Að $ð *ñ ô ð ð �Eð #ð �”ÐIÐIÕ 4Ð5GÑ HÔ HÐIÐIÐIùà×"Ò" :Ñ.Ô.ð 	#µ3°z×7GÒ7GÑ7IÔ7IÑ3JÔ3JÈaÒ3OÐ3OØ%×+Ò+Ñ-Ô-¨aÔ0ˆLØ˜xÐ'Ð'Ø—’Ñ!Ô!Ð!Ø�Ø×,Ò,¨X°lÔ-CÀFÔ-KÑLÔLÐLØ—’ V¸ÀÔ8NÈvÔ8VÐWÐWÑXÔXÐXÐXð p˜|ÐoÐoÕW[Ð\d×\iÒ\iÑ\kÔ\kÑWlÔWlÐoÐoÐoð ð ×%Ò%¨=ÀÐ%ÑFÔFÐFÐFà˜9Ò$Ð$Ø×"Ò"¨&Ð"Ñ1Ô1Ð1Ð1ð "ˆMØ×!Ò!Ð'f¨:Ð'fÐ'fÐ'fÐnsÐ!ÑtÔtÐtØ× Ò Ñ"Ô"Ð"à�] FÐ*Ð*r.   c           	   ƒ   óÚ	  K  — t          | j        | j        | j        ¬¦  «        }|                     ¦   «          t          | j        ¦  «        }|                     d¬¦  «         |                     | j        ¦  «         | j	        }t          | j        ¬¦  «        4 ƒd {V —†}d }	 	 |�|}d }|                     |¦  «         n|                     ¦   «         }|dk    r�në|dk    r)t          | j        ¦  «        }|                     ¦   «          Œi|dk    r|                     ¦   «          Œ„|                     d¦  «        rÉt          |                     ¦   «         ¦  «        d	k     r¤|                     ¦   «         }t          |¦  «        d	k    r|d
         n@t           j                             | j        | j        dt)          j        d¦  «        › d�¦  «        }t-          ||| j        ¬¦  «         |                     d|› d�d¬¦  «         �Œb|                     d¦  «        rr|dd …                              ¦   «         }	|	                     ¦   «         }	|	D ]#}
d|
vr|                     d|
› d�d¬¦  «          nŒ$ |j        d,i t7          |	¦  «        ¤Ž �Œé|                     d¦  «        rót          |                     ¦   «         ¦  «        d	k    rÎ|                     ¦   «         d
         }|| j        v rf|                     ¦   «          g }|                     | j        |         d         ¦  «         |                     d| j        |         d         dœ¦  «         nÁd|› dt=          | j                             ¦   «         ¦  «        › d�}|                     |d¬¦  «         n||d k    r|                      |¬!¦  «         �Œ|                     d¦  «        r1|                     d"|› d#�d¬¦  «         |                     ¦   «          �ŒU|                     d|dœ¦  «         | !                    ¦   «         | j        d$œ}| "                    |d| j        |¬%¦  «        }| #                    |¦  «        ƒ d {V —†\  }}|                     d&|dœ¦  «         |d'k    r/|                     d(d)¦  «         | $                    d*¦  «        rd+}�Œn# tJ          $ r Y nw xY w�Œ$	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )-N)r%   r&   r'   T)rh   )r'   z!exitrè   ré   rê   rë   rì   rí   rî   rï   rð   rò   ró   rô   rõ   rö   r2   r÷   rø   rù   rú   rû   r   r¿   rü   rþ   rÿ   r   r  r  r  r  )rÃ   rm   )r/   rm   Ú
extra_bodyÚ	assistantÚlengthz2Generation stopped after reaching the token limit.ÚyellowzContinue generating?u'   Please continue. Do not repeat text.â€�rŠ   )&r$   r%   r¿   r'   rX   r  rÀ   rl   r´   r�   r	   rZ   rV   rF   r«   r  r  r  rG   rÁ   r=   r	  r
  rÍ   r^   rH   rI   rË   rÒ   rE   r  r  r¶   Úto_json_stringÚchat_completionrS   rg   ÚKeyboardInterrupt)r+   rå   ræ   r�   ÚclientÚpending_user_inputrä   r  rñ   r  r  r  r  r  r/   Úmodel_outputr6   s                    r,   r×   zChat._inner_runÒ  sœ  è è € Ý!¨4¬=À$Ä)ÐVZÔVcÐdÑdÔdˆ	Ø�ŠÑÔÐÝ Ô 2Ñ3Ô3ˆð 	×Ò TÐÑ*Ô*Ð*Ø×"Ò" 4¤=Ñ1Ô1Ð1à”ˆå'°´Ð?Ñ?Ô?ð i	ð i	ð i	ð i	ð i	ð i	ð i	À6Ø-1ÐðgðfØ)Ð5Ø%7˜
Ø-1Ð*Ø!×4Ò4°ZÑ@Ô@Ð@Ð@à%.§_¢_Ñ%6Ô%6˜
ð " WÒ,Ð,Ùà# xÒ/Ð/Ý/°Ô0BÑCÔC˜Ø!ŸšÑ)Ô)Ð)Ø à# wÒ.Ð.Ø!×,Ò,Ñ.Ô.Ð.Ø à#×.Ò.¨wÑ7Ô7ð 9M½CÀ
×@PÒ@PÑ@RÔ@RÑ<SÔ<SÐVWÒ<WÐ<WØ&0×&6Ò&6Ñ&8Ô&8˜õ  # ;Ñ/Ô/°1Ò4Ð4ð (¨œN˜Nå!#¤§¢Ø $Ô 0°$´-ÐArÍÌÐWjÑIkÔIkÐArÐArÐArñ"ô "ð !õ "¨8¸$ÈÌÐWÑWÔWÐWØ!×-Ò-Ð3OÀHÐ3OÐ3OÐ3OÐW^Ð-Ñ_Ô_Ð_Ù à#×.Ò.¨vÑ6Ô6ð ,Mð .8¸¸¸¬^×-AÒ-AÑ-CÔ-CÐ*Ø-?×-EÒ-EÑ-GÔ-GÐ*à$6ð Vð V˜DØ"¨$˜˜Ø )× 5Ò 5ð)MÐSWð )Mð )Mð )Mð +0ð !6ñ !"ô !"ð !"ð !& ð  /ð *˜FœMÐUÐUÕ,@ÐASÑ,TÔ,TÐUÐUÐUÙ à#×.Ò.¨zÑ:Ô:ð M½sÀ:×CSÒCSÑCUÔCUÑ?VÔ?VÐZ[Ò?[Ð?[Ø'1×'7Ò'7Ñ'9Ô'9¸!Ô'<˜Ø'¨4¬=Ð8Ð8Ø%ŸOšOÑ-Ô-Ð-Ø#%˜DØ%×8Ò8¸¼À|Ô9TÐU[Ô9\Ñ]Ô]Ð]Ø ŸKšK°ÀDÄMÐR^ÔD_Ð`fÔDgÐ(hÐ(hÑiÔiÐiÐið -M°|ð  -Mð  -MÕosÐtxô  uB÷  uGò  uGñ  uIô  uIñ  pJô  pJð  -Mð  -Mð  -M˜MØ%×1Ò1°}ÈEÐ1ÑRÔRÐRÐRà# yÒ0Ð0Ø!×.Ò.°fÐ.Ñ=Ô=Ð=Ù à#×.Ò.¨sÑ3Ô3ð MØ!×-Ò-Ø!` ZÐ!`Ð!`Ð!`Ðhmð .ñ ô ð ð "×,Ò,Ñ.Ô.Ð.Ù ð Ÿš¨VÀ
Ð$KÐ$KÑLÔLÐLð .4×-BÒ-BÑ-DÔ-DØ!%¤ð"ð "�Jð
 $×3Ò3ØØ#Ø"œmØ#-ð	 4ñ ô �Fð 9B×8OÒ8OÐPVÑ8WÔ8WÐ2WÐ2WÐ2WÐ2WÐ2WÐ2WÑ/�L -à—K’K¨ÀÐ NÐ NÑOÔOÐOà$¨Ò0Ð0Ø!×-Ò-Ð.bÐdlÑmÔmÐmØ$×,Ò,Ð-CÑDÔDð %Ø1ZÐ.Ù$øøÝ(ð ð ð Ø�EðøøøñMgð gði	ð i	ð i	ñ i	ô i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	ð i	øøøð i	ð i	ð i	ð i	ð i	ð i	s�   ÂSÂ#6R4ÃSÃ.R4Ä	SÄ
R4Ä$SÄ%CR4ÈSÈBR4ÊSÊ
D$R4Î.SÎ0AR4Ï4SÏ6B;R4Ò1SÒ4
SÒ>SÓ SÓSÓ
S$Ó'S$)r‡   rˆ   r‰   Ú__doc__rÈ   r   r·   ÚtyperÚArgumentr  ÚOptionr-   ÚstaticmethodrÉ   r$   Údictr   r¸   r  r×   rŠ   r.   r,   r»   r»   ,  sš  € € € € € Ø2Ð2ð ZÐ+¨JÔ7ÐYÐYÐ:OÐPVÔ:WÐYÐYð ð
 ØTXØYjØhlð ðAD'ð D'à˜C  ¤Ð5pÐ!qÑ!qÔ!qÐqÔrðD'ð Ø�$‰J˜˜œÐ,eÐfÑfÔfÐfô
ðD'ð "Ø�ŒI˜ÑØˆEŒNð[ðñ ô ð	ô
ðD'ð& Ø�$‰JØˆEŒLÐkÐlÑlÔlðnô
ð'D'ð. !  t¡¨\¨U¬\Ð?OÐ-PÑ-PÔ-PÐ!PÔQð/D'ð0 ˜s L E¤LÐ6TÐ$UÑ$UÔ$UÐUÔVð1D'ð2 !  t¡¨\¨U¬\Ð?cÐ-dÑ-dÔ-dÐ!dÔeð3D'ð6 %Ø�$‰JØˆEŒLð gðñ ô ðô
ð7D'ðB 
ðCD'ð D'ð D'ð D'ðL ðð ñ „\ðð H+àðH+ð !ðH+ð �s˜D  c œNÐ*Ô+ð	H+ð
 !ðH+ð �4ŒjðH+ð 
ˆt�DŒzÐ+Ð+Ô	,ðH+ð H+ð H+ð H+ðTtð tð tð tð tr.   r»   rÃ   r0   c                 óø   — | €t          ¦   «         S d| v rSt          j                             | ¦  «        }t          j                             | ¦  «        }t          j        ||¦  «        S t          j        | ¦  «        S )Nrï   )r   r  r  ÚdirnameÚbasenameÚfrom_pretrained)rÃ   r&  rñ   s      r,   rÊ   rÊ   I  so   € ØÐ ÝÑ!Ô!Ð!àÐ#Ð#Ð#Ý”'—/’/Ð"3Ñ4Ô4ˆÝ”7×#Ò#Ð$5Ñ6Ô6ˆÝÔ/°¸ÑBÔBÐBåÔ/Ð0AÑBÔBÐBr.   r¾   c                 ó  ‡— | �t          | ¦  «        dk    ri S d„ | D ¦   «         }d„ |                     ¦   «         D ¦   «         }d„ |                     ¦   «         D ¦   «         }dt          dt          fd„Šˆfd	„|                     ¦   «         D ¦   «         }d
                     d„ |                     ¦   «         D ¦   «         ¦  «        }d|z   dz   }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }	 t          j        |¦  «        }n"# t          j        $ r t          d¦  «        ‚w xY w|S )zUParses the generate flags from the user input into a dictionary of `generate` kwargs.Nr   c                 ó„   — i | ]=}d |                      d¦  «        d         z   d z   |                      d¦  «        d         “Œ>S )ú"r÷   r   rì   )r  )Ú.0r  s     r,   ú
<dictcomp>z(parse_generate_flags.<locals>.<dictcomp>]  sC   € ÐlÐlÐlÐUY˜c D§J¢J¨s¡O¤O°AÔ$6Ñ6¸Ñ<¸d¿jºjÈ¹o¼oÈaÔ>PÐlÐlÐlr.   c                 ón   — i | ]2\  }}||                      ¦   «         d v r|                      ¦   «         n|“Œ3S ))ÚtrueÚfalse)rd   ©r,  ÚkÚvs      r,   r-  z(parse_generate_flags.<locals>.<dictcomp>a  sJ   € ð ð ð ÙBFÀ!ÀQˆ˜Ÿš™	œ	Ð%6Ð6Ð6ˆ1�7Š7‰9Œ9ˆ9¸Aðð ð r.   c                 ó*   — i | ]\  }}||d k    rdn|“ŒS )ÚNoneÚnullrŠ   r1  s      r,   r-  z(parse_generate_flags.<locals>.<dictcomp>d  s*   € ÐiÐiÐiÁ$À!ÀQ˜a¨1°ª;¨;  ¸AÐiÐiÐir.   Úsr0   c                 ó~   — |                       d¦  «        } |                      ddd¦  «                             ¦   «         S )Nú-r   r5   rì   )ÚremoveprefixÚreplaceÚisdigit)r7  s    r,   Ú	is_numberz'parse_generate_flags.<locals>.is_numberg  s5   € à�NŠN˜3ÑÔˆØ�yŠy˜˜b !Ñ$Ô$×,Ò,Ñ.Ô.Ð.r.   c                 ó>   •— i | ]\  }}| ‰|¦  «        sd |› d �n|“ŒS )r+  rŠ   )r,  r2  r3  r=  s      €r,   r-  z(parse_generate_flags.<locals>.<dictcomp>l  s8   ø€ ÐpÐpÐpÉÈÈA˜a°°¸1±´Ð!D  Q    À1ÐpÐpÐpr.   z, c                 ó"   — g | ]\  }}|› d |› �‘ŒS )z: rŠ   r1  s      r,   ú
<listcomp>z(parse_generate_flags.<locals>.<listcomp>q  s&   € Ð&^Ð&^Ð&^±t°q¸!¨! { {¨q { {Ð&^Ð&^Ð&^r.   Ú{Ú}z"null"r6  z"true"r/  z"false"r0  z"[ú[z]"r]   r÷   rw   z�Failed to convert `generate_flags` into a valid JSON object.
`generate_flags` = {generate_flags}
Converted JSON string = {generate_flags_string})
r«   r£   r·   r¹   rG   r;  rp   r®   ÚJSONDecodeErrorrß   )r¾   Úgenerate_flags_as_dictÚgenerate_flags_stringÚprocessed_generate_flagsr=  s       @r,   rË   rË   U  sõ  ø€ àÐ¥ ^Ñ!4Ô!4¸Ò!9Ð!9Øˆ	ð
 mÐlÐ]kÐlÑlÔlÐðð ØJ`×JfÒJfÑJhÔJhðñ ô Ðð jÐiÐJ`×JfÒJfÑJhÔJhÐiÑiÔiÐð/•Sð /�Tð /ð /ð /ð /ð
 qÐpÐpÐpÐQg×QmÒQmÑQoÔQoÐpÑpÔpÐð
 !ŸIšIÐ&^Ð&^Ð?U×?[Ò?[Ñ?]Ô?]Ð&^Ñ&^Ô&^Ñ_Ô_Ðð  Ð"7Ñ7¸#Ñ=Ðð 2×9Ò9¸(ÀFÑKÔKÐØ1×9Ò9¸(ÀFÑKÔKÐØ1×9Ò9¸)ÀWÑMÔMÐØ1×9Ò9¸$ÀÑDÔDÐØ1×9Ò9¸$ÀÑDÔDÐð 2×9Ò9¸#¸sÑCÔCÐð
Ý#'¤:Ð.CÑ#DÔ#DÐ Ð øÝÔð 
ð 
ð 
Ýð@ñ
ô 
ð 	
ð
øøøð $Ð#s   ÅE& Å&FrÀ   c                 ó   — | rd| dœgng S )z Returns a new chat conversation.Úsystemrü   rŠ   )rÀ   s    r,   r  r  ‹  s   € à=JÐR�X¨-Ð8Ð8Ð9Ð9ÐPRÐRr.   rñ   ræ   rÍ   c                 ó*  — t          j        t           j                             | ¦  «        d¬¦  «         t	          | d¦  «        5 }t          j        ||dœ|d¬¦  «         ddd¦  «         n# 1 swxY w Y   t           j                             | ¦  «        S )z!Saves the chat history to a file.T)Úexist_okÚw)rÍ   Úchat_historyr2   )ÚindentN)r  Úmakedirsr  r&  rÏ   rp   ÚdumpÚabspath)rñ   ræ   rÍ   rÙ   s       r,   r
  r
  �  sÊ   € å„K•”—’ Ñ)Ô)°DÐ9Ñ9Ô9Ð9Ý	ˆh˜Ñ	Ô	ð M ÝŒ	˜x¸Ð>Ð>ÀÈ!ÐLÑLÔLÐLðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð MåŒ7�?Š?˜8Ñ$Ô$Ð$s   ÁA+Á+A/Á2A/c                  óª   — t          j        ¦   «         dk    rt          j        ¦   «         S t	          j        t          j        ¦   «         ¦  «        j        S )z)Returns the username of the current user.r   )ÚplatformrI  r  ÚgetloginÚpwdÚgetpwuidÚgetuidÚpw_namerŠ   r.   r,   rÎ   rÎ   ˜  s:   € å„ÑÔ˜IÒ%Ð%ÝŒ{‰}Œ}ÐåŒ|�BœI™KœKÑ(Ô(Ô0Ð0r.   Ú__main__z meta-llama/Llama-3.2-3b-Instruct)r%   r)   )FrÕ   rp   r  rS  rB   Ústringr=   Úcollections.abcr   r   Útypingr   r   Úurllib.parser   r   rÝ   r¦   r   rÐ   Úhuggingface_hubr	   r
   Útransformersr   Útransformers.utilsr   ÚreadlinerÔ   rI  rU  Úrichr   Úrich.consoler   Ú	rich.liver   Úrich.markdownr   Úrich.progressr   r   r   r   r   Ú	rich.textr   rÈ   ÚsetÚascii_lettersÚ
whitespaceÚALLOWED_KEY_CHARSÚdigitsÚALLOWED_VALUE_CHARSrÓ   rj   rG   r  rk   r$   r»   r·   rÊ   r  r$  rË   r  r
  rÎ   r‡   rŠ   r.   r,   ú<module>rn     s(  ðð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à €€€Ø €€€Ø €€€Ø €€€Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ Là )Ð )Ð )Ð )Ð )Ð )Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð	Ø€O€O€O€OøØð 	ð 	ð 	à€Dð	øøøð €8„?ÑÔ˜	Ò!Ð!Ø€J€J€JàÐÑÔð ØÐÐÐÐÐØ$Ð$Ð$Ð$Ð$Ð$ØÐÐÐÐÐØ&Ð&Ð&Ð&Ð&Ð&Ø`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`Ð`ØÐÐÐÐÐà%0¸$Ð?Ð?Ð Ø�C˜Ô,¨vÔ/@Ñ@ÑAÔAÐ Ø�cØ
Ô˜6œ=Ñ(¨6Ô+<Ñ<Ð?bÑbñô Ð ð
 ÐMÐNàð)ðð ÐQÐRØÐNÐOØÐ.Ð/ØÐJÐKØÐ?Ð@ðð Ð ð 	Ð ðð "Ÿ;š;Ð'7×'<Ò'<Ñ'>Ô'>Ñ?Ô?ðð ð €ð&ð ð ð ð ñ ô ð ðDZð Zð Zð Zð Zñ Zô Zð Zðz	C¨c°D©jð 	CÐ=Mð 	Cð 	Cð 	Cð 	Cð3$¨¨c¬°TÑ)9ð 3$¸dð 3$ð 3$ð 3$ð 3$ðlSð S C¨$¡Jð S¸$¸t¼*ð Sð Sð Sð Sð
%˜ð % 4¨¤:ð %¸ð %À#ð %ð %ð %ð %ð1�cð 1ð 1ð 1ð 1ð ˆzÒÐØ€DÐ4Ð5Ñ5Ô5Ð5Ð5Ð5ð Ðs   ÁA ÁA'Á&A'