
    (HJj~"                        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 d dlmZm	Z	 d dl
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mZ d d	lmZmZ d d
lmZ ddlmZ dZe	e G d d                    Zd Z d Z!d Z"d Z#ddZ$ddZ%d Z&y)    N)	dataclass)partialtotal_ordering)Path)TemporaryDirectory)LiteralOptional)LocalEntryNotFoundError)Hostfile)launch_jaccllaunch_ring)tqdm   )hf_repo_to_pathi  @c                   T    e Zd ZU ed   ed<   eed<   ee   ed<   d Zd Ze	d        Z
y)	DirectoryEntry	directorysymlinkfile
entry_typepathdstc                     t        ddd      }|| j                     }||j                     }||k  xs  ||k(  xr | j                  |j                  k  S )Nr   r      r   )dictr   r   )selfother
order_typeo1o2s        V/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/share.py__lt__zDirectoryEntry.__lt__    sS    Aqq9
((()Bw?28>		EJJ(>?    c                     | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S N)r   r   r   )r   r   s     r"   __eq__zDirectoryEntry.__eq__&   sC    OOu/// &		UZZ'&EII%	
r$   c                     dddd|j                         |j                         f   }|j                         r|j                         nd } | |t        |j	                  |            t        |            S )Nr   r   r   ))TF)FT)FF)is_dir
is_symlinkreadlinkstrrelative_to)clsrootr   r   r   s        r"   	from_pathzDirectoryEntry.from_path-   sk     '$"
 ++-*
*	,

 "&!2dmmo:s4#3#3D#9:CHEEr$   N)__name__
__module____qualname__r   __annotations__r,   r	   r#   r'   classmethodr0    r$   r"   r   r      s@     677
I	#@
 F Fr$   r   c                  L    t         j                  |d<   t        dg| di | y )Nr   z[31m[ERROR]z[0m)sysstderrprint)argskwargss     r"   errorr=   9   s'    ZZF6N	
8d8I88r$   c           	      b   | j                   t        d      t        j                  | j                         }|j                  dk(  rt        d      t        |j                        dk(  rt        d      t        j                  |j                  t        t        j                               |j                  dd dd      }t        j                  d	d
dg}| j                  |d| j                  gz  }| j                   |d| j                   gz  }| j"                  |d| j"                  gz  }| j$                  |d| j$                  gz  }|j                  dk(  rt'        d |j                  ||       y |j                  dk(  s|j                  dk(  rt)        d |j                  ||       y t        d      )NzNo hostfile provided z,Backend needs to be defined in the hostfile.r   z.More than one node needs to be in the hostfileFiC~  )backendcwdenvverbosepythonstarting_portconnections_per_ipz-mmlx_lmshare--path--model--tmpdir--dstringjacclz
jaccl-ringz7Only ring, jaccl and jaccl-ring backends are supported.)hostfile
ValueErrorr   	from_filer@   lenhostsargparse	Namespacer,   r   rA   envsr8   
executabler   modeltmpdirr   r   r   )r;   rO   launch_argscmds       r"   launchr\   >   s   }}/00!!$--0H2GHH
8>>aIJJ$$  
OMMK 		C yy$))$$zz	4::&&{{
DKK((xx""6!D(..+s;			W	$(8(8L(HT8>>;<RSSr$   c                    | j                         s-| j                  t        j                  | j                  |       gfS | j	                  d      D cg c]  }t        j                  | |       }}| t        |      fS c c}w )N*)r)   parentr   r0   rglobsorted)r   ffiless      r"   	get_filesrd   h   sl    ;;={{^55dkk4HIII8<

3H1^%%dA.EH Is   A=c                 b    | dk\  r	| dz  ddS | dk\  r	| dz  ddS | dk\  r	| dz  ddS | ddS )	Ng    eAz.2z GB/sg    .Az MB/sg     @@z KB/sz B/sr6   )xs    r"   	format_bwrg   p   s^    Cxc'"U##Cxc'"U##Cxc'"U##V4=r$   c           	      ,   |xs t         j                  j                         }t        t         j                  j                  |      }d}t        j
                         }|j                         |k(  rt        | |z  d      5 }|j                  dd       |j                         }|j                  d       t        |dd|dd	      }	 |j                  t              }	|	st        j                   |d             nZt        j                   |t        |	                   t        j                   ||	             |j!                  t        |	             |j#                          d d d        nt        | |z  d
      5 }d }	 |d      j%                         }
|
dkD  r@ |t        j&                  |
t         j(                              }	t        j                  |	       |
dkD  rd } |d      j%                         }
|
dkD  r@ |t        j&                  |
t         j(                              }t        j                  |       |j+                  t-        |	             |}	|
dkD  rd d d        |t        j
                         |z
  fS # 1 sw Y   "xY w# 1 sw Y   .xY w)Ngroupr   rbr   BTr   F)totalunit
unit_scaledescpositionleavewbdtype)mxdistributedinitr   all_sumtimerankopenseektellr   read
CHUNK_SIZEevalrR   
async_evalupdatecloseitemzerosuint8writebytes)r   r   srcrj   ry   
total_size
start_timerb   pbardata
chunk_size	next_datas               r"   
share_filer   z   s   *R^^((*Ebnn,,E:GJJzz|s$+t$FF1aLJFF1I D vvj)GGGAJ'D	*+gdm,CI&  JJL- %$2 $+t$D *JA~rxx
"((CDq. 	$QZ__.
> '288(L MIMM),d$  q. %" tyy{Z///U %$2 %$s    C#I>;C!J
>J
Jc                 F   |xs t         j                  j                         }t        t         j                  j                  |      }|j                         |k(  rUt        j                  |      }t        j                   |t        |                   t        j                   ||             n |d      j                         } |t        j                  |t         j                              }t        j                  t        |            }|D ]g  }|j                  dk(  r| |j                   z  j#                          0|j                  dk(  s@| |j                   z  j%                  |j&                         i d}	d}
t)        t        |      dd|j                         |k7        }|D ]e  }|j                  d	k(  r%t+        | |j                   ||      \  }}|	|z  }	|
|z  }
|j-                  d
       |j/                  t1        |	|
z               g |j3                          y )Nri   r   rt   r   r   gư>Files)rm   rp   rq   disabler   r   )speed)rv   rw   rx   r   ry   r{   pickledumpsr   rR   r   r   r   loadsr   r   r   mkdir
symlink_tor   r   r   r   set_postfixrg   r   )r   rc   r   rj   ry   	file_listfile_list_sizer   r   r   
total_timer   sts                 r"   share_filesr      s   *R^^((*Ebnn,,E:Gzz|sLL'	
I'(
	"# !*rxxbhh?@U4[) D+-		!((*I-		!--dhh7	  JJc%jwEJJLTWDWXD??f$dDIIsE:DAq!OJ!OJAyj)@AB  	JJLr$   c                  	   t        j                  d      } | j                  dt        d       | j                  dt        d       | j                  dt        d	       | j                  d
t        d       | j                  dt        d       | j	                         }|j
                  |j                  cxu rn n| j                  d       t        j                  t        j                         t        j                  j                         }|j                         dk(  rt        |       y d }g }|j
                  4t        |j
                        x}j!                         rt#        |      \  }}nt|j                  h	 t%        |j                        }|j&                  j(                  dk7  rt+        dt        |             t#        |j&                  j&                        \  }}t        j                  j/                  t1        |      dkD        }|j3                         j5                         }|j7                         j5                         }|s+t        d       t        d       t9        j:                  d       |j<                  .|j?                         |k(  rt        |      jA                  d      }t        jB                  t        j                  jE                  t1        |                   t        jB                  t        j                  jE                  |             nt        j                  jE                  d      j5                         }	t        j                  jE                  t        jF                  |	t        jH                              }t        tK        |      jM                  d            }n(|j?                         |k7  rt        |j<                        }tO        |jP                        5 }
|j?                         |k(  rtS        ||||       n@tS        t        |
      |||       |jU                  dd       tW        jX                  |
|       d d d        y # t,        $ r}Y d }~d }~ww xY w# 1 sw Y   y xY w)Nz8Distribute a model to other nodes using MLX distributed.)descriptionrI   z"Path to a file or folder to share.)typehelprJ   z.The path to a local model or Hugging Face repoz
--hostfilez8The file containing the hosts and connection informationrL   zCThe destination path in other nodes (defaults to --path or --model)rK   z?Intermediate temporary directory to ensure successfull transferz)One of --path or --model must be providedr   	snapshotsz=The model repository appears to be corrupted, it resolved to r   z/The --path needs to exist in at least one node.zAIf it is a remote repository download it first with `hf download`zutf-8rt   )dirT)parentsexist_ok)-rT   ArgumentParseradd_argumentr,   
parse_argsr   rX   r=   rv   set_default_devicecpurw   rx   sizer\   r   existsrd   r   r_   namerP   	Exception
all_gatherrR   argmaxr   anyr8   exitr   r{   encoder   ry   r   r   r   decoder   rY   r   r   osrename)parserr;   worldr   rc   ehas_filer   r   	data_sizetmps              r"   mainr      sq   $$NF s1UV
"R   G  
 R  
 N   DyyDJJ&@A"&&!NN!Ezz|qt DEyy$tyy/"9$!A!A!Coe			"4::.D{{;. STWX\T]S^_  $DKK$6$67KD% ~~((Ua8H
//

 
 
"C||~""$H?@QR xx::<3t9##G,DGGBNN**3t956GGBNN**401..q1668I>>))"((9BHH*MNDd**734D		DHH~		,::<3eS%0S	5#u5JJtdJ3IIc4  
-	,1  		0 
-	,s    ?A'Q 3A#Q6	Q3.Q36Q?r&   )'rT   r   r   r8   rz   dataclassesr   	functoolsr   r   pathlibr   tempfiler   typingr   r	   mlx.corecorerv   huggingface_hub.errorsr
   mlx._distributed_utils.commonr   mlx._distributed_utils.launchr   r   r   utilsr   r   r   r=   r\   rd   rg   r   r   r   r6   r$   r"   <module>r      s     	  
  ! -  ' $  : 2 C  "
 
F F  F<9
'TT10h"JO!r$   