
    (HJjb                         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        yy)    N)ListUnion)scan_cache_dirrowsheadersreturnc           	         t        g | | D cg c]  }t        d |D               }} dt        |      z  j                  | }g }|j	                   |j                  |        |j	                   |j                  |D cg c]  }d|z  	 c}        | D ]   }|j	                   |j                  |        " dj                  |      S c c}w c c}w )z
    Inspired by:
    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c              3   D   K   | ]  }t        t        |              y wN)lenstr).0xs     W/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/manage.py	<genexpr>ztabulate.<locals>.<genexpr>   s     /3ac#a&k3s    z{{:{}}} -
)zipmaxr   formatappendjoin)r   r   col
col_widths
row_formatlineswrows           r   tabulater      s     <?;N;Ng;NO;NC#/3//;NJO3*s7|+33Z@JE	LL"""G,-	LL"""j$AjS1Wj$ABC&Z&&,- 99U P %Bs   CCmessagec                 t    d}d}|  d}	 t        |      j                         }||v ry||v ry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_confirmationr.      sR     	AAYg&L
|$**,Q;Q;IK     c                     t        j                  d      } | j                  ddd       | j                  ddd       | j                  d	t        d
d       | j	                         }|j
                  rt        d|j                   d       t               }t        t        t        |j                  d       D cg c]  }|j                  |j                  v rg|j                  |j                  dj                  |j                        |j                   |j"                  |j$                  t        |j&                        g c}g d             |j(                  rdt        d|j                   d       t               }t        |j                  d       D cg c]  }|j                  |j                  v r| }}|rt        d       t        t        |D cg c].  }|j                  |j                  t        |j&                        g0 c}g d             t+        d      }|rt|D ]c  }t        d|j                   d       t        |j,                  d       D ]-  }|j/                  |j0                        }|j3                          / e t        d       y t        d       y t        d|j                   d       y y c c}w c c}w c c}w ) 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)typer4   defaultz5Scanning Hugging Face cache for models with pattern "z".c                     | j                   S r   	repo_pathrepos    r   <lambda>zmain.<locals>.<lambda>K   s    dnnr/   )keyz{:>12})REPO IDz	REPO TYPEzSIZE ON DISKzNB FILESLAST_ACCESSEDLAST_MODIFIED
LOCAL PATH)r   r   z"Deleting models matching pattern ""c                     | j                   S r   r9   r;   s    r   r=   zmain.<locals>.<lambda>a   s    T^^r/   z
Found the following models:)r?   SIZErB   z.
Are you sure you want to delete these models?z

Deleting z...c                     | j                   S r   )commit_hash)revisions    r   r=   zmain.<locals>.<lambda>   s
    8CWCWr/   z
Model(s) deleted successfully.z&
Deletion cancelled - no changes made.z"No models found matching pattern ")argparseArgumentParseradd_argumentr   
parse_argsscanr+   patternr   r   sortedreposrepo_id	repo_typer   size_on_disk_strnb_fileslast_accessed_strlast_modified_strr:   deleter.   	revisionsdelete_revisionsrG   execute)	parserargshf_cache_infor<   rP   	confirmed
model_inforH   strategys	            r   mainra   &   s   $$1CDF
6  
 8  
 /	   DyyEdll^SUVW&( !'%++1L!! ||t||3  (=(=>....DNN+!!	
: {{24<<.BC&( }228ST
T||t||+ T 	 

 12 %* %*D	 !LL 11/
 %*$ -AI "'JK
(:(:';3?@$*",,2W% $1#A#A(BVBV#W ((*	% #( 89?@6t||nAFGY 7>
s   ;BK!K3K__main__z}Calling `python -m mlx_lm.manage...` directly is deprecated. Use `mlx_lm.manage...` or `python -m mlx_lm manage ...` instead.)rI   typingr   r   huggingface_hubr   r   intr   boolr.   ra   __name__r+    r/   r   <module>ri      s      *4U38_-. c s  L# L$ LaHH z		L 	F r/   