
    /j&                        S SK r S SKr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S rS rSSSSSS	S
SSSSS.rSSSSSSSSSSSSSS.r0 SS_SS _S!S_S"S#_S$S_S%S&_S'S_S(S)_S*S	_S+S,_S-S_S.S/_S0S_S1S2_S3S_S4S5_rS6 rS7 rS8 rS9 rS: r\S;:X  a  \" 5         gg)<    Nc                 F    [        SU < SU< 3[        R                  SS9  g )N[z] T)fileflush)printsysstderr)tagmsgs     )/mnt/workspace/git/qwenasr.cpp/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zattn_norm.weightzffn_norm.weightzattn_q.weightzattn_k.weightzattn_v.weightzattn_output.weightzattn_q_norm.weightzattn_k_norm.weightzffn_gate.weightzffn_up.weightzffn_down.weight)zinput_layernorm.weightzpost_attention_layernorm.weightself_attn.q_proj.weightself_attn.k_proj.weightself_attn.v_proj.weightzself_attn.o_proj.weightzself_attn.q_norm.weightzself_attn.k_norm.weightzmlp.gate_proj.weightzmlp.up_proj.weightzmlp.down_proj.weightzconv1.weightz
conv1.biaszconv2.weightz
conv2.biaszconv3.weightz
conv3.biasconv_out.weightzpost_norm.weightzpost_norm.biasproj1.weight
proj1.biasproj2.weight
proj2.bias)zconv2d1.weightzconv2d1.biaszconv2d2.weightzconv2d2.biaszconv2d3.weightzconv2d3.biasr"   zln_post.weightzln_post.biasr#   r$   r%   r&   zself_attn_layer_norm.weightzself_attn_layer_norm.biaszattn_norm.biasr   zself_attn.q_proj.biaszattn_q.biasr    zself_attn.k_proj.biaszattn_k.biasr!   zself_attn.v_proj.biaszattn_v.biaszself_attn.out_proj.weightzself_attn.out_proj.biaszattn_output.biaszfinal_layer_norm.weightzfinal_layer_norm.biaszffn_norm.biasz
fc1.weightzfc1.biaszffn_up.biasz
fc2.weightzfc2.biaszffn_down.biasc                 r   U S:X  a  gU S:X  a  gU S:X  a  g[         R                  " SU 5      nU(       aJ  UR                  S5      UR                  S	5      p2U[        ;   a  S
U< S[        U   < 3$ [	        SU -  5      e[         R                  " SU 5      nU(       a  UR                  S5      nU[
        ;   a  S[
        U   -  $ [         R                  " SU5      nU(       a<  UR                  S5      UR                  S	5      p2U[        ;   a  SU< S[        U   < 3$ [	        SU -  5      e[	        SU -  5      e)Nz!thinker.model.embed_tokens.weightzthinker.token_embd.weightzthinker.model.norm.weightzthinker.output_norm.weightzthinker.lm_head.weightzthinker.output.weightz$thinker\.model\.layers\.(\d+)\.(.+)$      zthinker.blk..z!unmapped thinker layer tensor: %szthinker\.audio_tower\.(.+)$zthinker.audio.%szlayers\.(\d+)\.(.+)$zthinker.audio.blk.zunmapped audio tower tensor: %szunmapped tensor: %s)rematchgroup_LM_LEAFRuntimeError
_AUDIO_TOP_AUDIO_LEAF)namemidxleafrestmls         r   rename_tensorr8   J   s   22***+''&
8$?AGGAJ
T8*-x~>>>EFF
/6Awwqz:%
4(888XX-t4RXXa[{"47T9JKK<tCDD
,t3
44r   c                    US   nUS   nUS   u  pxX-
  n	[        US5       n
U
R                  X7-   5        U
R                  U	5      nS S S 5        US:X  a\  [        R                  " W[        R
                  S9R                  U5      nU R                  X[        R                  R                  S9  U	$ US:X  aE  [        R                  " W[        R                  S9R                  U5      nU R                  X5        U	$ US	:X  aE  [        R                  " W[        R                  S9R                  U5      nU R                  X5        U	$ [        S
U< SU< 35      e! , (       d  f       GN= f)Ndtypeshapedata_offsetsr   BF16)r:   )	raw_dtypeF32F16zunsupported dtype z for )r   seekr   np
frombufferuint16reshape
add_tensorggufGGMLQuantizationTyper=   float32float16r/   )wr2   sf_pathhdr_sizeinfo	dtype_strr;   off0off1nbytesr   rawarrs                r   add_tensor_passthroughrU   g   s&   WIMEn%JD[F	gt		xffVn 
 FmmCryy199%@	T$*C*C*H*HIEmmCrzz2::5A	TEmmCrzz2::5A	T
	4H
II 
	s   %E
E)c           	         [        [        R                  R                  US5      SSS9 n[        R
                  " U5      nS S S 5        [        [        R                  R                  US5      SSS9 n[        R
                  " U5      nS S S 5        WR                  S0 5      n[        [        WR                  5       SS9[        S	 UR                  5        5       SS95      nS
/US-   -  nUR                  5        H  u  pSU
s=::  a  U::  d  M  O  M  XU
'   M     UR                  5        H  u  pUS   U[        U
5      '   M     / n[        R                  R                  US5      n[        USSS9 nU HD  nUR                  S5      nU(       a  UR                  S5      (       a  M3  UR                  U5        MF     S S S 5        U R                  S5        U R!                  U5        U R#                  U5        [%        US['        U5      ['        U5      ['        U5      4-  5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f)Nz
vocab.jsonrutf-8encodingztokenizer_config.jsonadded_tokens_decoder)defaultc              3   8   #    U  H  n[        U5      v   M     g 7f)N)int).0is     r   	<genexpr> add_tokenizer.<locals>.<genexpr>   s     *\SVV\s    r(   r   contentz
merges.txt
#gpt2z(tokenizer: %d vocab, %d merges, %d added)r   osr   joinr   loadgetmaxvalueskeysitemsr_   rstrip
startswithappendadd_tokenizer_modeladd_token_listadd_token_mergesr   len)rK   ckpt_dirr
   r   vocabtcfgaddedmax_idtokenstoktidrN   mergesmpathlines                  r   add_tokenizerr      s   	bggll8\2C'	Ja		! 
K	bggll8%<=sW	UYZyy| 
V HH+R0EELLNB'*UZZ\*B7F TVaZ FKKMv3K " [[]		?s3x # FGGLL<0E	eS7	+qD;;t$D4??3//MM$	  
, &!Vv73v;FUXY^U_:``a; 
K	J	U	U" 
,	+s$   H&2H82AI
&
H58
I

Ic           
      	   U n[         R                  R                  [        SSU -  5      n[         R                  R                  US5      n[         R                  R                  US5      n[         R                  R                  [        SSU -  5      n[         R                  R	                  U5      (       d%  [        USU-  5        [        R                  " S5        [         R                  R                  U5      (       a-  [        US	[         R                  R                  U5      -  5        g [        US
SS9 n[        R                  " U5      nS S S 5        WS   nUS   n	US   n
[        US[         R                  R                  U5      -  5        [        R                  " USSS9nUR                  SU -  5        UR!                  U	S   5        UR#                  U	S   5        UR%                  U	S   5        UR'                  U	S   5        UR)                  U	S   5        UR+                  U	S   5        UR-                  U	S   5        UR/                  U	S   5        UR1                  U	S   5        UR3                  U	S   5        UR5                  [7        U	S   5      5        UR9                  S[;        U	R=                  SS 5      5      5        UR?                  S!U
S"   5        UR?                  S#U
S$   5        UR?                  S%U
S&   5        UR?                  S'U
S(   5        UR?                  S)U
S*   5        UR?                  S+U
S,   5        UR?                  S-U
S.   5        UR?                  S/U
S0   5        UR?                  S1U
S2   5        UR?                  S3U
S4   5        UR?                  S5US6   5        UR?                  S7US8   5        UR?                  S9US:   5        [A        XU5        [C        U5      u  pS;u  p[E        URG                  5       5       H'  n[I        U5      nU[K        UUX=UU   5      -  nUS-  nM)     [        US<XS=-  4-  5        URM                  5         URO                  5         URQ                  SS>9  URS                  5         [        US?[         R                  RU                  U5      S=-  U4-  5        g ! , (       d  f       GNz= f)@NcheckpointszQwen3-ASR-%szmodel.safetensorszconfig.jsonmodelszqwenasr-%s-BF16.ggufz$missing %s, run checkpoints.sh firstr(   zskip: %s existsrW   rX   rY   thinker_configtext_configaudio_configz
writing %sqwenasrT)use_temp_filenum_hidden_layershidden_sizeintermediate_sizenum_attention_headsnum_key_value_headshead_dim
vocab_sizemax_position_embeddingsrms_norm_eps
rope_thetazqwenasr.tie_word_embeddingstie_word_embeddingsFzqwenasr.audio.d_modeld_modelz$qwenasr.audio.downsample_hidden_sizedownsample_hidden_sizezqwenasr.audio.encoder_layersencoder_layersz%qwenasr.audio.encoder_attention_headsencoder_attention_headszqwenasr.audio.encoder_ffn_dimencoder_ffn_dimzqwenasr.audio.num_mel_binsnum_mel_binszqwenasr.audio.output_dim
output_dimzqwenasr.audio.n_windown_windowzqwenasr.audio.n_window_infern_window_inferz"qwenasr.audio.max_source_positionsmax_source_positionszqwenasr.audio_start_token_idaudio_start_token_idzqwenasr.audio_end_token_idaudio_end_token_idzqwenasr.audio_token_idaudio_token_id)r   r   ztensors: %d, %.1f MBi   )progresszwrote %.0f MB -> %s)+ri   r   rj   
SCRIPT_DIRisfiler   r   exitexistsbasenamer   r   rk   rG   
GGUFWriteradd_nameadd_block_countadd_embedding_lengthadd_feed_forward_lengthadd_head_countadd_head_count_kvadd_key_lengthadd_value_lengthadd_vocab_sizeadd_context_lengthadd_layer_norm_rms_epsadd_rope_freq_basefloatadd_boolboolrl   
add_uint32r   r   sortedro   r8   rU   write_header_to_filewrite_kv_data_to_filewrite_tensors_to_fileclosegetsize)sizer
   rx   rL   cfg_pathout_pathr   cfgthinkertcacrK   r   rM   	n_tensorsn_bytesr2   out_names                     r   convertr      s2   
Cww||J~7LMHggll8%89Gww||Hm4Hww||J2H42OPH77>>'""C7'AB	ww~~hC"RWW%5%5h%??@	hg	.!iil 
/"#G		B		 B\BGG,,X667)4@AJJ~$% b,-.2m,-b!456R-./012R
^$r*~&R%&567R/0r,/01JJ,d266:OQV3W.XY LL("Y-8LL7<T9UVLL/4D1EFLL8"=V:WXLL0"5F2GHLL-r./ABLL+R-=>LL)2j>:LL/4D1EFLL5r:P7QR LL/9O1PQLL-w7K/LMLL)73C+DE!s##G,NDItyy{# &)!Xw$t*UUQ	 $ #yW2E&FFGT*GGI"bggooh&?7&KX%VVWo 
/	.s   8S
Sc                     [         R                  " 5       n U R                  SSS/SS9  U R                  5       n[        R
                  " [        R                  R                  [        S5      SS9  [        UR                  5        g )Nz--sizez0.6Bz1.7BT)choicesrequiredr   )exist_ok)argparseArgumentParseradd_argument
parse_argsri   makedirsr   rj   r   r   r   )apargss     r   mainr      s[    		 	 	"BOOHvv&6OF==?DKKZ2TBDIIr   __main__)r   r   ri   r+   r   r   numpyrB   rG   r   dirnameabspath__file__r   r   r   r.   r0   r1   r8   rU   r   r   r   __name__ r   r   <module>r      s     	 	  
  WW__RWW__X67
? 1'8...333-)- %l$l$l((:J",",

!#5
!1
 
 1H
 	
 1H	

 

 1H
  !5
 8QRd
 0
 3J?
 /
 $.}
 #
 &0
5:J4b@EXN zF r   