Ë
    îÍ:jF~  ã                   ó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Zd dlZd dlm	Z	m
Z
 d dl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mZmZ d d	lmZ d d
lmZm Z  d dl!m"Z"m#Z# 	 d dl$Z$ ejL                  «       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/m0Z0  e1ejd                  ejf                  z   «      Z4 e1ejd                  ejj                  z   ejf                  z   dz   «      Z6ddiddiddiddiddiddiddidœZ7dZ8ddjs                  e7ju                  «       «      › d�Z; G d„ d «      Z<e G d!„ d"«      «       Z=d#e
fd$„Z> G d%„ d&e«      Z?e@d'k(  r. e=«       ZAd(eA_B        d)eA_B         e?eA«      ZCeCj‰                  «        yy# e%$ r Y �Œ5w xY w)*é    N)ÚArgumentParserÚ	Namespace)ÚAsyncIterator)Ú	dataclassÚfield)ÚThread)ÚOptional)ÚAsyncInferenceClientÚChatCompletionStreamOutput)ÚAutoTokenizerÚGenerationConfigÚPreTrainedTokenizer)ÚBaseTransformersCLICommand)ÚServeArgumentsÚServeCommand)Úis_rich_availableÚis_torch_availableÚWindows)ÚConsole)ÚLive)ÚMarkdown)ÚAutoModelForCausalLMÚBitsAndBytesConfigz .!\"#$%&'()*+,\-/:<=>?@[]^_`{|}~Ú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_NAME}/chat_{DATETIME}.yaml` or `{SAVE_NAME}` if provided
- **!exit**: closes the interface
c                   óš   — e Zd Zddee   dee   fd„Zdee   deee	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fd„Zdededefd„Zy)ÚRichInterfaceNÚ
model_nameÚ	user_namec                 óf   — t        «       | _        |€d| _        n|| _        |€d| _        y || _        y )NÚ	assistantÚuser)r   Ú_consoler$   r%   )Úselfr$   r%   s      úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/transformers/commands/chat.pyÚ__init__zRichInterface.__init__w   s3   € Ü›	ˆŒØÐØ)ˆD�Oà(ˆDŒOØÐØ#ˆD�Nà&ˆD�Nó    ÚstreamÚreturnc              ƒ   óÜ  K  — | j                   j                  d| j                  › d�«       t        | j                   d¬«      5 }d}|ƒ d {  –—† 2 3 d {  –—† }|j                  d   j
                  j                  }|sŒ/t        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| j                   j                  «        S ­w)Nz[bold blue]<z>:é   )ÚconsoleÚrefresh_per_secondÚ r   z<(/*)(\w*)>z\<\1\2\>z```ú
z  
zgithub-dark)Ú
code_themeT)Úrefresh)r)   Úprintr$   r   ÚchoicesÚdeltaÚcontentÚreÚsubÚ
splitlinesÚappendÚ
startswithr   ÚjoinÚstripÚupdate)	r*   r.   Úliver   ÚtokenÚoutputsÚlinesÚlineÚmarkdowns	            r+   Ústream_outputzRichInterface.stream_output‚   sE  è ø€ Ø�‰×Ñ˜l¨4¯?©?Ð*;¸2Ð>Ô?Ü˜$Ÿ-™-¸AÔ>ð &	4À$ØˆDØ%+Ÿ|÷ $4ð $4�eØŸ-™-¨Ñ*×0Ñ0×8Ñ8�áØô Ÿ&™& °¸gÓF�à˜‘�ð �Ø ŸO™OÓ-ò -�DØ—L‘L Ô&Ø—‘ uÔ-ð Ÿ™ TÕ*àŸ™ VÕ,ð-ô $ B§G¡G¨E£N×$8Ñ$8Ó$:À}ÔU�ð —‘˜H¨d�Õ3ðI  ,øð $4ø™|÷&	4÷ &	4ñ &	4úðP 	�‰×ÑÔàˆùsO   ‚AE,ÁEÁD5ÁEÁD9ÁD7ÁD9ÁCEÄ7D9Ä9EÄ;	E,ÅEÅ	#E,c                 óŒ   — | j                   j                  d| j                  › d�«      }| j                   j                  «        |S )z!Gets user input from the console.ú[bold red]<z>:
)r)   Úinputr%   r8   )r*   rM   s     r+   rM   zRichInterface.input°   s9   € à—‘×#Ñ# k°$·.±.Ð1AÀÐ$FÓGˆØ�‰×ÑÔØˆr-   c                 ó8   — | j                   j                  «        y)zClears the console.N)r)   Úclear©r*   s    r+   rO   zRichInterface.clear¶   s   € à�‰×ÑÕr-   r   c                 óŽ   — | j                   j                  d| j                  › d|› �«       | j                   j                  «        y)z%Prints a user message to the console.rL   z>:[/ bold red]
N)r)   r8   r%   )r*   r   s     r+   Úprint_user_messagez RichInterface.print_user_messageº   s7   € à�‰×Ñ˜k¨$¯.©.Ð)9Ð9IÈ$ÈÐPÔQØ�‰×ÑÕr-   Úcolorc                 óz   — | j                   j                  d|› d|› �«       | j                   j                  «        y)z,Prints text in a given color to the console.z[bold ú]N©r)   r8   )r*   r   rS   s      r+   Úprint_colorzRichInterface.print_color¿   s1   € à�‰×Ñ˜f U G¨1¨T¨FÐ3Ô4Ø�‰×ÑÕr-   Úminimalc                 ó˜   — | j                   j                  t        |rt        nt        «      «       | j                   j                  «        y)z'Prints the help message to the console.N)r)   r8   r   ÚHELP_STRING_MINIMALÚHELP_STRING)r*   rX   s     r+   Ú
print_helpzRichInterface.print_helpÄ   s.   € à�‰×ÑœH¹GÕ%8ÌÓUÔVØ�‰×ÑÕr-   Úgeneration_configÚmodel_kwargsc                 óò   — | j                   j                  d|› d�«       |r| j                   j                  d|› �«       | j                   j                  d|› �«       | j                   j                  «        y)zFPrints the status of the model and generation settings to the console.z[bold blue]Model: r5   z[bold blue]Model kwargs: z[bold blue]NrV   )r*   r$   r]   r^   s       r+   Úprint_statuszRichInterface.print_statusÉ   sf   € à�‰×ÑÐ0°°¸BÐ?Ô@ÙØ�M‰M×ÑÐ";¸L¸>Ð JÔKØ�‰×Ñ˜kÐ*;Ð)<Ð=Ô>Ø�‰×ÑÕr-   )NN)F)Ú__name__Ú
__module__Ú__qualname__r	   Ústrr,   r   r   ÚtupleÚintrJ   rM   rO   rR   rW   Úboolr\   r   Údictr`   © r-   r+   r#   r#   v   sœ   „ ñ	' 8¨C¡=ð 	'ÀHÈSÁMó 	'ð,¨-Ð8RÑ*Sð ,ÐX]Ð^aÐcfÐ^fÑXgó ,ð\�só òð só ð
 ð ¨Có ñ
 $ó ð
 sð Ð?Oð Ð_cô r-   r#   c                   óà  — e Zd ZU dZ 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   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   ed<    edddi¬«      Zeed<    edddi¬«      Zeed<    eddg d¢dœ¬«      Zee   ed<    eddg d¢dœ¬«      Ze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+d)gdœ¬«      Zeed,<    eddd-i¬«      Zeed.<    ed/dd0i¬«      Zeed1<    ed2dd3i¬«      Zeed4<   d5„ Zy)6ÚChatArgumentsz£
    Arguments for the chat CLI.

    See the metadata arg for each argument's description -- the medatata will be printed with
    `transformers chat --help`
    NÚhelpz_Name of the pre-trained model. The positional argument will take precedence if both are passed.)ÚdefaultÚmetadataÚmodel_name_or_pathzKUsername to display in chat interface. Defaults to the current user's name.r(   zSystem prompt.Úsystem_promptz./chat_history/zFolder to save chat history.Úsave_folderz"Path to a yaml file with examples.Úexamples_pathFz7Whether to show runtime warnings in the chat interface.ÚverbosezÏ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.r]   ÚmainzLSpecific model version to use (can be a branch name, tag name or commit id).Úmodel_revisionÚautozDevice to use for inference.ÚdevicezA`torch_dtype` is deprecated! Please use `dtype` argument instead.)rv   Úbfloat16Úfloat16Úfloat32)rl   r9   Útorch_dtypez 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.Údtypez2Whether to trust remote code when loading a model.Útrust_remote_codezÂ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`.Úattn_implementationzIWhether to use 8 bit precision for the base model - works only with LoRA.Úload_in_8bitzIWhether to use 4 bit precision for the base model - works only with LoRA.Úload_in_4bitÚnf4zQuantization type.Úfp4Úbnb_4bit_quant_typez#Whether to use nested quantization.Úuse_bnb_nested_quantÚ	localhostz%Interface the server will listen to..Úhosté@  zPort the server will listen to.Úportc                 óØ   — | j                   �^| j                  €| j                   | _        y| j                   | j                  k7  r&t        d| j                   › d| j                  › d�«      ‚yy)z(Only used for BC `torch_dtype` argument.Nz`torch_dtype` z and `dtype` zn have different values. `torch_dtype` is deprecated and will be removed in 4.59.0, please set `dtype` instead.)r{   r|   Ú
ValueErrorrP   s    r+   Ú__post_init__zChatArguments.__post_init__%  su   € ð ×ÑÐ'Ø�z‰zÐ!Ø!×-Ñ-�•
Ø×!Ñ! T§Z¡ZÒ/Ü Ø$ T×%5Ñ%5Ð$6°mÀDÇJÁJÀ<ð PMð Móð ð 0ð (r-   )ra   rb   rc   Ú__doc__r   ro   r	   rd   Ú__annotations__r(   rp   rq   rr   rs   rg   r]   ru   rw   r{   r|   r}   r~   r   r€   rƒ   r„   r†   rˆ   rf   r‹   ri   r-   r+   rk   rk   Ò   sV  … ññ ).ØàÐuð
ô)Ð˜ ™ó ñ  ØØÐgÐhô€Dˆ(�3‰-ó ñ $)°ÀÐIYÐ@ZÔ#[€M�8˜C‘=Ó[ÙÐ%6À&ÐJhÐAiÔj€K�ÓjÙ#(°ÀÐImÐ@nÔ#o€M�8˜C‘=ÓoÙ %°6Ð;tÐ2uÔv€GˆTÓvñ (-Øàð1ð
ô	(Ð�x ‘}ó 	ñ  ØØÐhÐiô€N�Có ñ  °&Ð:XÐ1YÔZ€FˆCÓZÙ!&ØàWÚAñ
ô"€K�˜#‘ó ñ !ØðPâAñ
ô€Eˆ8�C‰=ó ñ $Ø Ð)]Ð ^ôÐ�tó ñ */Øàð rð
ô*Ð˜ #™ó ñ ØØÐeÐfô€L�$ó ñ ØØÐeÐfô€L�$ó ñ  %¨UÐFZÐhmÐotÐguÑ=vÔwÐ˜ÓwÙ!&¨uÀÐHmÐ?nÔ!oÐ˜$Óoñ ˜k°VÐ=dÐ4eÔf€Dˆ#ÓfÙ˜d¨fÐ6WÐ-XÔY€Dˆ#ÓYó
r-   rk   Úargsc                 ó   — t        | «      S )z;
    Factory function used to chat with a local model.
    )ÚChatCommand)rŽ   s    r+   Úchat_command_factoryr‘   2  s   € ô �tÓÐr-   c                   óœ  — e Zd Zedefd„«       Zd„ Zedefd„«       Zed!de	de
e   defd	„«       Zed!d
e
e   dee   fd„«       Zdee   defd„Zde	dedeeef   fd„Zededede
e   de
e   deeee   f   f
d„«       Zede	de
e   fd„«       Zde	dedef   fd„Zdede	dedeeeeef   f   dededee   deee   eef   fd„Zd„ Zd „ Zy)"r�   Úparserc                 óì   — t         f}| j                  d|¬«      }|j                  d«      }|j                  dt        dd¬«       |j                  dt        dd	d
¬«       |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
        Úchat)Údataclass_typeszPositional argumentsÚmodel_name_or_path_or_addressNz7Name of the pre-trained model or address to connect to.)Útyperm   rl   Ú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 <model_repo> 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Ú*)r˜   rm   rl   Únargs)Úfunc)rk   Ú
add_parserÚadd_argument_groupÚadd_argumentrd   Úset_defaultsr‘   )r“   r–   Úchat_parserÚgroups       r+   Úregister_subcommandzChatCommand.register_subcommand:  sŽ   € ô )Ð*ˆØ×'Ñ'¨ÀÐ'ÓPˆà×.Ñ.Ð/EÓFˆØ×ÑØ+ÜØØJð	 	ô 	
ð 	×ÑØÜØðWð ð 	ô 	
ð 	× Ñ Ô&:Ð Õ;r-   c                 óz  — |j                   �Ç|j                   }|j                  d«      s"|j                  d«      s|j                  d«      rpd| _        |j                  dk7  s|j                  dk7  rt        d«      ‚|j                   j                  dd«      \  |_        |_        |j                  €#t        d	«      ‚d
| _        |j                   |_        t        «       s!t        «       s| j                  rt        d«      ‚t        «       st        d«      ‚t        «       s| j                  rt        d«      ‚|| _        y )NÚhttpÚhttpsr…   Fr‡   uu   Looks like youâ€™ve set both a server address and a custom host/port. Please pick just one way to specify the server.ú:é   z\When connecting to a server, please specify a model name with the --model_name_or_path flag.TzÇYou need to install rich to use the chat interface. Additionally, you have not specified a remote endpoint and are therefore spawning a backend. Torch is required for this: (`pip install rich torch`)zHYou need to install rich to use the chat interface. (`pip install rich`)z…You have not specified a remote endpoint and are therefore spawning a backend. Torch is required for this: (`pip install rich torch`))r—   r@   Úspawn_backendr†   rˆ   rŠ   Úrsplitro   r   r   ÚImportErrorrŽ   )r*   rŽ   Únames      r+   r,   zChatCommand.__init__[  s+  € Ø×-Ñ-Ð9Ø×5Ñ5ˆDØ�‰˜vÔ&¨$¯/©/¸'Ô*BÀdÇoÁoÐVaÔFbØ%*�Ô"à—9‘9 Ò+¨t¯y©y¸DÒ/@Ü$ðJóð ð
 (,×'IÑ'I×'PÑ'PÐQTÐVWÓ'XÑ$�”	˜4œ9à×*Ñ*Ð2Ü$Øvóð ð &*�Ô"Ø*.×*LÑ*L�Ô'ä Ô"Ô,>Ô,@ÀT×EWÒEWÜðxóð ô #Ô$ÜÐhÓiÐiÜ#Ô%¨$×*<Ò*<Üð7óð ð
 ˆ�	r-   r/   c                  óº   — t        j                  «       dk(  rt        j                  «       S t	        j
                  t        j                  «       «      j                  S )z)Returns the username of the current user.r   )ÚplatformÚsystemÚosÚgetloginÚpwdÚgetpwuidÚgetuidÚpw_nameri   r-   r+   Úget_usernamezChatCommand.get_username‚  s:   € ô �?‰?Ó 	Ò)Ü—;‘;“=Ð ä—<‘<¤§	¡	£Ó,×4Ñ4Ð4r-   NrŽ   Úfilenamec                 óî  — i }t        |«      |d<   | |d<   |j                  }|€Gt        j                  d«      }|j                  › d|› d�}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)z!Saves the chat history to a file.ÚsettingsÚchat_historyNz%Y-%m-%d_%H-%M-%Sz/chat_ú.jsonT)Úexist_okÚwr1   )Úindent)Úvarsrq   ÚtimeÚstrftimer—   r°   ÚpathrA   ÚmakedirsÚdirnameÚopenÚjsonÚdumpÚabspath)r•   rŽ   r·   Úoutput_dictÚfolderÚtime_strÚfs          r+   Ú	save_chatzChatCommand.save_chatŠ  sÍ   € ð ˆÜ"& t£*ˆ�JÑØ&*ˆ�NÑ#à×!Ñ!ˆàÐÜ—}‘}Ð%8Ó9ˆHØ×<Ñ<Ð=¸VÀHÀ:ÈUÐSˆHÜ—w‘w—|‘| F¨HÓ5ˆHä
�‰”B—G‘G—O‘O HÓ-¸Õ=Ü�(˜CÓ ð 	0 AÜ�I‰I�k 1¨QÕ/÷	0ä�w‰w�‰˜xÓ(Ð(÷	0ð 	0ús   Â+C+Ã+C4rp   c                 ó   — | €g }|S d| dœg}|S )zClears the chat history.r¯   ©Úroler;   ri   )rp   r•   s     r+   Úclear_chat_historyzChatCommand.clear_chat_history�  s*   € ð Ð ØˆDð ˆð &°-Ñ@ÐAˆDØˆr-   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¨   )ÚtrueÚfalseÚNoneÚnullÚsr/   c                 óf   — | j                  d«      } | j                  ddd«      j                  «       S )Nú-ú.r4   r¨   )ÚremoveprefixÚreplaceÚisdigit)rÙ   s    r+   Ú	is_numberz3ChatCommand.parse_generate_flags.<locals>.is_numberº  s,   € à—‘˜sÓ#ˆAØ—9‘9˜S " aÓ(×0Ñ0Ó2Ð2r-   z, z: ú{ú}z"null"z"true"rÕ   z"false"rÖ   z"[ú[z]"rU   r§   z�Failed to convert `generate_flags` into a valid JSON object.
`generate_flags` = {generate_flags}
Converted JSON string = {generate_flags_string})ÚlenÚsplitÚitemsÚlowerrd   rg   rA   rÞ   rÆ   ÚloadsÚJSONDecodeErrorrŠ   )	r*   r™   ÚflagÚgenerate_flags_as_dictÚkÚvrà   Úgenerate_flags_stringÚprocessed_generate_flagss	            r+   Úparse_generate_flagsz ChatCommand.parse_generate_flags¨  s@  € äˆ~Ó !Ò#ØˆIð
 bpÖ!pÐY] #¨¯
©
°3«¸Ñ(:Ñ":¸SÑ"@À$Ç*Á*ÈSÃ/ÐRSÑBTÑ"TÐ!pÐÐ!pð
 Oe×NjÑNjÓNl÷"
ÙFJÀaÈˆA˜AŸG™G›IÐ):Ñ:ˆq�w‰wŒyÀÑAð"
Ðñ "
ð Oe×NjÑNjÓNl×!mÁdÀaÈ !¨q°Fª{¡VÀÑ"AÐ!mÐÑ!mð	3œð 	3¤ó 	3ð
 Vl×UqÑUqÓUs×!tÉTÈQÐPQ !±Y¸q´\ q¨¨¨1¡XÀqÑ"HÐ!tÐÑ!tð
 !%§	¡	ÐCY×C_ÑC_ÓCa×*b¹4¸1¸a¨a¨S°°1°#ª;Ó*bÓ cÐð !$Ð&;Ñ ;¸cÑ AÐð !6× =Ñ =¸hÈÓ OÐØ 5× =Ñ =¸hÈÓ OÐØ 5× =Ñ =¸iÈÓ QÐØ 5× =Ñ =¸dÀCÓ HÐØ 5× =Ñ =¸dÀCÓ HÐð !6× =Ñ =¸cÀ3Ó GÐð	Ü'+§z¡zÐ2GÓ'HÐ$ð (Ð'ùòW "qùó"
ùó "nùó "uùó
 +cøô" ×#Ñ#ò 	ÜðDóð ð	ús)   •4F>Á/GÂ#G	ÃGÄG
Æ'G ÇG:Úmodel_generation_configc                 óþ  — |j                   �—d|j                   v rit        j                  j                  |j                   «      }t        j                  j	                  |j                   «      }t        j                  ||«      }nJt        j                  |j                   «      }n*t        j                  |«      } |j                  di dddœ¤Ž | j                  |j                  «      } |j                  di |¤Ž}||fS )zj
        Returns a GenerationConfig object holding the generation parameters for the CLI command.
        r»   Té   )Ú	do_sampleÚmax_new_tokensri   )r]   r°   rÂ   rÄ   Úbasenamer   Úfrom_pretrainedÚcopyÚdeepcopyrC   rð   r™   )r*   rŽ   rñ   rÄ   r·   r]   Úparsed_generate_flagsr^   s           r+   Úget_generation_parameterizationz+ChatCommand.get_generation_parameterizationÝ  sâ   € ð ×!Ñ!Ð-Ø˜$×0Ñ0Ñ0ÜŸ'™'Ÿ/™/¨$×*@Ñ*@ÓA�ÜŸ7™7×+Ñ+¨D×,BÑ,BÓC�Ü$4×$DÑ$DÀWÈhÓ$WÑ!ä$4×$DÑ$DÀT×E[ÑE[Ó$\Ñ!ô
 !%§¡Ð.EÓ FÐØ$Ð×$Ñ$ÑR°TÈSÑ'QÒRð !%× 9Ñ 9¸$×:MÑ:MÓ NÐØ/Ð(×/Ñ/ÑHÐ2GÑHˆð ! ,Ð.Ð.r-   Ú	tokenizerr]   Ú
eos_tokensÚeos_token_idsc                 óˆ  — |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 )z:Retrieves the pad token ID and all possible EOS token IDs.ú,r   )Úpad_token_idÚeos_token_idÚextendÚconvert_tokens_to_idsrå   rf   rä   r?   )rü   r]   rý   rþ   r  Úall_eos_token_idsÚtoken_ids          r+   Úparse_eos_tokenszChatCommand.parse_eos_tokensù  s»   € ð ×)Ñ)Ð1Ø,×9Ñ9‰Là,×9Ñ9ˆLàÐàÐ!Ø×$Ñ$ Y×%DÑ%DÀZ×EUÑEUÐVYÓEZÓ%[Ô\àÐ$Ø×$Ñ$ÀM×DWÑDWÐX[ÓD\Ö%]¸¤c¨(¥mÒ%]Ô^äÐ Ó! QÒ&Ø×$Ñ$Ð%6×%CÑ%CÔDàÐ.Ð.Ð.ùò &^s   Á9B?Ú
model_argsc                 óÊ   — | j                   r:t        d| j                  | j                  | j                  | j                  ¬«      }|S | j
                  rt        d¬«      }|S d }|S )NT)r€   Úbnb_4bit_compute_dtyperƒ   Úbnb_4bit_use_double_quantÚbnb_4bit_quant_storage)r   )r€   r   r|   rƒ   r„   r   )r  Úquantization_configs     r+   Úget_quantization_configz#ChatCommand.get_quantization_config  st   € à×"Ò"Ü"4Ø!à'1×'7Ñ'7Ø$.×$BÑ$BØ*4×*IÑ*IØ'1×'7Ñ'7ô#Ðð #Ð"ð ×$Ò$Ü"4Ø!ô#Ðð #Ð"ð #'Ðà"Ð"r-   r   c                 óà  — t        j                  |j                  |j                  |j                  ¬«      }|j
                  dv r|j
                  nt        t        |j
                  «      }| j                  |«      }|j                  |j                  |d|dœ}t        j                  |j                  fd|j                  i|¤Ž}t        |dd «      €|j                  |j                  «      }||fS )N)Úrevisionr}   )rv   Nrv   )r  r~   r|   Ú
device_mapr  r}   Úhf_device_map)r   r÷   Úmodel_name_or_path_positionalru   r}   r|   ÚgetattrÚtorchr  r~   r   Útorw   )r*   rŽ   rü   r|   r  r^   Úmodels          r+   Úload_model_and_tokenizerz$ChatCommand.load_model_and_tokenizer)  sâ   € Ü!×1Ñ1Ø×.Ñ.Ø×(Ñ(Ø"×4Ñ4ô
ˆ	ð #Ÿj™j¨NÑ:�—
’
ÄÌÈtÏzÉzÓ@ZˆØ"×:Ñ:¸4Ó@Ðà×+Ñ+Ø#'×#;Ñ#;ØØ Ø#6ñ
ˆô %×4Ñ4Ø×.Ñ.ñ
ØBF×BXÑBXð
Ø\hñ
ˆô �5˜/¨4Ó0Ð8Ø—H‘H˜TŸ[™[Ó)ˆEà�iÐÐr-   Ú
user_inputÚ	interfaceÚexamplesr^   r•   c                 óÔ  — d}|dk(  r-| j                  |j                  «      }|j                  «        �n/|dk(  r|j                  «        �n|j	                  d«      rnt        |j                  «       «      dk  rR|j                  «       }	t        |	«      dk(  r|	d   }
nd}
| j                  |||
«      }
|j                  d|
› d	�d
¬«       �n™|j	                  d«      r|dd j                  «       }|j                  «       }|D ]   }d|vsŒ|j                  d|› d�d¬«        �nA | j                  |«      } |j                  di |¤Ž} |j                  di |¤Ž �n	|j	                  d«      r«t        |j                  «       «      dk(  r�|j                  «       d   }||v rD|j                  «        g }|j                  ||   d   «       |j                  d||   d   dœ«       n�d|› dt        |j                  «       «      › d�}|j                  |d¬«       nM|dk(  r|j!                  |j"                  ||¬«       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).
        Tz!clearz!helpz!saveé   r¨   NzChat saved in ú!Úgreen)r   rS   z!setr1   rÔ   z(Invalid flag format, missing `=` after `z;`. Please use the format `arg_1=value_1 arg_2=value_2 ...`.Úredú!exampler   r(   rÏ   zExample z* not found in list of available examples: rÜ   z!status)r$   r]   r^   Fú'z/' is not a valid command. Showing help message.ri   )rÑ   rp   rO   r\   r@   rä   rå   rÍ   rW   rB   rð   rC   rR   r?   ÚlistÚkeysr`   ro   )r*   r  rŽ   r  r  r]   r^   r•   Úvalid_commandÚsplit_inputr·   Únew_generate_flagsrê   Úparsed_new_generate_flagsÚnew_model_kwargsÚexample_nameÚexample_errors                    r+   Úhandle_non_exit_user_commandsz)ChatCommand.handle_non_exit_user_commandsD  s¦  € ð ˆà˜Ò!Ø×*Ñ*¨4×+=Ñ+=Ó>ˆDØ�O‰OÖà˜7Ò"Ø× Ñ Ö"à×"Ñ" 7Ô+´°J×4DÑ4DÓ4FÓ0GÈ!Ò0KØ$×*Ñ*Ó,ˆKä�;Ó 1Ò$Ø& q™>‘à�Ø—~‘~ d¨D°(Ó;ˆHØ×!Ñ!¨¸°zÀÐ'CÈ7Ð!ÖSà×"Ñ" 6Ô*ð ",¨A¨B ×!5Ñ!5Ó!7ÐØ!3×!9Ñ!9Ó!;Ðà*ò 8�Ø˜d’?Ø×)Ñ)àFÀtÀfð MAð Að $ð *ô ò ð8ð -1×,EÑ,EÐFXÓ,YÐ)Ø#;Ð#4×#;Ñ#;Ñ#XÐ>WÑ#XÐ Ø#�×#Ñ#Ñ7Ð&6Ô7à×"Ñ" :Ô.´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Ò$Ø×"Ñ"Ø×2Ñ2Ø"3Ø)ð #õ ð "ˆMØ×!Ñ!¨¨:¨,Ð6eÐ'fÐnsÐ!ÔtØ× Ñ Ô"à�]Ð$5°|ÐCÐCr-   c                 óJ   — t        j                  | j                  «       «       y ©N)ÚasyncioÚrunÚ
_inner_runrP   s    r+   r0  zChatCommand.run˜  s   € Ü�‰�D—O‘OÓ%Õ&r-   c              ƒ   ó„  K  — | j                   �rt        | j                  j                  | j                  j                  | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  d¬«      }t        |«      }t        |j                  ¬«      }d|_        |j#                  «        | j                  j$                  dz   | j                  j&                  z   }| j                  j                  dk(  rdn| j                  j                  }| j                  }|j(                  €t*        }n3t-        |j(                  «      5 }t/        j0                  |«      }d d d «       |j2                  €| j5                  «       }	n|j2                  }	t7        j8                  |j$                  «      }
| j;                  ||
«      \  }}t=        |j$                  |	¬«      }|j?                  «        | jA                  |jB                  «      }|jE                  d¬	«       tG        |› d
| j                  j                  › �«      4 ƒd {  –—† }	 	 |jI                  «       }|jK                  d«      r7|dk(  rn˜| jM                  ||||||¬«      \  }}}}|r|jK                  d«      sŒZ|jO                  d|dœ«       |jQ                  |d|jS                  «       |dœ¬«      }|jU                  |«      ƒ d {  –—† }|jO                  d|dœ«       ŒÀd d d «      ƒd {  –—†  y # 1 sw Y   �ŒºxY w7 Œã7 Œ9# tV        $ r Y Œ-w xY w7 Œ%# 1 ƒd {  –—†7  sw Y   y xY w­w)NÚerror)rw   r|   r}   r~   r   r€   rƒ   r„   r†   rˆ   Ú	log_level)ÚtargetTú@r…   zhttp://localhost)r$   r%   )rX   r§   r  z!exit)r  rŽ   r  r  r]   r^   r•   r!  r(   rÏ   )r]   r  )r.   Ú
extra_bodyr'   ),r©   r   rŽ   rw   r|   r}   r~   r   r€   rƒ   r„   r†   rˆ   r   r   r0  ÚdaemonÚstartro   ru   rr   ÚDEFAULT_EXAMPLESrÅ   ÚyamlÚ	safe_loadr(   r¶   r   r÷   rû   r#   rO   rÑ   rp   r\   r
   rM   r@   r,  r?   Úchat_completionÚto_json_stringrJ   ÚKeyboardInterrupt)r*   Ú
serve_argsÚserve_commandÚthreadr  r†   rŽ   r  rÌ   r(   rñ   r]   r^   r  r•   Úclientr  r%  r.   Úmodel_outputs                       r+   r1  zChatCommand._inner_run›  sA  è ø€ Ø×ÓÜ'Ø—y‘y×'Ñ'Ø—i‘i—o‘oØ"&§)¡)×"=Ñ"=Ø$(§I¡I×$AÑ$AØ!ŸY™Y×3Ñ3Ø!ŸY™Y×3Ñ3Ø$(§I¡I×$AÑ$AØ%)§Y¡Y×%CÑ%CØ—Y‘Y—^‘^Ø—Y‘Y—^‘^Ø!ôˆJô )¨Ó4ˆMä =×#4Ñ#4Ô5ˆFØ ˆFŒMØ�L‰LŒNà—	‘	×,Ñ,¨sÑ2°T·Y±Y×5MÑ5MÑMˆØ%)§Y¡Y§^¡^°{Ò%BÑ!ÈÏ	É	ÏÉˆà�y‰yˆØ×ÑÐ%Ü'‰Hä�d×(Ñ(Ó)ð -¨QÜŸ>™>¨!Ó,�÷-ð �9‰9ÐØ×$Ñ$Ó&‰Dà—9‘9ˆDä"2×"BÑ"BÀ4×CZÑCZÓ"[ÐØ*.×*NÑ*NÈtÐUlÓ*mÑ'Ð˜<ä!¨T×-DÑ-DÐPTÔUˆ	Ø�‰ÔØ×&Ñ& t×'9Ñ'9Ó:ˆð 	×Ñ TÐÔ*ä'¨4¨&°°$·)±)·.±.Ð1AÐ(BÓC÷ '	ð '	ÀvØð%Ø!*§¡Ó!2�Jð "×,Ñ,¨SÔ1à%¨Ò0Ø!àSW×SuÑSuØ+5Ø%)Ø*3Ø)1Ø2CØ-9Ø%)ð Tvó TÑP˜D -Ð1BÀLñ  -°J×4IÑ4IÈ*Ô4UØ$àŸ™¨VÀ
Ñ$KÔLà#×3Ñ3ØØ#à1B×1QÑ1QÓ1SØ%*ñ$ð 4ó �Fð *3×)@Ñ)@ÀÓ)H×#H�Là—K‘K¨ÀÑ NÔOðI ÷'	÷ '	ð '	÷%-ñ -úð$'	øðF $Iùô )ò ÙðúðM'	ø÷ '	÷ '	ñ '	üs°   ‚F9O Æ;N	ÇC!O Ê2NÊ3O Ê6N+Ê9&NËN+Ë 0NÌN+ÌANÍNÍNÍ7N+Í8O ÎN)ÎO Î	NÎ	O ÎNÎ	N&Î#N+Î%N&Î&N+Î)O Î+N=Î1N4Î2N=Î9O r.  )ra   rb   rc   Ústaticmethodr   r£   r,   rd   r¶   rk   r	   rÍ   r#  rh   rÑ   rð   r   re   rû   r   rf   r  r   r  r   r  r#   r,  r0  r1  ri   r-   r+   r�   r�   9  s  „ Øð< Nò <ó ð<ò@#ðN ð5˜#ò 5ó ð5ð ñ)˜mð )°xÀ±}ð )ÐPSò )ó ð)ð$ ñ¨(°3©-ð À4ÈÁ:ò ó ðð3(°4¸±9ð 3(Àó 3(ðj/Ø!ð/Ø<Lð/à	Ð Ð%Ñ	&ó/ð8 ð/Ø&ð/à+ð/ð ˜S‘Mð/ð   ‘}ð	/ð
 
ˆs�D˜‘Iˆ~Ñ	ò/ó ð/ð6 ð#¨Mð #¸hÐGYÑ>Zò #ó ð#ð& ¨]ð  ¸uÐE[Ð]jÐEjÑ?kó  ð6PDàðPDð ðPDð !ð	PDð
 �s˜D  c ™NÐ*Ñ+ðPDð ,ðPDð ðPDð �4‰jðPDð 
ˆt�D‰zÐ+¨TÐ1Ñ	2óPDòh'óUr-   r�   Ú__main__z meta-llama/Llama-3.2-3b-Instructzhttp://localhost:8000)Er/  rø   rÆ   r°   r®   r<   ÚstringrÀ   Úargparser   r   Úcollections.abcr   Údataclassesr   r   Ú	threadingr   Útypingr	   r;  Úhuggingface_hubr
   r   Útransformersr   r   r   Útransformers.commandsr   Útransformers.commands.servingr   r   Útransformers.utilsr   r   Úreadliner«   r¯   r²   Úrich.consoler   Ú	rich.liver   Úrich.markdownr   r  r   r   ÚsetÚascii_lettersÚ
whitespaceÚALLOWED_KEY_CHARSÚdigitsÚALLOWED_VALUE_CHARSr:  rZ   rA   r$  r[   r#   rk   r‘   r�   ra   rŽ   r—   r•   r0  ri   r-   r+   ú<module>r\     sè  ðó  Û Û Û 	Û Û 	Û Û ß .Ý )ß (Ý Ý ã ß L÷ñ õ
 =ß Fß Dð	Ûð
 €8‡?�?Ó˜	Ò!ÛáÔÝ$ÝÝ&áÔÛ÷ñ
 ˜×,Ñ,¨v×/@Ñ/@Ñ@ÓAÐ ÙØ
×Ñ˜6Ÿ=™=Ñ(¨6×+<Ñ+<Ñ<Ð?bÑbóÐ ð
 ÐMÐNàð)ðð ÐQÐRØÐNÐOØÐ.Ð/ØÐJÐKØÐ?Ð@ñÐ ð 	Ð ð	ð "Ÿ;™;Ð'7×'<Ñ'<Ó'>Ó?Ð@ð Að€÷&Yñ Yðx ÷\ð \ó ð\ð~˜yó ôwÐ,ô wðt ˆzÒÙ‹?€DØ)K€DÔ&Ø)@€DÔ&Ù�tÓ€DØ‡H�H…Jð øðM ò 	âð	ús   Á0F! Æ!F*Æ)F*