
    )jb                         d dl Z d dlmZmZ d dlmZ deeeeef                           dee         defdZdede	fd	Z
d
 Zedk    r ed            e             dS dS )    N)ListUnion)scan_cache_dirrowsheadersreturnc                 `   d t          g | |R  D             } dt          |          z  j        | }g }|                     |j        |            |                     |j        d |D                         | D ]}|                     |j        |             d                    |          S )z
    Inspired by:
    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c                 @    g | ]}t          d  |D                       S )c              3   N   K   | ] }t          t          |                    V  !d S N)lenstr).0xs     W/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/mlx_lm/manage.py	<genexpr>z&tabulate.<locals>.<listcomp>.<genexpr>   s.      //ac#a&&kk//////    )max)r   cols     r   
<listcomp>ztabulate.<locals>.<listcomp>   s/    OOOC#//3/////OOOr   z{{:{}}} c                     g | ]}d |z  S )- )r   ws     r   r   ztabulate.<locals>.<listcomp>   s    $A$A$AS1W$A$A$Ar   
)zipr   formatappendjoin)r   r   
col_widths
row_formatlinesrows         r   tabulater$      s     PO3;N;Ng;N;N;NOOOJ3*s7||+3Z@JE	LL""G,---	LL""$A$Aj$A$A$ABCCC . .&Z&,----99Ur   messagec                     d}d}|  d}	 t          |                                          }||v rdS ||v rdS t          d           =)z\Ask user for confirmation with Y/N prompt.
    Returns True for Y/yes, False for N/no/empty.)yyes1)nno0 z (y/n) TFz9Invalid input. Must be one of: yes/no/y/n or empty for no)inputlowerprint)r%   r'   r*   full_messageanswers        r   ask_for_confirmationr3      sl     	AA&&&LL|$$**,,Q;;4Q;;5JKKKLr   c            	      N   t          j        d          } |                     ddd           |                     ddd           |                     d	t          d
d           |                                 j        rgt          dj         d           t                      }t          t          fdt          |j        d           D             g d                     j        r6t          dj         d           t                      }fdt          |j        d           D             }|rt          d           t          t          d |D             g d                     t          d          }|rv|D ]b}t          d|j         d           t          |j        d           D ]0}|                    |j                  }|                                 1ct          d           d S t          d            d S t          d!j         d           d S d S )"NzMLX Model Cache.)descriptionz--scan
store_truez'Scan Hugging Face cache for mlx models.)actionhelpz--deletez)Delete models matching the given pattern.z	--patternz Model repos contain the pattern.mlx)typer8   defaultz5Scanning Hugging Face cache for models with pattern "z".c                     g | ]\}j         |j        v |j        |j        d                     |j                  |j        |j        |j        t          |j	                  g]S )z{:>12})
patternrepo_id	repo_typer   size_on_disk_strnb_fileslast_accessed_strlast_modified_strr   	repo_pathr   repoargss     r   r   zmain.<locals>.<listcomp>@   st         |t|33  (=>>..DN++ 433r   c                     | j         S r   rD   rF   s    r   <lambda>zmain.<locals>.<lambda>K   s    dn r   )key)REPO IDz	REPO TYPEzSIZE ON DISKzNB FILESLAST_ACCESSEDLAST_MODIFIED
LOCAL PATH)r   r   z"Deleting models matching pattern ""c                 0    g | ]}j         |j        v |S r   )r=   r>   rE   s     r   r   zmain.<locals>.<listcomp>_   s2     
 
 
|t|++ +++r   c                     | j         S r   rI   rJ   s    r   rK   zmain.<locals>.<lambda>a   s    T^ r   z
Found the following models:c                 P    g | ]#}|j         |j        t          |j                  g$S r   )r>   r@   r   rD   )r   rF   s     r   r   zmain.<locals>.<listcomp>h   sD        !	 !L 1//  r   )rM   SIZErP   z.
Are you sure you want to delete these models?z

Deleting z...c                     | j         S r   )commit_hash)revisions    r   rK   zmain.<locals>.<lambda>   s	    8CW r   z
Model(s) deleted successfully.z&
Deletion cancelled - no changes made.z"No models found matching pattern ")argparseArgumentParseradd_argumentr   
parse_argsscanr0   r=   r   r$   sortedreposdeleter3   r>   	revisionsdelete_revisionsrW   execute)parserhf_cache_infor_   	confirmed
model_inforX   strategyrG   s          @r   mainri   &   s'   $1CDDDF
6    
 8    
 /	     Dy 
VdlVVVWWW&((    !'%+1L1L! ! !    !  	
 	
 	
: { ,HB4<BBBCCC&((
 
 
 
}28S8STTT
 
 

  #	H1222  %*        $ -A I  
A"' + +J?
(:???@@@$*",2W2W% % % + + $1#A#A(BV#W#W ((****	+
 899999?@@@@@Ft|FFFGGGGGY,H ,Hr   __main__z}Calling `python -m mlx_lm.manage...` directly is deprecated. Use `mlx_lm.manage...` or `python -m mlx_lm manage ...` instead.)rY   typingr   r   huggingface_hubr   r   intr$   boolr3   ri   __name__r0   r   r   r   <module>rp      s             * * * * * *4U38_-. c s     L# L$ L L L LaH aH aHH z	E	L   	DFFFFF r   