
    (HJjT                        d dl mZ d dlmZmZmZ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mZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ e G d de             Z G d dej<                        Ze
j@                  de
jB                  dee
jB                     de"de"de"de#de$de%dee
jB                  e
jB                  f   fd       Z& G d dej<                        Z' G d dej<                        Z( G d dej<                        Z) G d d ej<                        Z* G d! d"ej<                        Z+ G d# d$ej<                        Z, G d% d&ej<                        Z-y)'    )	dataclass)AnyDictListOptionalTupleN   )swiglu)BaseModelArgscreate_attention_maskcreate_ssm_maskscaled_dot_product_attention)ArraysCacheKVCache)gated_delta_update)MultiLinear)	SwitchGLUc                      e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eeef   ed<   eed<   eed<   eed<   eed<   dZ	e
eeef      ed<   dZeed<   dZe
e   ed<   dZe
e   ed<   dZe
e   ed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   d Zeed!<   dZeed"<   dZeed#<   dZeed$<   dZeed%<   dZeed&<   y)'	ModelArgs
model_type
vocab_sizehidden_sizenum_hidden_layersnum_attention_headsnum_key_value_headsintermediate_sizehead_dim
rope_thetarms_norm_epslinear_attn_configmodel_max_lengthnum_expertsmoe_intermediate_sizekv_lora_rankNrope_scalingFtie_word_embeddingsqk_nope_head_dimqk_rope_head_dim
v_head_dimmla_use_noper	   num_experts_per_tokenr   num_shared_expertssigmoidmoe_router_activation_funcTmoe_renormalize      ?routed_scaling_factorfirst_k_dense_replacemoe_layer_frequse_grouped_topknum_expert_group
topk_group)__name__
__module____qualname__str__annotations__intfloatr   r   r%   r   r&   boolr'   r(   r)   r*   r+   r,   r.   r/   r1   r2   r3   r4   r5   r6        c/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/models/kimi_linear.pyr   r      s$   OOMS#X&-1L(4S>*1 %%&*hsm*&*hsm* $J$L$!"3"&// OT #&5&!"3"NC!d!cJr@   r   c                   v     e Zd Z	 	 ddedee   dee   f fdZdej                  dej                  fdZ	 xZ
S )	KimiMLPargsr   r   c                    t         |           |xs |j                  }|xs |j                  }t	        j
                  ||d      | _        t	        j
                  ||d      | _        t	        j
                  ||d      | _        y NFbias)	super__init__r   r   nnLinear	gate_projup_proj	down_proj)selfrD   r   r   dimhidden	__class__s         rA   rJ   zKimiMLP.__init__:   sl     	-T--"<d&<&<3U;yyf5963U;r@   xreturnc                 t    | j                  t        | j                  |      | j                  |                  S N)rO   r
   rM   rN   )rP   rT   s     rA   __call__zKimiMLP.__call__G   s)    ~~fT^^A%6QHIIr@   NN)r7   r8   r9   r   r   r<   rJ   mxarrayrX   __classcell__rS   s   @rA   rC   rC   9   sR     &*+/	<< c]< $C=	<J"(( Jrxx Jr@   rC   gatesrH   top_kn_groupr6   r1   renormalizescore_functionrU   c                 F   |dk(  rt        j                  |       }n-|dk(  rt        j                  | dd      }nt        d| d      |}	|||j	                  |j
                        z   }|dkD  rt        j                  |d|df	      }t        j                  |d
d      j                  dd      }
||z
  }t        j                  |
|dz
  d      dd |d d f   }t        j                  |t        j                  |      t        j                  d|j
                        d      }t        j                  |dd      }t        j                  | |dz
  d      dd |f   }t        j                  |	|d      }|dkD  r|r|j                  dd      dz   }||z  }|||z  fS )Nr-   softmaxT)axisprecisez#Unsupported MoE router activation ''r	   )rf   shape   rf   )rf   keepdims)kthrf   .g        dtypeg#B;)rZ   r-   rd   
ValueErrorastyperp   	unflattentopksumargpartitionput_along_axisstop_gradientr[   flattentake_along_axis)r^   rH   r_   r`   r6   r1   ra   rb   scoresorig_scoresgroup_scoresk	group_idxindsdenominators                  rA   _group_expert_selectr   K   s    "E"	9	$ED9>~>NaPQQK$++fll33{f2gr]Cwwvqr266B6Nj OOLa!e"Ec2A2qjQ	""Y'HHS-	
 FB+??F7	;C%KHDT;Fqy[jjb4j85@+%////r@   c                   \     e Zd Zdef fdZdej                  dej                  fdZ xZS )KimiSparseMoErD   c                    t         |           || _        |j                  }|j                  }|t        d      t        j                  ||d      | _        t        ||j                  |      | _        t        j                  |ft        j                        | _        |j                   r,|j                  |j                   z  }t#        ||      | _        y d | _        y )Nz,num_experts must be specified for MoE layersFrG   ro   )r   )rI   rJ   rD   r   r"   rq   rK   rL   gater   r#   
switch_mlprZ   zerosfloat32e_score_correction_biasr,   rC   shared_experts)rP   rD   rR   expertsshared_hiddenrS   s        rA   rJ   zKimiSparseMoE.__init__y   s    	!!""?KLLIIfgE:	#FD,F,FP')xx
"**'M$"" 669P9PPM")$-"PD"&Dr@   rT   rU   c           
         | j                  |      }t        || j                  | j                  j                  | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                        \  }}| j                  ||      }||d   z  j                  d      }| j                  || j                  |      z   }|S )N.Nrm   rk   )r   r   r   rD   r+   r5   r6   r1   r/   r.   r   ru   r   )rP   rT   r{   r   weightsouts         rA   rX   zKimiSparseMoE.__call__   s    1,((II++II&&II  II++II%%II00	
g ooa&WY'',,",5*++A..C
r@   )	r7   r8   r9   r   rJ   rZ   r[   rX   r\   r]   s   @rA   r   r   x   s*    'Y '$"(( rxx r@   r   c            	            e Zd Zdef fdZ	 	 ddej                  deej                     dee   dej                  fdZ	 xZ
S )	KimiMLAAttentionrD   c                    t         |           || _        |j                  | _        |j
                  | _        |j                  xs |j                  | _        |j                  xs d| _        | j                  | j                  z   | _	        |j                  xs |j                  | _
        |j                  | _        | j                  dz  | _        |j                  }t        j                  || j                  | j                  z  d      | _        t        j                  ||j                  | j                  z   d      | _        t        j$                  |j                  |j&                        | _        t+        | j                  |j                  | j                        | _        t+        |j                  | j                  | j                        | _        t        j                  | j                  | j                  z  |d      | _        y )Nr         FrG   eps)rI   rJ   rD   r   	num_headsr   r'   r   r(   
q_head_dimr)   r$   scaler   rK   rL   q_projkv_a_proj_with_mqaRMSNormr   kv_a_layernormr   embed_qunembed_outo_proj)rP   rD   rR   rS   s      rA   rJ   zKimiMLAAttention.__init__   s   	11#'#;#;  $ 5 5 F $ 5 5 ://$2G2GG//:T]] --__d*
!!ii(HuU"$)) 5 55#

 !jj):):@Q@QR"!!4#4#4dnn
 't
 ii @&uUr@   rT   maskcacherU   c           	         |j                   \  }}}| j                  |      j                  ||| j                  | j                        }|j                  dddd      }t        j                  || j                  gd      \  }}	| j                  |      }
t        j                  |
| j                  gd      \  }
}|j                  ||d| j                        j                  dddd      }| j                  |
      }t        j                  |d      }||j                  ||      \  }}|	| j                  z  |j!                  dd      z  }|\t        j"                  ||t        j$                  t        j&                  |j(                        j*                  |j(                              }|dk(  r| j-                  |      }|x}}n$| j-                  |d	      }| j/                  |      }t1        ||||| j                  |
      }|dk(  r| j/                  |      }|j                  dddd      j                  ||d      }| j3                  |      S )Nr   rj   r	      re   rk   rm   F)	transpose)r   r   r   )ri   r   reshaper   r   r   rZ   splitr'   r   r$   r(   r   expand_dimsupdate_and_fetchr   swapaxeswherer[   finforp   minr   r   r   r   )rP   rT   r   r   BL_qq_nopeq_pecompressed_kvk_pe	kv_latent	pe_scoresr~   voutputs                    rA   rX   zKimiMLAAttention.__call__   s    ''1aKKN""1aIKK1a#xxD$9$9#:D//2 hh}t7H7H6IPRSt||Aq!T%:%:;EEaAqQ''6	NN915	#44YEOItDJJ&$--B*??	)//266	HI 6\\&)FAY%8A  +A-AqTZZi
 6%%f-F!!!Q1-55aB?{{6""r@   rY   )r7   r8   r9   r   rJ   rZ   r[   r   r   rX   r\   r]   s   @rA   r   r      sZ    VY V> $(#'	-#88-# rxx -#  	-#
 
-#r@   r   c                        e Zd Zdedef fdZdej                  deej                     deej                     deej                     deej                  ej                  f   f
d	Z	 xZ
S )
ShortConv1dchannelskernel_sizec                 p    t         |           || _        t        j                  |||d|d      | _        y )NFr   )in_channelsout_channelsr   rH   groupspadding)rI   rJ   r   rK   Conv1dconv)rP   r   r   rS   s      rA   rJ   zShortConv1d.__init__   s8    &II !#
	r@   rT   stater   lengthsrU   c                    |t        j                  |d   |d      }|Kt        j                  |j                  d   | j                  dz
  |j                  d   f|j
                        }t        j                  ||gd      }t        j                  | j                  |            }| j                  dz
  }|bt        j                  |d|j                  d         }|d d d f   t        j                  |      z   d   }	t        j                  ||	d      }
||
fS t        j                  |d d | d d d f         }
||
fS )Nr   r   r	   re   ro   rk   )rZ   r   r   ri   r   rp   concatenaterK   silur   cliparangerz   
contiguous)rP   rT   r   r   r   
conv_inputr   n_keepends	positions	new_states              rA   rX   zShortConv1d.__call__   s$    i!Q/A=HHT--11772;?qwwE ^^UAJQ7
ggdii
+,!!A%777Aqwwqz2Dag6)::IFI**:yqII I~ jVGHa&@AII~r@   )r7   r8   r9   r<   rJ   rZ   r[   r   r   rX   r\   r]   s   @rA   r   r      s|    

 

3 

88 ! rxx 	
 "((# 
rxx!	"r@   r   c            	            e Zd Zdedef fdZ	 	 d	dej                  deej                     dee	   dej                  fdZ
 xZS )
KimiDeltaAttentionrD   	layer_idxc           	      L   t         |           |j                  }|| _        |d   | _        |d   | _        |j                  dd      | _        | j                  | j
                  z  | _        |j                  }t        | j
                        dz  | _        t        j                  || j                  d      | _        t        j                  || j                  d      | _        t        j                  || j                  d      | _        t#        | j                  | j                        | _        t#        | j                  | j                        | _        t#        | j                  | j                        | _        t        j                  || j
                  d      | _        t        j                  | j
                  | j                  d      | _        t        j                  || j                  d      | _        t        j                  || j
                  d      | _        t        j                  | j
                  | j                  d      | _        t5        j6                  t5        j8                  t4        j:                  j=                  dd	| j                  f
            d      | _        t5        j@                  | j                  f      | _!        t        jD                  | j
                  |jF                        | _$        t        j                  | j                  |d      | _%        y )Nr   r   short_conv_kernel_size   r   FrG   r0   g      0@)lowhighri   )r   r	   r   r   )&rI   rJ   r    r   r   r   getconv_kernelprojection_dimr   r=   r   rK   rL   r   k_projv_projr   q_convk_convv_convf_a_projf_b_projb_projg_a_projg_b_projrZ   r   lograndomuniformA_logr   dt_biasr   r   o_normr   )rP   rD   r   cfgrR   rS   s        rA   rJ   zKimiDeltaAttention.__init__  s-   %%"[)J77#;Q?"nnt}}<!!4==)T1
ii(;(;%Hii(;(;%Hii(;(;%H!$"5"5t7G7GH!$"5"5t7G7GH!$"5"5t7G7GH		&$--eD		$--1D1D5QiiUC		&$--eD		$--1D1D5Q^^FF299$$4?P$QR

 xx!4!4 67jjD4E4EFii 3 3V%Hr@   rT   r   r   rU   c                    |j                   \  }}}|j                  }||\  }}	}
}|j                  }n
d }d }	d }
d }d }|7t        j                  || j
                  dz
  | j                  f|      }|}|}	|}
| j                  | j                  |      |||      \  }}| j                  | j                  |      |	||      \  }}	| j                  | j                  |      |
||      \  }}
|||d<   |	|d<   |
|d<   |j                  ||| j                  | j                        }|j                  ||| j                  | j                        }|j                  ||| j                  | j                        }| j                   }|dz  t        j"                  j%                  |d d      z  }|t        j"                  j%                  |d d      z  }| j'                  | j)                  |            j                  ||| j                  | j                        }| j+                  |      j                  ||| j                        }t-        |||||| j.                  j                  | j                  d      | j0                  j                  | j                  | j                        ||| j2                   
      \  }}|||d<   |j5                  |       | j7                  | j9                  |            j                  ||| j                  | j                        }| j;                  |j                  ||| j                  | j                              t        j<                  |      z  j                  ||d      }| j?                  |      S )	Nr	   ro   r   rj   gư>)r   r   
use_kernelr   re   ) ri   rp   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   fastrms_normr   r   r   r   r   r   trainingadvancer   r   r   r-   r   )rP   rT   r   r   r   Tr   rp   q_statek_statev_state	ssm_stater   sr   r   r   r   r~   r   	inv_scalea_logitsb_logitsr   r   s                            rA   rX   zKimiDeltaAttention.__call__:  s
    ''1a380GWgymmGGGGIG?!T--143F3FGuUAGGG++dkk!ngtWM++dkk!ngtWM++dkk!ngtWME!HE!HE!HNN1a?NN1a?NN1a?JJ	\RWW--at<<((D$77==q!12::q$..$--
 ;;q>))!Q?+JJt~~q1LL  ?==(
Y  E!HMM!}}T]]1-.66q$..$--
 KKAq$..$--HIjj
'!Q
 	 {{3r@   rY   r7   r8   r9   r   r<   rJ   rZ   r[   r   r   rX   r\   r]   s   @rA   r   r     sg    $IY $I3 $IR $(#	G 88G  rxx G  }	G 
 
G r@   r   c            	            e Zd Zdedef fdZ	 	 d	dej                  deej                     dee	   dej                  fdZ
 xZS )
KimiDecoderLayerrD   r   c                    t         |           |j                  d   }|dz   |v | _        | j                  rt	        ||      | _        nt        |      | _        |j                  dkD  r2||j                  k\  r#||j                  z  dk(  rt        |      | _        nt        |      | _        t        j                  |j                  |j                         | _        t        j                  |j                  |j                         | _        y )N
kda_layersr	   r   r   )rI   rJ   r    	is_linearr   	self_attnr   r"   r2   r3   r   mlprC   rK   r   r   r   input_layernormpost_attention_layernorm)rP   rD   r   r  rS   s       rA   rJ   zKimiDecoderLayer.__init__  s    ,,\:
#a-J6>>/i@DN-d3DN q T777D///14$T*DHt}DH!zz$*:*:@Q@QR(*

$"3"3)
%r@   rT   r   r   rU   c                     |d n|}| j                  | j                  |      ||      }||z   }| j                  | j                  |            }||z   S rW   )r  r  r  r  )rP   rT   r   r   
attn_cacheyhzs           rA   rX   zKimiDecoderLayer.__call__  sW     #]T
NN4//2D*EEHHT221561ur@   rY   r   r]   s   @rA   r   r     s^    
Y 
3 
6 $(#	
88
 rxx 
 }	

 

r@   r   c                   p     e Zd Zdef fdZ	 ddej                  deee	      dej                  fdZ
 xZS )KimiLinearModelrD   c                    t         |           t        j                  |j                  |j
                        | _        t        |j                        D cg c]  }t        ||       c}| _
        t        j                  |j
                  |j                        | _        |j                  d   }|d   dz
  | _        t        t!        | j                              D ]  }|dz   |vs|| _         y  y c c}w )Nr   r  r   r	   )rI   rJ   rK   	Embeddingr   r   embed_tokensranger   r   layersr   r   normr    ssm_idxlenattn_idx)rP   rD   ir  rS   s       rA   rJ   zKimiLinearModel.__init__  s    LL$:J:JK:?@V@V:WX:WQ'a0:WXJJt//T5F5FG	,,\:
!!}q(s4;;'(AAj( ! )	 Ys   C1inputsr   rU   c                 V   | j                  |      }|d gt        | j                        z  }t        ||| j                           }t        ||| j                     d      }t        | j                  |      D ]   \  }}|j                  r|n|} ||||      }" | j                  |      S )NT)return_array)r   r   )
r  r  r  r   r  r   r  zipr  r  )	rP   r  r   r  ssm_mask	attn_masklayerlayer_cacher   s	            rA   rX   zKimiLinearModel.__call__  s    
 f%=FS--E"1eDLL&9:)!U4==-APTU	"%dkk5"9E;$8IDad+6A #: yy|r@   rW   )r7   r8   r9   r   rJ   rZ   r[   r   r   r   rX   r\   r]   s   @rA   r  r    sF    
Y 
 &* S	" 
	r@   r  c                        e Zd Zdef fdZ	 ddej                  deee	      dej                  fdZ
ed        Zd Zd	eeej                  f   deeej                  f   fd
Zed        Zed        Z xZS )ModelrD   c                     t         |           || _        |j                  | _        t	        |      | _        |j                  rd | _        y t        j                  |j                  |j                  d      | _        y rF   )rI   rJ   rD   r   r  modelr&   lm_headrK   rL   r   r   )rP   rD   rS   s     rA   rJ   zModel.__init__  sZ    	//$T*
##DL99T%5%5tUSDLr@   r  r   rU   c                     | j                  ||      }| j                  %| j                   j                  j                  |      S | j                  |      S rW   )r$  r%  r  	as_linear)rP   r  r   r   s       rA   rX   zModel.__call__  sH    
 jj'<<::**44S99||C  r@   c                 .    | j                   j                  S rW   )r$  r  )rP   s    rA   r  zModel.layers  s    zz   r@   c                     g }| j                   D ]C  }|j                  r|j                  t        d             +|j                  t	                      E |S )Nr   )size)r  r  appendr   r   )rP   cachesr  s      rA   
make_cachezModel.make_cache  sB    [[Ekq12gi(	 !
 r@   r   c                 l   |j                         D ci c]  \  }}|j                  d      r|| }}}| j                  j                  r|j	                  dd        t        | j                        D ]  \  }}d| }t        |j                  t              r| d}| d}dD ]t  \  }	}
| d|	 d}||v st        | j                  j                        D cg c]  }|j	                  | d	| d
|	 d       }}t        j                  |      || d|
 d<   v dD ])  }| d| d}||v s|j	                  |      || d| d<   + | d}||v r|j	                  |      || d<   | d}||v r|j	                  |      || d<   t        |dd       }t        |t              r| d}dD ]O  \  }}| d
| d}||v s|j	                  |      }|j                   dk(  r|j#                  dd      }||| d
| d<   Q | d}||v r.||   j                   dkD  rt        j$                  ||   d      ||<   | d}| d}||v s| j                  j&                  xs | j                  j(                  }| j                  j*                  xs | j                  j(                  }||z   }| j                  j,                  }| d|v }|j	                  |      }|r| j                  j.                  }|j	                  | d      }|j	                  | d      } |j0                  d   dz  |z  }!||j0                  d   z  }"t        j2                  ||| |!|"      }|j%                  ||d      }t        j4                  |d d d |d d f   j7                  dd             }#t        j4                  |d d |d d d f         }$|rXt        j8                  |#!"      \  }#}%}&t        j8                  |$|!|"      \  }$}'}(|%|| d!<   |&|| d"<   |'|| d#<   |(|| d$<   |#|| d%<   |$|| d&<    |S c c}}w c c}w )'Nz	model.mtpzlm_head.weightzmodel.layers.z.block_sparse_moez.mlp))w1rM   )w2rO   )w3rN   z.experts.0.z.weightz	.experts..z.switch_mlp.)rM   rN   rO   z.shared_experts.z.gate.weightz.gate.e_score_correction_biasz.e_score_correction_biasr  z
.self_attn))q_conv1dr   )k_conv1dr   )v_conv1dr   r   rj   r	   z.conv.weightz.dt_bias)re   z.kv_b_proj.weightz.kv_b_proj.scalesz.kv_b_proj.biasesre       )bits
group_sizerm   z.embed_q.scalesz.embed_q.biasesz.unembed_out.scalesz.unembed_out.biasesz.embed_q.weightz.unembed_out.weight)items
startswithrD   r&   pop	enumerater  
isinstancer  r   r  r"   rZ   stackgetattrr   ndimmoveaxisr   r'   r   r)   r   r$   ri   
dequantizer   r   quantize))rP   r   r~   r   r   r  prefix
src_prefix
dst_prefixsrcdstkeyr  stackednamesrc_keygate_keybias_keyattnattn_prefixsrc_namedst_namewdt_keykv_b_keyqk_nopev_headr   r   	quantizeddimsscalesbiasesr7  r8  wkwvwk_swk_bwv_swv_bs)                                            rA   sanitizezModel.sanitize  s   $+MMOUODAq1<<;T1a4OU99((KK($/ )$++ 6Iu$YK0F%))]3 &x'89
 &xt_
!HC
 (LC5@Cg~ &+499+@+@%A#%A $KK:,is!C5(PQ%A   # LN88#L:,l3%w GH! BD!+,<TF'JG')#KK0  :,.>tfG LM B )\6w&;B;;x;PGzl,78(\)FGw&GN{{ HGzl*BCD 5+t4D$ 23!'
3+&Hh
 "-Qxj@G')#KK066Q; !

1a 0AKL;-q
, GH+ (=1W$v++a/*,**WV_e*L#HJ/K%&78H7"))44J		8J8J--C1C1C"V+ II99	*m+<=H	KK)9911D$[[K=8I)JKF$[[K=8I)JKFGGBK",5D!%b)9!9J66A IIi26]]1Q!^#4#=#=b"#EF]]1Q!^#45%'[[$:%VNBd%'[[$:%VNBd?CG{m?;<?CG{m?;<CGG{m+>?@CGG{m+>?@;=;-78?A;-':;<w !7z E V$#s   P+P+!P1c                     dt         fd}|S )Npathc                 T    d| v ry| j                  d      s| j                  d      ryy)Nr   Fr   r   Tendswith)rd  s    rA   	predicatez'Model.cast_predicate.<locals>.predicateS  s*    (D0}}W%y)Ar@   )r:   rP   rh  s     rA   cast_predicatezModel.cast_predicateQ  s    	C 	 r@   c                     d }|S )Nc                 0    | j                  d      rdddS y)Nzmlp.gate@      )r8  r7  Trf  )rd  r   s     rA   rh  z(Model.quant_predicate.<locals>.predicate^  s    }}Z(&(!44r@   r?   ri  s     rA   quant_predicatezModel.quant_predicate\  s    	
 r@   rW   )r7   r8   r9   r   rJ   rZ   r[   r   r   r   rX   propertyr  r-  r   r:   rb  rj  ro  r\   r]   s   @rA   r"  r"    s    TY T &*!! S	"! 
	! ! !cS"((] 3 cS"((]8K cJ    r@   r"  ).dataclassesr   typingr   r   r   r   r   mlx.corecorerZ   mlx.nnrK   activationsr
   baser   r   r   r   r   r   r   gated_deltar   mlar   switch_layersr   r   ModulerC   compiler[   r<   r=   r>   r:   r   r   r   r   r   r   r  r"  r?   r@   rA   <module>r}     si   " 3 3     ( +  $   DJbii J$ )088)0
288
)0 )0 	)0
 )0 !)0 )0 )0 288RXX)0 )0X#BII #LJ#ryy J#Z%")) %Pn  n b#ryy #Lbii @YBII Yr@   