
    W;j|;                     B   S SK r S SKrS SKrS SKrS SKrS SKr\ R                  R                  \ R                  R                  \
5      5      r\ R                  R                  \S5      r\ R                  R                  \S5      rSSSSSS	.rS
 rS rS r\R&                  \R(                  \R*                  S.rS rS r\R&                  \R(                  \R2                  S.rS rS rS rS rS rS r S r!S r"S r#S r$\%S:X  a  \RL                  " \$" 5       5        gg)    Ncheckpointsmodelslanguage_modelrvq_depth_decodercondition_encodertransformervocoderlmdepthcondditvaec                 F    [        SU < SU< 3[        R                  SS9  g )N[z] T)fileflush)printsysstderr)tagmsgs     
convert.pylogr   $   s    	sC
 szz>    c                    [        U S5       n[        R                  " SUR                  S5      5      S   n[        R
                  " UR                  U5      5      nS S S 5        WR                  SS 5        USW-   4$ ! , (       d  f       N'= f)Nrbz<Q   r   __metadata__)openstructunpackreadjsonloadspop)pathfnmetas       r   read_sf_headerr+   (   sm    	dD	QMM$q	*1-zz!&&)$ 
 	HH^T"Q;	 
	s   AA==
Bc                    S HK  n[         R                  R                  X5      n[         R                  R                  U5      (       d  MH  U/s  $    S H  n[         R                  R                  X5      n[         R                  R                  U5      (       d  MH  [	        USSS9 n[
        R                  " U5      nSSS5        [        [        WS   R                  5       5      5      nU Vs/ s H"  n[         R                  R                  X5      PM$     sns  $    [        SU -  5      e! , (       d  f       Nu= fs  snf )	z9Return the list of safetensors paths (single or sharded).)zmodel.safetensorsz#diffusion_pytorch_model.safetensors)zmodel.safetensors.index.jsonz.diffusion_pytorch_model.safetensors.index.jsonrutf-8encodingN
weight_mapzno safetensors in %s)osr'   joinexistsr    r$   loadsortedsetvaluesFileNotFoundError)	model_dirnamesingleindexr(   idxshardsss           r   find_sf_filesrA   /   s    Li.77>>&!!8O M cY-77>>%  eS73qiil 4CL 1 8 8 :;<F8>?1BGGLL.?? c 2Y>
??	 43 @s   'D-/)D>-
D;	)F32F16BF16c           	      t   0 n[        U 5       GH  n[        U5      u  p4[        US5       nUR                  5        H  u  pgUR	                  XGS   S   -   5        UR                  US   S   US   S   -
  5      n[        R                  " U[        US      S9n	US   S:X  a?  U	R                  [        R                  5      S-  R                  [        R                  5      n	U	R                  [        R                  5      R                  US	   5      X'   M     S
S
S
5        GM     U$ ! , (       d  f       GM)  = f)z9Load every tensor of a component as float32 numpy arrays.r   data_offsetsr      dtyperH   rD      shapeN)rA   r+   r    itemsseekr#   np
frombufferDTYPESastypeuint32viewfloat32reshape)
r:   tensorsr'   r*   
data_startr(   r;   trawas
             r   load_sf_tensorsr[   @   s   Gi()$/$::<zn$5a$889ffQ~.q1An4Ea4HHIMM#VAgJ-?@W:'")),288DA ! 4 < <QwZ H (  ) N s   C-D''
D7	c                    0 nU R                  5        H  u  p#UR                  S5      (       a  M  UR                  S5      (       a  US[        S5      *  nXS-      nUR                  S   n[        R
                  " UR                  US5      S-  R                  SS95      nUR                  U5      U-  R                  U4S	UR                  S-
  -  -   5      nX8-  R                  [        R                  5      XS
-   '   M  X1U'   M     U$ )zAFold every weight_g/weight_v pair: w = g * v / ||v|| along dim 0.z	.weight_gz	.weight_vNr      rG   )axis)rG   z.weight)rL   endswithlenrK   rN   sqrtrU   sumndimrQ   rT   )	rV   outr;   rZ   basegd0normscales	            r   fold_weight_normrk   O   s    
C==?==%%==%%+3{++,D{*+AB77AIIb"-277Q7?@DYYr]T)22B54166A:;N3NOE%&Y$6$6rzz$BCy !I # Jr   )FloatStorageHalfStorageDoubleStoragec                   ^^ SSK nSSKnSSKnSSKmUR	                  U 5      nUR                  5        Vs/ s H  oUR                  S5      (       d  M  UPM     snS   nUR                  SS5      S   n " U4S jSUR                  5      nU" UR                  UR                  U5      5      5      R                  5       n	SU4S jjm0 n
T" U	5       H  u  nu  nu  pnnUR                  U< S	U< 35      n[        R                  " U[        U   S
9nU(       a  [        [        R                   " U5      5      OSnUXU-    R#                  [        R$                  5      R'                  U5      X'   M     U
$ s  snf )zFLoad a torch .pth state dict as float32 numpy arrays, no torch needed.r   Nzdata.pkl/rG   c                   (   > \ rS rSrU 4S jrS rSrg)#load_pth_tensors.<locals>.Unpicklerk   c                    > UR                  S5      S   S;   a  [        TR                  U5      U5      $ UR                  S5      (       a  U$ US:X  a  S $ S $ )N.r   )collectionsbuiltinsStorage_rebuild_tensor_v2c                     SX[        U5      4$ )NT)tuple)stoffsizestriderZ   ks         r   <lambda>@load_pth_tensors.<locals>.Unpickler.find_class.<locals>.<lambda>r   s    sBUSW[>Yr   c                      g )N )rZ   r   s     r   r   r   s   s    4r   )splitgetattrimport_moduler`   )selfmodr;   	importlibs      r   
find_class.load_pth_tensors.<locals>.Unpickler.find_classl   sZ    yy~a $??y66s;TBB}}Y''++YY''r   c                     US   US   4$ )NrG   r^   r   )r   pids     r   persistent_load3load_pth_tensors.<locals>.Unpickler.persistent_loadu   s    FCF##r   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__)r   s   r   	Unpicklerrr   k   s    	(	$r   r   c              3   *  >#    U R                  5        Hx  u  p#[        U[        5      (       a!  T" X1[        U5      -   S-   5       S h  vN   M;  [        U[        5      (       d  MR  U(       d  M[  US   S:X  d  Mf  U[        U5      -   U4v   Mz     g  NH7f)Nru   r   r{   )rL   
isinstancedictstrr|   )dprefixr   vwalks       r   r   load_pth_tensors.<locals>.walkz   sq     GGIDA!T""CF?S#8999Au%%!!!s1voq((	 9s$   ABB	B&B/B:Bz/data/rI   ) )zipfilepickleior   ZipFilenamelistr`   rsplitr   BytesIOr#   r5   rN   rO   
PTH_DTYPESintprodrQ   rT   rU   )r'   r   r   r   zr)   pklrootr   objrV   r;   _tnamekeyr~   rK   rY   rZ   r   r   s                      @@r   load_pth_tensorsr   c   s*   ))Ajjl
=ljj&<1l
=a
@C::c1a D$F$$ $ BJJqvvc{+
,
1
1
3C) G/3Cy++q,5UffT3/0MM#Z%67#(Ca#a(//

;CCEJ	 09
 N? >s   E6E6c           	         [        U 5      nSSSSS.n0 nUR                  5        GH(  u  pEUR                  S5      nUR                  S5      (       a  XSSUS	   -   '   M9  UR                  S
5      (       a  XSSUS   -   '   M[  UR                  S5      (       a  XSS'   Mw  UR                  S5      (       a  XSSUS   -   '   M  UR                  S5      (       d  M  S[	        US   5      S	-
  -  nUS   S;   a:  X&S      nXSUS[	        US   5      S	-   -  -   US   S;   a  UO
US-   US   -   -   '   GM  US   S:X  a
  XSUS-   '   GM  XSUS-   US   -   '   GM+     U$ )zDAC-VAE encoder of the dav.pth training checkpoint, renamed to the
decoder naming vocabulary (its decoder half is bit-identical to the
published vocoder). Kept: encoder.* and the posterior mean projection.zsnake1.alphaconv1zsnake2.alphaconv2)0123ru   z
mean_proj.zencoder.mean_proj.rG   zencoder.block.0.zencoder.conv_in.   zencoder.block.5.zencoder.snake_out.alphazencoder.block.6.zencoder.conv_out.zencoder.block.zencoder.blocks.%d.r^      )r   r   r      zres_unit%d.)r   r      r   zconv1.   )r   rL   r   
startswithr   )	r'   rY   subre   r;   rZ   pblktails	            r   load_dav_encoderr      sr    4
 CW>
PC
C99;JJsO??<((/0$qt+,__/00-."QqT)*__/00-.)*__/00./#ad*+__-..&#ad)a-8Ct&Q4ystC-3qt9q=99QqTZEWT]adg]gjklmjn]nop1,-C.()-.C(NQqT)*% & Jr   c            	         [        [        [        R                  R	                  [
        [        S   5      5      5      n [        R                  R	                  [
        S5      n[        R                  R                  U5      (       d%  [        SSU-  5        [        R                  " S5        U R                  [        [        U5      5      5        [        R                  " [        SS9  [        R                  R	                  [        S5      n[        R                   " USS	9nUR#                  S
5        UR%                  SS5        UR%                  SS5        UR'                  S/ SQ5        [)        U 5       H  nX   nUR+                  S5      (       a  UR-                  S5      nUR/                  U[0        R2                  " UR5                  [0        R6                  5      5      5        [        SU< S[9        UR:                  5      < 35        M     UR=                  5         UR?                  5         URA                  5         URC                  5         [        SSU[        R                  RE                  U5      S-  4-  5        g)a  vocoder/ + dav.pth encoder -> MiniMax-Music3-vocoder-F32.gguf,
weight norm folded, native F32. Decoder tensors mirror the published
subfolder byte-perfect; encoder tensors come from the dav.pth training
checkpoint whose decoder half is bit-identical to the published one.r   zdav.pthz(FATAL: %s missing (run ./checkpoints.sh)rG   Texist_okzMiniMax-Music3-vocoder-F32.ggufzmm3-vaearchzMiniMax-Music3 Flow-VAEzmm3-vae.latent_channels   zmm3-vae.sampling_rateD  zmm3-vae.upsampling_ratios)r   r   r   r^   z.alphar]    wrote %s (%.1f MB)    .AN)#rk   r[   r2   r'   r3   CHECKPOINT_DIR
COMPONENTSr4   r   r   exitupdater   makedirs
OUTPUT_DIRgguf
GGUFWriteradd_name
add_uint32	add_arrayr6   r`   rU   
add_tensorrN   ascontiguousarrayrQ   rT   listrK   write_header_to_filewrite_kv_data_to_filewrite_tensors_to_fileclosegetsize)rV   dav_pathout_pathwr;   rZ   s         r   convert_vaer      s   
 rww||NJW\L]/^_`Gww||NI6H77>>(##E=HINN#$4X$>?@KK
T*ww||J(IJHy1AJJ()LL*C0LL(%0KK+\:wM==""		"A	T2//0DEFEdDM23   GGI#x1JS1P&QQRr   c            
         [        [        R                  R                  [        [
        S   5      5      n [        R                  " [        SS9  [        R                  R                  [        S5      n[        R                  " USS9nUR                  S5        UR                  SS	5        UR                  S
S5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        [        U 5       Hp  nUR                  U[        R                  " X   R!                  [        R"                  5      5      5        [%        SU< S['        X   R(                  5      < 35        Mr     UR+                  5         UR-                  5         UR/                  5         UR1                  5         [%        SSU[        R                  R3                  U5      S-  4-  5        g)zLcondition_encoder/ -> MiniMax-Music3-condition_encoder-F32.gguf, native F32.r   Tr   z)MiniMax-Music3-condition_encoder-F32.ggufzmm3-condr   z MiniMax-Music3 condition encoderzmm3-cond.condition_hidden_dim   zmm3-cond.num_condition_layersr   zmm3-cond.out_dim   zmm3-cond.input_sampling_ratei]  zmm3-cond.input_hop_lengthi  zmm3-cond.output_sampling_rater   zmm3-cond.output_hop_lengthi   r   r   r   N)r[   r2   r'   r3   r   r   r   r   r   r   r   r   r6   r   rN   r   rQ   rT   r   r   rK   r   r   r   r   r   )rV   r   r   r;   s       r   convert_condr      ss   bggll>:f;MNOGKK
T*ww||J(STHz2AJJ12LL0$7LL0!4LL#T*LL/7LL,c2LL0%8LL-s3w	T2//0D0DRZZ0PQRFtT'-*=*=%>?@   GGI$"''//(2Kc2Q'RRSr   c           	      0   [         R                  R                  n[         R                  R                  nSn[	        U5       GH.  n[        U5      u  px[        US5       n	[        U5       H  n
Xz   nU	R                  XS   S   -   5        U	R                  US   S   US   S   -
  5      nUS   S:X  aF  [        R                  " U[        R                  S9R                  US   5      nU R                  XUS	9  OeUS   S
:X  aF  [        R                  " U[        R                  S9R                  US   5      nU R                  XUS	9  O[!        SUS   < SU
< 35      eUS-  nM     SSS5        GM1     [#        USU-  5        g! , (       d  f       GMS  = f)zQStream every safetensors tensor into the writer byte perfect in its native dtype.r   r   rF   rG   rH   rD   rI   rK   )	raw_dtyperB   zunexpected dtype z for Nz
%d tensors)r   GGMLQuantizationTyperD   rB   rA   r+   r    r6   rM   r#   rN   rO   uint16rU   r   rT   
SystemExitr   )r   r:   r   rD   rB   countr'   r*   rW   r(   r;   rX   rY   arrs                 r   stream_native_tensorsr      sd   $$))D

#
#
'
'CEi()$/$tJzn$5a$889ffQ~.q1An4Ea4HHIW:'--299=EEajQCLLdL;wZ5(--2::>FFqzRCLLcL:$QwZQU%VWW
 %  )  \E!" s   D	F
F	c                  8   [         R                  " [        SS9  [         R                  R	                  [        S5      n [
        R                  " U SS9nUR                  S5        UR                  SS5        UR                  S	S
5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        [        U[         R                  R	                  [        [        S   5      S5        UR                  5         UR                  5         UR                  5         UR                  5         [!        SSU [         R                  R#                  U 5      S-  4-  5        g)zYtransformer/ -> MiniMax-Music3-transformer-F32.gguf, native F32, streamed shard by shard.Tr   z#MiniMax-Music3-transformer-F32.ggufzmm3-ditr   z MiniMax-Music3 flow matching DiTzmm3-dit.in_channelsr   zmm3-dit.condition_dimr   zmm3-dit.num_layers$   zmm3-dit.num_attention_heads    zmm3-dit.attention_head_dim@   zmm3-dit.ff_inner_dimi    zmm3-dit.rotary_dimzmm3-dit.fourier_embedding_dim   r   r   r   Nr2   r   r   r'   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r   convert_ditr      s.   KK
T*ww||J(MNHy1AJJ12LL&,LL($/LL%r*LL.3LL-r2LL'.LL%r*LL0#6!RWW\\.*U:KLeTGGI#x1JS1P&QQRr   c                     [         R                  " [        SS9  [         R                  R	                  [        S5      n [
        R                  " U SS9nUR                  S5        UR                  SS5        UR                  S	S
5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        [        U[         R                  R	                  [        [        S   5      S5        UR                  5         UR                  5         UR                  5         UR                  5         [!        SSU [         R                  R#                  U 5      S-  4-  5        g)zNrvq_depth_decoder/ -> MiniMax-Music3-rvq_depth_decoder-BF16.gguf, native BF16.Tr   z*MiniMax-Music3-rvq_depth_decoder-BF16.ggufz	mm3-depthr   z MiniMax-Music3 RVQ depth decoderzmm3-depth.hidden_sizer   zmm3-depth.num_layersr   zmm3-depth.num_attention_headsrJ   zmm3-depth.intermediate_sizei   zmm3-depth.audio_vocab_sizei   zmm3-depth.num_codebooksr   z!mm3-depth.max_position_embeddingsr   r   r   Nr   r   s     r   convert_depthr     s    KK
T*ww||J(TUH{3AJJ12LL($/LL'+LL0"5LL.5LL-t4LL*A.LL4b9!RWW\\.*W:MNPWXGGI%277??83Ls3R(SSTr   c                  F   [         R                  " [        SS9  [         R                  R	                  [        S5      n [        [         R                  R	                  [        SS5      SSS9 n[        R                  " U5      nS	S	S	5        [        R                  " U S
S9nUR                  S5        UR                  S[        R                  " WSS95        [        [         R                  R	                  [        SS5      SSS9 n[        R                  " U5      nS	S	S	5        WS   S   nUR                  S/ 5       Vs0 s H  ofS   US   _M     nn[        [        UR!                  5       5      [        U5      5      S-   nS/U-  n	UR#                  5        H	  u  pXU'   M     UR#                  5        H	  u  pXU'   M     US   S    Vs/ s H+  n[%        U[&        5      (       a  SR	                  U5      OUPM-     nnUR)                  S5        UR+                  U	5        UR-                  U5        [/        SSU[1        U5      4-  5        [3        U[         R                  R	                  [        [4        S   5      S5        UR7                  5         UR9                  5         UR;                  5         UR=                  5         [/        SSU [         R                  R?                  U 5      S-  4-  5        g	! , (       d  f       GNy= f! , (       d  f       GN= fs  snf s  snf ) z~language_model/ + tokenizer/ -> MiniMax-Music3-language_model-BF16.gguf, BF16 weights, config json and BPE tokenizer embedded.Tr   z'MiniMax-Music3-language_model-BF16.ggufr   zconfig.jsonr-   r.   r/   Nzmm3-lmr   z#MiniMax-Music3 global LM (Qwen3 8B)zmm3.config_json),:)
separators	tokenizerztokenizer.jsonmodelvocabadded_tokensidcontentrG   r   mergesr   gpt2r   ztokenizer: %d tokens, %d mergesr   r   ) r2   r   r   r'   r3   r    r   r$   r5   r   r   r   
add_stringdumpsgetmaxr8   rL   r   r   add_tokenizer_modeladd_token_listadd_token_mergesr   ra   r   r   r   r   r   r   r   )r   r(   cfgr   tjr  rX   addedn_tokenstokenstok_strtok_idmr  s                 r   
convert_lmr  $  sm   KK
T*ww||J(QRH	bggll>+;]KS[b	cghiil 
d 	x0AJJ45LL"DJJsz$JK	bggll>;8HI3Y`	aefYYq\ 
bwK E,.FF>2,FG,FqtWa	l",FEG3u||~&E
3a7HTH_F ;;= v ) ;;= v )ACGXAVWAVAZ400chhqka7AVFW&!Vv/8S[2IIJ!RWW\\.*T:JKTRGGI"h0IC0O%PPQ9 
d	c 
b	a H Xs$   ,K5L?L2L5
L
Lc                     U S:X  a  [        5         g U S:X  a  [        5         g U S:X  a  [        5         g U S:X  a  [        5         g U S:X  a  [	        5         g g )Nr   r   r   r   r   )r   r   r   r   r  )	components    r   convertr  G  sT    EFEGD r   c            
      >   [         R                  R                  [        5      (       d  [	        SS5        g[         R
                  " [        SS9  SSSSSS.n S	n[         H  n[         R                  R                  [        S
[        U   < SX   < S35      n[         R                  R                  U5      (       a9  [	        SSU< S[         R                  R                  U5      < S35        US-  nM  [        U5        US-  nM     [	        SSU[        4-  5        g	)NGGUFzcheckpoints/ not foundrG   Tr   rD   rB   r
   r   zMiniMax-Music3--z.ggufzskip z: z existszdone: %d model(s) in %s)r2   r'   isdirr   r   r   r   r   r3   r4   basenamer  )native	convertedcompoutput_paths       r   mainr%  W  s    77==((F,-KK
T*VU5QVWFIggll:jY]N^`f`l/mn77>>+&&bgg6F6F{6STUNIQ	  )Y
,CCDr   __main__)'r2   r   r$   r!   numpyrN   r   r'   dirnameabspath__file__
SCRIPT_DIRr3   r   r   r   r   r+   rA   rT   float16r   rP   r[   rk   float64r   r   r   r   r   r   r   r   r  r  r%  r   r   r   r   r   <module>r.     s   " 
 
    WW__RWW__X67
j-8WW\\*h/
   
?@ BJJ			B$ !jjVXV`V`a
$L8SBT4#.S.U,!RF * zHHTV r   