Ë
    Gêñiq  ã                   óL  — 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 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$ 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jb                  ejd                  z   «      Z3 e0ejb                  ejh                  z   ejd                  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jq                  e6js                  «       «      › 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«       yy# e$ r Y �ŒDw xY w)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y)ÚRichInterfaceÚmodel_idÚuser_idÚbase_urlc                 óL   — t        «       | _        || _        || _        || _        y ©N)r   Ú_consoler%   r&   r'   )Úselfr%   r&   r'   s       úW/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/cli/chat.pyÚ__init__zRichInterface.__init__k   s    € Ü›	ˆŒØ ˆŒØˆŒØ ˆ�ó    ÚstreamÚreturnNc           	   ƒ   óP  K  — | j                   j                  d| j                  › d�«       t        | j                   d¬«      5 }d}d}t	        j                  «       }d }|ƒ d {  –—† 2 3 d {  –—† }|j
                  d   j                  j                  }t        |j
                  d   d|«      }t        |dd «      }	|	�t        |	d	|«      }|sŒet        j                  d
d|«      }||z  }g }
|j                  «       D ]G  }|
j                  |«       |j                  d«      r|
j                  d«       Œ7|
j                  d«       ŒI t        dj                  |
«      j!                  «       d¬«      }|j#                  |d¬«       �Œ7 �Œ!7 �Œ6 	 d d d «       n# 1 sw Y   nxY wt	        j                  «       z
  }|dkD  rKdkD  rF||z  }| j                   j                  «        | j                   j                  d|› d|d›d|d›d�«       | j                   j                  «        fS ­w)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	  è ø€ ð 	�‰×Ñ˜l¨4¯=©=¨/¸Ð<Ô=Ü˜$Ÿ-™-¸AÔ>ð .	4À$ØˆDØ !ÐÜŸ™›ˆJØ(,ˆMØ%+Ÿ|÷ )4ð )4�eØŸ-™-¨Ñ*×0Ñ0×8Ñ8�Ü '¨¯©°aÑ(8¸/È=Ó Y�ä  w°Ó5�ØÐ$Ü(/°Ð7JÐL]Ó(^Ð%áØô Ÿ&™& °¸gÓF�à˜‘�ð �Ø ŸO™OÓ-ò -�DØ—L‘L Ô&Ø—‘ uÔ-ð Ÿ™ TÕ*àŸ™ VÕ,ð-ô $ B§G¡G¨E£N×$8Ñ$8Ó$:À}ÔU�ð —‘˜H¨d�Ö3ðS  ,ùð )4ù™|÷.	4÷ .	4ñ .	4úô` —)‘)“+ 
Ñ*ˆØ�QŠ;Ð,¨qÒ0Ø+¨gÑ5ˆKØ�M‰M×ÑÔ!Ø�M‰M×Ñ %Ð(9Ð':¸+ÀgÈcÀ]ÐRUÐVaÐbeÐUfÐfsÐ tÔuØ�‰×ÑÔà�]Ð"Ð"ùsP   ‚AH&Á FÁ#FÁ$FÁ(F
Á,FÁ-F
Á0DFÆF
Æ
FÆ	H&ÆFÆBH&c                 óŒ   — | j                   j                  d| j                  › d�«      }| j                   j                  «        |S )z!Gets user input from the console.ú[bold red]<z>:
)r*   Úinputr&   r<   )r+   rV   s     r,   rV   zRichInterface.input®   s8   € à—‘×#Ñ# k°$·,±,°¸tÐ$DÓEˆØ�‰×ÑÔØˆr.   c                 ó8   — | j                   j                  «        y)zClears the console.N)r*   Úclear)r+   s    r,   rX   zRichInterface.clear´   s   € à�‰×ÑÕr.   r   c                 óŽ   — | j                   j                  d| j                  › d|› �«       | j                   j                  «        y)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¸   s6   € à�‰×Ñ˜k¨$¯,©,¨Ð7GÈÀvÐNÔOØ�‰×ÑÕr.   Úcolorc                 óz   — | j                   j                  d|› d|› �«       | j                   j                  «        y)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½   s1   € à�‰×Ñ˜f U G¨1¨T¨FÐ3Ô4Ø�‰×ÑÕr.   ÚmessageÚdefaultc                 óÒ   — |rdnd}| j                   j                  d|› d|› d�«      }| j                   j                  «        |j                  «       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Â   sf   € á '‘u¨UˆØ—=‘=×&Ñ&¨°w°i¸rÀ,ÀÈsÐ'SÓTˆØ�‰×ÑÔà—>‘>Ó#×)Ñ)Ó+ˆÙØˆNà˜<Ð'Ð'r.   Úminimalc                 ó˜   — | j                   j                  t        |rt        nt        «      «       | j                   j                  «        y)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Î   s.   € à�‰×ÑœH¹GÕ%8ÌÓUÔVØ�‰×ÑÕr.   Úmodelc           
      ó  ‡‡‡— t        j                  | j                  j                  d«      › d�d‰id¬«      }|j	                  «         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                  ¬«      }|j                   |d«      d ¬«      }d}t        || j                  d¬«      5  |j                  «       D ]ñ  }|r|j!                  d«      sŒt#        j$                  |dd  «      }	|	j'                  d«      }
|
dk(  r|	j'                  dd«      } n›|
dk(  rt)        |	j'                  dd«      «      ‚|
d k(  sŒ|	j'                  d!«      }|	j'                  d"«      } ||«      }|r2|d#k(  rd$nd%}|j+                  |||d&   |j'                  d'«      |¬(«       ŒÝ|j+                  ||d)d ¬*«       Œó d d d «       |r)| j                  j-                  t/        d+‰› d,�«      «       n(| j                  j-                  t/        d+‰› d-�«      «       | j                  j-                  «        y # 1 sw Y   ŒwxY w).Nú/z/load_modelrm   T)Újsonr/   c                   ó   — e Zd Zd„ Zy)ú3RichInterface.print_model_load.<locals>.StatsColumnc                 ó   — |j                   st        d«      S |j                  j                  d«      dk(  rät	        j
                  t        |j                  «      «      }t	        j
                  t        |j                   «      «      }|j                  r,dt	        j
                  t        |j                  «      «      › d�nd}|j                  �6d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Ø   s  € Ø—z’zÜ ›8�Oà—;‘;—?‘? 6Ó*¨gÒ5Ü#×+Ñ+¬C°·±Ó,?Ó@�DÜ"×*Ñ*¬3¨t¯z©z«?Ó;�CØJNÏ*Ê*˜b¤×!1Ñ!1´#°d·j±j³/Ó!BÐ CÀ2ÑFÐZ\�Eà×*Ñ*Ð6Ø "¤3 t×':Ñ':¸bÑ'@Ó#AÐ"BÀ!ÄCÈ×H[ÑH[Ð^`ÑH`ÓDaÐbeÐCfÐg™à ˜ä 4 &¨¨#¨¨u¨g°c°UÐ ;ÐCVÔWÐWÜœs 4§>¡>Ó2Ð3°1´S¸¿¹³_Ð4EÐFÓGÐGr.   N)Ú__name__Ú
__module__Ú__qualname__r†   © r.   r,   ÚStatsColumnrr   ×   s   „ óHr.   r‹   zLoading processorzLoading configzDownloading fileszLoading into memory)Ú	processorÚconfigÚdownloadÚweightsé   éF   c                 ó>   •— ‰j                  | | «      }‰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Ù Ø˜ ¨
 |Ð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Ó   sd  ú€ Ü—=‘= D§M¡M×$8Ñ$8¸Ó$=Ð#>¸kÐ!JÐRYÐ[`ÐQaÐjnÔoˆØ×!Ñ!Ô#ô	Hœ.ô 	Hð& -Ø&Ø+Ø,ñ	
ˆð !ŸM™M×/Ñ/´3°u³:À±>ÀBÑ3FÑFÐö	ô ÜÐ1Ó2Ü Ô#Ù‹MÜÓØ—M‘Mô
ˆð ×#Ñ#¡F¨;Ó$7¸tÐ#ÓDˆØˆä�( D§M¡M¸TÔBñ 	]Ø ×+Ñ+Ó-ò ]�Ù 4§?¡?°9Ô#=ØÜŸ
™
 4¨¨ 8Ó,�ØŸ™ 8Ó,�à˜WÒ$Ø"ŸY™Y x°Ó7�FÙà˜WÒ$Ü& u§y¡y°¸OÓ'LÓMÐMà˜YÓ&Ø!ŸI™I gÓ.�EØ Ÿ9™9 ZÓ0�DÙ" 5›M�EáØ*/°:Ò*=™wÀ7˜Ø Ÿ™Ø#°À$ÀyÁ/ÐY]×YaÑYaÐbiÓYjÐquð (õ ð !Ÿ™¨¸UÈaÐW[˜Õ\ð1]÷	]ñ6 Ø�M‰M×Ñ¤¨2¨e¨WÐ4JÐ)KÓ LÕMà�M‰M×Ñ¤¨2¨e¨W°KÐ)@Ó AÔBØ�‰×ÑÕ÷?	]ð 	]ús   Ã<BI7ÆA5I7É7J r�   c                 óÆ   — | j                   j                  d| j                  › d�«       | j                   j                  d|› �«       | j                   j                  «        y)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%  sK   € à�‰×ÑÐ0°·±°¸rÐBÔCØ�‰×Ñ˜k¨&¨Ð2Ô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   sÂ   „ ð! ð !¨sð !¸có !ð;#Ø Ð.HÑ IÑJð;#à	ˆs�C˜#‘I Ñ$Ð$Ñ	%ó;#ðz�só òð só ð
 ð ¨Có ñ

(˜sð 
(¨Tð 
(¸dó 
(ñ $ó ð
P có PðdÐ#3ô r.   r$   c                   óN  — 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y)#Ú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(  r1|	j                  t        d   k(  r| j                  | j                   «       || _        || _        || _        t        |«      }
|
j                  dd¬«        |
j                  d	i t        |«      ¤Ž |
| _        ||| j                  j                  «       dœ| _        |�|n	t        «       | _        |r/t#        |«      5 }t%        j&                  |«      | _        ddd«       nt*        | _        t-        «       st/        d«      ‚t1        j2                  | j5                  «       «       y# 1 sw Y   ŒBxY w)
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ÁKÔShÐioÑSpÒDpØ×Ñ˜dŸm™mÔ,à ˆŒØ*ˆÔØ&ˆÔô (Ð(9Ó:ˆØ�‰ °SˆÔ9Øˆ�‰Ñ=Ô,¨^Ó<Ò=ØˆŒà%-¸8ÈtÏ{É{×ObÑObÓOdÑeˆŒð !Ð,‘D´,³.ˆŒ	ñ Ü�mÓ$ð 2¨Ü $§¡¨qÓ 1�”÷2ð 2ô -ˆDŒMô !Ô"ÜÐhÓiÐiô 	�‰�D—O‘OÓ%Õ&÷2ð 2ús   Ã<E$Å$E-c                 óò   — t        | dz   d«      }	 t        j                  |«      }|j                  dk7  rt	        d| › d|j                  › d�«      ‚	 y	# t        j
                  $ r t	        d| › d�«      ‚w xY w)
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ˆ
ð
	Ü—Y‘Y˜zÓ*ˆFØ×!Ñ! SÒ(Ü Ø,¨S¨EÐ1GÈ×HZÑHZÐG[Ð[vÐwóð ð )ð øô ×!Ñ!ò 	ÜØ1°#°ð 7oð póð ð	ús   ‘A A Á#A6Ú
user_inputÚ	interfacerÒ   r�   Úchatc                 ó  — d}|dk(  r't        | j                  «      }|j                  «        �nV|dk(  r|j                  «        �n?|j	                  d«      r¼t        |j                  «       «      dk  r |j                  «       }t        |«      dk(  r|d   nKt        j                  j                  | j                  | j                  dt        j                  d«      › d	�«      }t        ||| j                  ¬
«       |j!                  d|› d�d¬«       �nr|j	                  d«      rd|dd j#                  «       }	|	j                  «       }	|	D ]   }
d|
vsŒ|j!                  d|
› d�d¬«        �n  |j$                  d"i t'        |	«      ¤Ž ný|j	                  d«      r«t        |j                  «       «      dk(  r�|j                  «       d   }||v rD|j                  «        g }|j)                  ||   d   «       |j+                  d||   d   dœ«       nud|› dt-        |j/                  «       «      › d�}|j!                  |d¬«       nA|dk(  r|j1                  |¬«       n)d}|j!                  d |› d!�d¬«       |j                  «        |||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ˆ  s�  € ð ˆà˜Ò!Ü# D×$6Ñ$6Ó7ˆDØ�O‰OÖà˜7Ò"Ø× Ñ Ö"à×"Ñ" 7Ô+´°J×4DÑ4DÓ4FÓ0GÈ!Ò0KØ$×*Ñ*Ó,ˆKô �{Ó# qÒ(ð ˜A’ä—W‘W—\‘\ $×"2Ñ"2°D·M±MÀUÌ4Ï=É=ÐYlÓKmÐJnÐnsÐCtÓuð ô
 ˜x¨d¸T¿]¹]ÕKØ×!Ñ!¨¸°zÀÐ'CÈ7Ð!ÖSà×"Ñ" 6Ô*ð ",¨A¨B ×!5Ñ!5Ó!7ÐØ!3×!9Ñ!9Ó!;Ðà*ò J�Ø˜d’?Ø×)Ñ)àFÀtÀfð MAð Að $ð *ô ò ðJð �—‘ÑIÔ 4Ð5GÓ HÓIà×"Ñ" :Ô.´3°z×7GÑ7GÓ7IÓ3JÈaÒ3OØ%×+Ñ+Ó-¨aÑ0ˆLØ˜xÑ'Ø—‘Ô!Ø�Ø×,Ñ,¨X°lÑ-CÀFÑ-KÔLØ—‘ V¸ÀÑ8NÈvÑ8VÑWÕXð ˜|˜nÐ,VÔW[Ð\d×\iÑ\iÓ\kÓWlÐVmÐmnÐoð ð ×%Ñ%¨=ÀÐ%ÕFà˜9Ò$Ø×"Ñ"¨&Ð"Õ1ð "ˆMØ×!Ñ!¨¨:¨,Ð6eÐ'fÐnsÐ!ÔtØ× Ñ Ô"à�] FÐ*Ð*r.   c           	   ƒ   ó
	  K  — t        | j                  | j                  | j                  ¬«      }|j	                  «        t        | j                  «      }|j                  d¬«       |j                  | j                  «       | j                  }t        | j                  ¬«      4 ƒd {  –—† }d }	 	 |�|}d }|j                  |«       n|j                  «       }|dk(  r�nh|dk(  r&t        | j                  «      }|j	                  «        Œ\|dk(  r|j                  «        Œr|j                  d«      r¼t        |j                  «       «      d	k  r |j                  «       }t        |«      d	k(  r|d
   nKt         j"                  j%                  | j&                  | j                  dt)        j*                  d«      › d�«      }t-        ||| j.                  ¬«       |j1                  d|› d�d¬«       �Œ?|j                  d«      rd|dd  j3                  «       }	|	j                  «       }	|	D ]  }
d|
vsŒ|j1                  d|
› d�d¬«        n  |j4                  d,i t7        |	«      ¤Ž �Œ´|j                  d«      rÓt        |j                  «       «      d	k(  r·|j                  «       d
   }|| j8                  v rX|j	                  «        g }|j                  | j8                  |   d   «       |j;                  d| j8                  |   d   dœ«       n¥d|› dt=        | j8                  j?                  «       «      › d�}|j1                  |d¬«       ng|d k(  r|jA                  |¬!«       �Œ±|j                  d«      r)|j1                  d"|› d#�d¬«       |j                  «        �Œë|j;                  d|dœ«       |jC                  «       | j                  d$œ}|jE                  |d| j                  |¬%«      }|jG                  |«      ƒ d {  –—† \  }}|j;                  d&|dœ«       |d'k(  r'|j1                  d(d)«       |jI                  d*«      rd+}�Œ—�Œ˜d d d «      ƒd {  –—†  y 7 �Œ±7 Œ]# tJ        $ r Y Œ!w xY w7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)-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ÑVcÔdˆ	Ø�‰ÔÜ × 2Ñ 2Ó3ˆð 	×Ñ TÐÔ*Ø×"Ñ" 4§=¡=Ô1à—‘ˆä'°·±Ô?÷ i	ð i	À6Ø-1ÐØðfØ)Ð5Ø%7˜
Ø-1Ð*Ø!×4Ñ4°ZÕ@à%.§_¡_Ó%6˜
ð " WÒ,Ùà# xÒ/Ü/°×0BÑ0BÓC˜Ø!Ÿ™Ô)Ø à# wÒ.Ø!×,Ñ,Ô.Ø à#×.Ñ.¨wÔ7¼CÀ
×@PÑ@PÓ@RÓ<SÐVWÒ<WØ&0×&6Ñ&6Ó&8˜ô  # ;Ó/°1Ò4ð (¨šNä!#§¡§¡Ø $× 0Ñ 0°$·-±-À5ÌÏÉÐWjÓIkÐHlÐlqÐAró"ð !ô "¨8¸$ÈÏÉÕWØ!×-Ñ-°^ÀHÀ:ÈQÐ3OÐW^Ð-Ô_Ù à#×.Ñ.¨vÔ6ð .8¸¸¨^×-AÑ-AÓ-CÐ*Ø-?×-EÑ-EÓ-GÐ*à$6ò V˜DØ"¨$šØ )× 5Ñ 5à*RÐSWÐRXð YMð )Mð +0ð !6ô !"ñ !&ðVð *˜FŸM™MÑUÔ,@ÐASÓ,TÒUÙ à#×.Ñ.¨zÔ:¼sÀ:×CSÑCSÓCUÓ?VÐZ[Ò?[Ø'1×'7Ñ'7Ó'9¸!Ñ'<˜Ø'¨4¯=©=Ñ8Ø%ŸO™OÔ-Ø#%˜DØ%×8Ñ8¸¿¹À|Ñ9TÐU[Ñ9\Ô]Ø ŸK™K°ÀDÇMÁMÐR^ÑD_Ð`fÑDgÑ(hÕià.6°|°nÐDnÔosÐtx÷  uBñ  uB÷  uGñ  uGó  uIó  pJð  oKð  KLð  -M˜MØ%×1Ñ1°}ÈEÐ1ÕRà# yÒ0Ø!×.Ñ.°fÐ.Ô=Ù à#×.Ñ.¨sÔ3Ø!×-Ñ-Ø#$ Z LÐ0_Ð!`Ðhmð .ô ð "×,Ñ,Ô.Ù ð Ÿ™¨VÀ
Ñ$KÔLð .4×-BÑ-BÓ-DØ!%§¡ñ"�Jð
 $×3Ñ3ØØ#Ø"Ÿm™mØ#-ð	 4ó �Fð 9B×8OÑ8OÐPVÓ8W×2WÑ/�L -à—K‘K¨ÀÑ NÔOà$¨Ò0Ø!×-Ñ-Ð.bÐdlÔmØ$×,Ñ,Ð-CÔDØ1ZÐ.Ù$ñK ÷i	÷ i	ñ i	ùð~ 3Xùô )ò ÙðúðQi	ø÷ i	÷ i	ñ i	üsÜ   ‚B%RÂ'QÂ(RÂ+Q.Â0-QÃQ.Ã*QÄ	Q.Ä
QÄQ.Ä CQÇ+Q.Ç-=QÈ+5QÉ Q.É"C;QÍQ.Í8QÎQ.ÎA$QÏ=QÏ>AQÑQ.ÑRÑQ,ÑRÑQÑ	Q)Ñ&Q.Ñ(Q)Ñ)Q.Ñ,RÑ.R Ñ4Q7Ñ5R Ñ<R)r‡   rˆ   r‰   Ú__doc__rÈ   r   r·   ÚtyperÚArgumentr  ÚOptionr-   ÚstaticmethodrÉ   r$   Údictr   r¸   r  r×   rŠ   r.   r,   r»   r»   ,  s  „ Ù2ð Ð+¨JÑ7Ð8¸Ð:OÐPVÑ:WÐ9XÐYð ð
 ØTXØYjØhlð ñAD'à˜C  §¡Ð5pÔ!qÐqÑrðD'ð Ø�$‰J˜˜Ÿ™Ð,eÔfÐfñ
ðD'ð "Ø�‰I˜ÑØˆE�N‰Nð[ôð	ñ
ðD'ð& Ø�$‰JØˆE�L‰LÐkÔlðnñ
ð'D'ð. !  t¡¨\¨U¯\©\Ð?OÔ-PÐ!PÑQð/D'ð0 ˜s L E§L¡LÐ6TÔ$UÐUÑVð1D'ð2 !  t¡¨\¨U¯\©\Ð?cÔ-dÐ!dÑeð3D'ð6 %Ø�$‰JØˆE�L‰Lð gôðñ
ð7D'ðB 
óCD'ðL ñó ðð H+àðH+ð !ðH+ð �s˜D  c ™NÐ*Ñ+ð	H+ð
 !ðH+ð �4‰jðH+ð 
ˆt�D‰zÐ+Ð+Ñ	,óH+óTtr.   r»   rÃ   r0   c                 óô   — | €
t        «       S d| v rTt        j                  j                  | «      }t        j                  j	                  | «      }t        j
                  ||«      S t        j
                  | «      S )Nrï   )r   r  r  ÚdirnameÚbasenameÚfrom_pretrained)rÃ   r&  rñ   s      r,   rÊ   rÊ   I  sg   € ØÐ ÜÓ!Ð!àÐ#Ñ#Ü—'‘'—/‘/Ð"3Ó4ˆÜ—7‘7×#Ñ#Ð$5Ó6ˆÜ×/Ñ/°¸ÓBÐBä×/Ñ/Ð0AÓBÐBr.   r¾   c           	      óþ  — | �t        | «      dk(  ri S | D �ci c]/  }d|j                  d«      d   z   dz   |j                  d«      d   “Œ1 }}|j                  «       D ��ci c]*  \  }}||j                  «       dv r|j                  «       n|“Œ, }}}|j                  «       D ��ci c]  \  }}||dk(  rdn|“Œ }}}dt        d	t
        fd
„}|j                  «       D ��ci c]  \  }}| ||«      sd|› d�n|“Œ }}}dj                  |j                  «       D ��cg c]  \  }}|› d|› �‘Œ c}}«      }d|z   dz   }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }	 t        j                  |«      }|S c c}w c c}}w c c}}w c c}}w c c}}w # t        j                  $ r t        d«      ‚w xY w)zUParses the generate flags from the user input into a dictionary of `generate` kwargs.r   ú"r÷   rì   )ÚtrueÚfalseÚNoneÚnullÚsr0   c                 óf   — | j                  d«      } | j                  ddd«      j                  «       S )Nú-r   r5   rì   )ÚremoveprefixÚreplaceÚisdigit)r/  s    r,   Ú	is_numberz'parse_generate_flags.<locals>.is_numberg  s,   € à�N‰N˜3ÓˆØ�y‰y˜˜b !Ó$×,Ñ,Ó.Ð.r.   z, z: ú{ú}z"null"z"true"r+  z"false"r,  z"[ú[z]"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£   rd   r·   r¹   rG   r3  rp   r®   ÚJSONDecodeErrorrß   )r¾   r  Úgenerate_flags_as_dictÚkÚvr5  Úgenerate_flags_stringÚprocessed_generate_flagss           r,   rË   rË   U  sC  € àÐ¤ ^Ó!4¸Ò!9Øˆ	ð
 ^lÖlÐUY˜c D§J¡J¨s£O°AÑ$6Ñ6¸Ñ<¸d¿j¹jÈ»oÈaÑ>PÑPÐlÐÐlð
 Ka×JfÑJfÓJh÷ÙBFÀ!ÀQˆ˜Ÿ™›	Ð%6Ñ6ˆ1�7‰7Œ9¸AÑ=ðÐñ ð Ka×JfÑJfÓJh×iÁ$À!ÀQ˜a¨1°ª;¡¸AÑ=ÐiÐÑið/”Sð /œTó /ð
 Rh×QmÑQmÓQo×pÉÈÈA˜a±¸1´ 1 Q C q¡À1ÑDÐpÐÑpð
 !ŸI™IÐ?U×?[Ñ?[Ó?]×&^±t°q¸!¨!¨¨B¨q¨c¢{Ó&^Ó_Ðð  Ð"7Ñ7¸#Ñ=Ðð 2×9Ñ9¸(ÀFÓKÐØ1×9Ñ9¸(ÀFÓKÐØ1×9Ñ9¸)ÀWÓMÐØ1×9Ñ9¸$ÀÓDÐØ1×9Ñ9¸$ÀÓDÐð 2×9Ñ9¸#¸sÓCÐð
Ü#'§:¡:Ð.CÓ#DÐ ð $Ð#ùòW mùóùó jùó qùó
 '_øô" ×Ñò 
Üð@ó
ð 	
ð
ús)   —4G Á /GÂ%GÃGÄG
Æ)G ÇG<rÀ   c                 ó   — | rd| dœgS g S )z Returns a new chat conversation.Úsystemrü   rŠ   )rÀ   s    r,   r  r  ‹  s   € á=J�X¨-Ñ8Ð9ÐRÐPRÐRr.   rñ   ræ   rÍ   c                 ó   — t        j                  t         j                  j                  | «      d¬«       t	        | d«      5 }t        j                  ||dœ|d¬«       ddd«       t         j                  j                  | «      S # 1 sw Y   Œ(xY w)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
  �  sj   € ä‡K�K”—‘—‘ Ó)°DÕ9Ü	ˆh˜Ó	ð M Ü�	‰	˜x¸Ñ>ÀÈ!ÕL÷Mä�7‰7�?‰?˜8Ó$Ð$÷Mð Mús   ÁBÂBc                  óº   — t        j                  «       dk(  rt        j                  «       S t	        j
                  t        j                  «       «      j                  S )z)Returns the username of the current user.r   )Úplatformr@  r  ÚgetloginÚpwdÚgetpwuidÚgetuidÚpw_namerŠ   r.   r,   rÎ   rÎ   ˜  s8   € ä‡�Ó˜IÒ%Ü�{‰{‹}Ðä�|‰|œBŸI™I›KÓ(×0Ñ0Ð0r.   Ú__main__z meta-llama/Llama-3.2-3b-Instruct)r%   r)   )FrÕ   rp   r  rJ  rB   Ústringr=   Úcollections.abcr   r   Útypingr   r   Úurllib.parser   r   rÝ   r¦   r   rÐ   Úhuggingface_hubr	   r
   Útransformersr   Útransformers.utilsr   ÚreadlinerÔ   r@  rL  Ú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>re     s  ðó Û Û 	Û Û 	Û Û ß 4ß !ß *ã Û Û Û ß Lå )Ý 0ð	Ûð
 €8‡?�?Ó˜	Ò!ÛáÔÝÝ$ÝÝ&ß`Õ`Ýà%0¸$Ñ?Ð Ù˜×,Ñ,¨v×/@Ñ/@Ñ@ÓAÐ ÙØ
×Ñ˜6Ÿ=™=Ñ(¨6×+<Ñ+<Ñ<Ð?bÑbóÐ ð
 ÐMÐNàð)ðð ÐQÐRØÐNÐOØÐ.Ð/ØÐJÐKØÐ?Ð@ñÐ ð 	Ð ð	ð "Ÿ;™;Ð'7×'<Ñ'<Ó'>Ó?Ð@ð Að€÷&ñ ÷DZñ Zðz	C¨c°D©jð 	CÐ=Mó 	Cð3$¨¨c©°TÑ)9ð 3$¸dó 3$ñlS C¨$¡Jð S¸$¸t¹*ó Sð
%˜ð % 4¨¡:ð %¸ð %À#ó %ð1�có 1ð ˆzÒÙÐ4Ö5ð øðw ò 	âð	ús   ÁF ÆF#Æ"F#