Ë
    îÿæix  ã                   ó’   — d dl Z d dlZd dlZd dlZd dlmZ ddlmZ ddl	m
Z
mZ ddlmZ dZd„ Zd„ Zed	k(  r ed
«        e«        yy)é    Né   )Úgenerate_step)Úmake_prompt_cacheÚsave_prompt_cache)Úloadiˆ  c                  ó  — t        j                  d¬«      } | j                  dt        dd¬«       | j                  dt        d¬	«       | j                  d
dd¬«       | j                  dt        dd¬«       | j                  dt        dd¬«       | j                  ddd¬«       | j                  ddd¬«       | j                  dt        dd¬«       | j                  dt        dd¬«       | j                  d d!t        t
        ¬"«       | S )#z&Set up and return the argument parser.z=Cache the state of a prompt to be reused with mlx_lm.generate)Údescriptionz--modelÚ	mlx_modelz;The path to the local model directory or Hugging Face repo.)ÚtypeÚdefaultÚhelpz--adapter-pathz9Optional path for the trained adapter weights and config.)r   r   z--trust-remote-codeÚ
store_truez)Enable trusting remote code for tokenizer)Úactionr   z--eos-tokenNz#End of sequence token for tokenizerz--max-kv-sizez$Set the maximum key-value cache sizez--prompt-cache-filez$The file to save the prompt cache inT)r   Úrequiredz--promptz;Message to be processed by the model ('-' reads from stdin))r   r   z	--kv-bitszFNumber of bits for KV cache quantization. Defaults to no quantization.)r   r   r   z--kv-group-sizez%Group size for KV cache quantization.é@   z--quantized-kv-startzLWhen --kv-bits is set, start quantizing the KV cache from this step onwards.)r   r   r   )ÚargparseÚArgumentParserÚadd_argumentÚstrÚintÚDEFAULT_QUANTIZED_KV_START)Úparsers    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/cache_prompt.pyÚsetup_arg_parserr      s^  € ä×$Ñ$ØSô€Fð ×ÑØÜØØJð	 ô ð ×ÑØÜØHð ô ð
 ×ÑØØØ8ð ô ð
 ×ÑØÜØØ2ð	 ô ð ×ÑØÜØØ3ð	 ô ð ×ÑØØ3Øð ô ð
 ×ÑØØØJð ô ð
 ×ÑØÜð'àð ô ð ×ÑØÜØ4Øð	 ô ð ×ÑØð"äÜ*ð ô ð €Mó    c            
      óâ  ‡‡— t        «       } | j                  «       }d|j                  rdnd i}|j                  �|j                  |d<   t	        |j
                  |j                  |¬«      \  }}|j                  dk(  rt        j                  j                  «       n|j                  |_        |j                  r%d|j                  dœg}|j                  |dd¬	«      }n|j                  |j                  «      }t        ||j                  «      }t!        j"                  |«      }t%        j$                  «       Šd
Šˆˆfd„}	t'        ||d
||j(                  |j*                  |j,                  |	¬«      D ]  }
Œ t/        «        t/        dt!        j0                  «       dz  d›d�«       t/        d«       i }|j
                  |d<   t3        j4                  |«      |d<   t7        |j8                  ||«       y )NÚtrust_remote_codeTÚ	eos_token)Úadapter_pathÚtokenizer_configÚ-Úuser)ÚroleÚcontentF)Úadd_generation_promptÚcontinue_final_messager   c                 ó¾   •— t        j                   «       }| |‰z
  z  }d| d›d|d›d�}t        ‰t        |«      «      Št        |d‰t        |«      z
  z  z   dd¬	«       y )
NzProcessed Ú6dz	 tokens (z6.2fz tok/s)Ú Ú T)ÚendÚflush)ÚtimeÚmaxÚlenÚprint)Ú	processedÚtotal_tokensÚcurrentÚspeedÚmsgÚmax_msg_lenÚstarts        €€r   Úcallbackzmain.<locals>.callbackv   sc   ø€ Ü—)‘)“+ˆØ˜W u™_Ñ-ˆØ˜Y r˜N¨)°E¸$°<¸wÐGˆä˜+¤s¨3£xÓ0ˆÜˆc�C˜;¬¨S«Ñ1Ñ2Ñ2¸À$ÖGr   )Ú
max_tokensÚprompt_cacheÚkv_bitsÚkv_group_sizeÚquantized_kv_startÚprompt_progress_callbackzPeak memory: g    eÍÍAz.3fz GBz	Saving...Úmodelr    )r   Ú
parse_argsr   r   r   r?   r   ÚpromptÚsysÚstdinÚreadÚhas_chat_templateÚapply_chat_templateÚencoder   Úmax_kv_sizeÚmxÚarrayr-   r   r;   r<   r=   r0   Úget_peak_memoryÚjsonÚdumpsr   Úprompt_cache_file)r   Úargsr    r?   Ú	tokenizerÚmessagesrA   ÚcacheÚyr8   Ú_Úmetadatar6   r7   s               @@r   ÚmainrV   S   sÀ  ù€ ÜÓ€FØ×ÑÓ€Dð ,°T×5KÒ5K©TÐQUÐVÐØ‡~�~Ð!Ø(,¯©Ð˜Ñ%äØ�
‰
Ø×&Ñ&Ø)ôÑ€Eˆ9ð '+§k¡k°SÒ&8”#—)‘)—.‘.Ô"¸d¿k¹k€D„Kà×"Ò"Ø#°·±Ñ<Ð=ˆØ×.Ñ.ØØ"'Ø#'ð /ó 
‰ð ×!Ñ! $§+¡+Ó.ˆä˜e T×%5Ñ%5Ó6€EÜ
�‰�Ó€Aô �I‰I‹K€EØ€KõHô Ø	ØØØØ—‘Ø×(Ñ(Ø×2Ñ2Ø!)÷	ˆð 	ð	ô 
„GÜ	ˆMœ"×,Ñ,Ó.°Ñ4°SÐ9¸Ð
=Ô>ä	ˆ+ÔØ€HØŸ
™
€HˆWÑÜ#'§:¡:Ð.>Ó#?€HÐÑ Ü�d×,Ñ,¨e°XÕ>r   Ú__main__z�Calling `python -m mlx_lm.cache_prompt...` directly is deprecated. Use `mlx_lm.cache_prompt...` or `python -m mlx_lm cache_prompt ...` instead.)r   rL   rB   r-   Úmlx.coreÚcorerI   Úgenerater   Úmodels.cacher   r   Úutilsr   r   r   rV   Ú__name__r0   © r   r   Ú<module>r_      sU   ðó Û Û 
Û å å #ß >Ý à!Ð ò?òD>?ðB ˆzÒÙ	ð	Xôñ 	…Fð r   