Ë
    îÿæiÉC  ã                   óž  — 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 d dlmZ d dlmZmZmZ ddlmZ ddlmZmZmZ dd	lmZmZ dd
lmZ ddlmZmZ  eej@                  d¬«      d„ «       Z! G d„ dejD                  «      Z#e G d„ de«      «       Z$ G d„ dejD                  «      Z% G d„ dejD                  «      Z&ej@                  d„ «       Z' G d„ dejD                  «      Z( G d„ dejD                  «      Z) G d„ dejD                  «      Z* G d„ dejD                  «      Z+ G d „ d!ejD                  «      Z, G d"„ d#ejD                  «      Z-y)$é    )Ú	dataclass)Úpartial)ÚAnyÚDictÚListÚOptionalN)Úshard_inplaceÚshard_linearÚsum_gradientsé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚKVCacheÚRotatingKVCache)Úinitialize_rope)ÚSwiGLUÚ	SwitchGLUT)Ú	shapelessc                 ó”   — t        j                  t        j                  |«      d |¬«      }t        j                  | | |¬«      } || z  S )N)Úa_minÚa_max)ÚmxÚclipÚnnÚsilu)ÚxÚgateÚlimits      új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/step3p5.pyÚclamped_swiglur"      s9   € ä�7‰7”2—7‘7˜4“=¨°EÔ:€DÜ
�‰�˜%˜ uÔ-€AØ�!‰8€Oó    c                   ót   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dej                  fd„Zˆ xZS )ÚClampedSwiGLUr    c                 ó0   •— t         ‰| �  «        || _        y ©N)ÚsuperÚ__init__r    )Úselfr    Ú	__class__s     €r!   r)   zClampedSwiGLU.__init__   s   ø€ Ü‰ÑÔØˆ�
r#   r   r   Úreturnc                 ó0   — t        ||| j                  «      S r'   )r"   r    )r*   r   r   s      r!   Ú__call__zClampedSwiGLU.__call__   s   € Ü˜a  t§z¡zÓ2Ð2r#   )	Ú__name__Ú
__module__Ú__qualname__Úfloatr)   r   Úarrayr.   Ú__classcell__©r+   s   @r!   r%   r%      s5   ø„ ð˜eõ ð3˜"Ÿ(™(ð 3¨"¯(©(ð 3°r·x±x÷ 3r#   r%   c                   óÄ  — 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<   d	Zeed
<   dZeed<   dZ	e
e   ed<   dZeed<   dZeed<   dZe
ee      ed<   dZe
ee      ed<   dZe
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   ed <   d!Zeed"<   dZeed#<   dZe
ee      ed$<   dZe
ee      ed%<   d&Zeed'<   y)(Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚ
vocab_sizeÚnum_attention_headsÚnum_attention_groupsÚhead_dimÚintermediate_sizeçñhãˆµøä>Úrms_norm_epsg     ˆÃ@Ú
rope_thetaNÚrope_scalingi   Úmax_position_embeddingsi   Úsliding_windowÚlayer_typesÚyarn_only_typesÚpartial_rotary_factorsÚattention_other_settingTÚuse_head_wise_attn_gatei   Úmoe_num_expertsé   Ú	moe_top_ki   Úmoe_intermediate_sizeÚshare_expert_dimÚmoe_layers_enumg      @Úmoe_router_scaling_factorÚnorm_expert_weightÚswiglu_limitsÚswiglu_limits_sharedFÚtie_word_embeddings)r/   r0   r1   ÚstrÚ__annotations__ÚintrA   r2   rB   rC   r   r   rD   rE   rF   r   rG   rH   rI   rJ   ÚboolrK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   © r#   r!   r7   r7   "   s:  … àƒOØÓØÓØƒOØÓØÓØƒMØÓØ€L�%ÓØ€J�ÓØ#'€L�(˜4‘.Ó'Ø#)Ð˜SÓ)Ø€N�CÓØ'+€K�˜$˜s™)Ñ$Ó+Ø+/€O�X˜d 3™iÑ(Ó/Ø48Ð˜H T¨%¡[Ñ1Ó8Ø.2Ð˜X d™^Ó2Ø$(Ð˜TÓ(Ø€O�SÓØ€IˆsÓØ!%Ð˜3Ó%Ø Ð�cÓ Ø%)€O�X˜c‘]Ó)Ø'*Ð˜uÓ*Ø#Ð˜Ó#Ø+/€M�8˜D ™KÑ(Ó/Ø26Ð˜( 4¨¡;Ñ/Ó6Ø %Ð˜Ô%r#   r7   c                   ób   ‡ — e Zd Zddedefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚZeroCenteredRMSNormÚdimsÚepsc                 óf   •— t         ‰| �  «        t        j                  |f«      | _        || _        y r'   )r(   r)   r   ÚonesÚweightr^   )r*   r]   r^   r+   s      €r!   r)   zZeroCenteredRMSNorm.__init__C   s'   ø€ Ü‰ÑÔÜ—g‘g˜t˜gÓ&ˆŒØˆ�r#   r   r,   c                 ól   — t         j                  j                  || j                  | j                  «      S r'   )r   ÚfastÚrms_normra   r^   ©r*   r   s     r!   r.   zZeroCenteredRMSNorm.__call__H   s#   € Ü�w‰w×Ñ  4§;¡;°·±Ó9Ð9r#   )r@   )
r/   r0   r1   rX   r2   r)   r   r3   r.   r4   r5   s   @r!   r\   r\   B   s1   ø„ ñ˜Sð  uõ ð
:˜"Ÿ(™(ð : r§x¡x÷ :r#   r\   c                   óh   ‡ — e Zd Z	 ddededefˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )	Ú
Step3p5MLPÚargsr?   Úswiglu_limitc                 ó¤  •— t         ‰| �  «        |j                  | _        || _        t	        j
                  | j                  | j                  d¬«      | _        t	        j
                  | j                  | j                  d¬«      | _        t	        j
                  | j                  | j                  d¬«      | _        |r|dkD  r|| _	        y d | _	        y )NF©Úbiasr   )
r(   r)   r9   r?   r   ÚLinearÚ	gate_projÚup_projÚ	down_projr    )r*   rh   r?   ri   r+   s       €r!   r)   zStep3p5MLP.__init__M   sŸ   ø€ ô 	‰ÑÔØ×+Ñ+ˆÔØ!2ˆÔäŸ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆŒá%1°lÀQÒ6F�\ˆ�
ÈDˆ�
r#   r   r,   c                 ó  — | j                   �D| j                  t        | j                  |«      | j	                  |«      | j                   «      «      S | j                  t        | j	                  |«      | j                  |«      «      «      S r'   )r    rp   r"   ro   rn   r   re   s     r!   r.   zStep3p5MLP.__call__Z   sg   € Ø�:‰:Ð!Ø—>‘>Ü˜tŸ|™|¨A›°·±¸qÓ0AÀ4Ç:Á:ÓNóð ð �~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr#   )r   )r/   r0   r1   r7   rX   r2   r)   r   r3   r.   r4   r5   s   @r!   rg   rg   L   sE   ø„ àMNñQØðQØ25ðQØEJõQðJ˜"Ÿ(™(ð J r§x¡x÷ Jr#   rg   c                 ó4  — t        j                  | j                  t         j                  «      «      }||z   }t        j                  | |dz
  d¬«      dd |…f   }t        j
                  ||d¬«      }|r|t        j                  |dd¬«      dz   z  }|||z  fS )	Nr   éÿÿÿÿ)ÚkthÚaxis.©ru   T)ru   Úkeepdimsg#B’¡œÇ;)r   ÚsigmoidÚastypeÚfloat32ÚargpartitionÚtake_along_axisÚsum)	ÚgatesÚrouter_biasÚtop_kÚrouted_scaling_factorÚnorm_topk_probÚscoresÚcorrected_scoresÚtopk_indicesÚtopk_weightss	            r!   Úmoe_gate_selectr‡   b   s�   € ä�Z‰Z˜Ÿ™¤R§Z¡ZÓ0Ó1€FØ Ñ+Ðä—?‘?Ð$4Ð#4¸%À!¹)È"ÔMØˆVˆeˆVˆñ€Lô ×%Ñ% f¨lÀÔD€LáØ#Ü�F‰F�< b°4Ô8¸5Ñ@ñ
ˆð ˜Ð(=Ñ=Ð=Ð=r#   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚStep3p5MoEGaterh   c                 óV  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        t        j                  |j                  | j
                  d¬«      | _        t        j                  | j
                  f«      | _        y ©NFrk   )r(   r)   rM   r€   rK   Ún_routed_expertsrQ   r�   rR   r‚   r   rm   r9   r   r   Úzerosr   ©r*   rh   r+   s     €r!   r)   zStep3p5MoEGate.__init__u   s}   ø€ Ü‰ÑÔØ—^‘^ˆŒ
Ø $× 4Ñ 4ˆÔØ%)×%CÑ%CˆÔ"Ø"×5Ñ5ˆÔä—I‘I˜d×.Ñ.°×0EÑ0EÈEÔRˆŒ	ÜŸ8™8 T×%:Ñ%:Ð$<Ó=ˆÕr#   r   c                 óŽ   — t        | j                  |«      | j                  | j                  | j                  | j
                  «      S r'   )r‡   r   r   r€   r�   r‚   re   s     r!   r.   zStep3p5MoEGate.__call__   s<   € ÜØ�I‰I�a‹LØ×ÑØ�J‰JØ×&Ñ&Ø×Ñó
ð 	
r#   )	r/   r0   r1   r7   r)   r   r3   r.   r4   r5   s   @r!   r‰   r‰   t   s   ø„ ð>˜Yõ >ð
˜"Ÿ(™(÷ 
r#   r‰   c                   ó`   ‡ — e Zd Zdedefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )Ú
Step3p5MoErh   Ú	layer_idxc                 ó  •— t         ‰| �  «        d}|j                  r+|t        |j                  «      k  r|j                  |   xs d}d}|j                  r+|t        |j                  «      k  r|j                  |   xs d}t        |«      | _        |dkD  rt        |«      n	t        «       }t        |j                  |j                  |j                  |¬«      | _        t        ||j                  |¬«      | _        d | _        y )Nr   )Ú
activation©r?   ri   )r(   r)   rS   ÚlenrT   r‰   r   r%   r   r   r9   rN   rK   Ú
switch_mlprg   rO   Úshare_expertÚsharding_group)r*   rh   r’   ri   Úswiglu_limit_sharedr”   r+   s         €r!   r)   zStep3p5MoE.__init__Š   sí   ø€ Ü‰ÑÔàˆØ×Ò )¬c°$×2DÑ2DÓ.EÒ"EØ×-Ñ-¨iÑ8Ò=¸AˆLàÐØ×$Ò$¨´S¸×9RÑ9RÓ5SÒ)SØ"&×";Ñ";¸IÑ"FÒ"KÈ!Ðä" 4Ó(ˆŒ	à4@À1Ò4D”] <Ô0Ì&Ë(ˆ
Ü#Ø×ÑØ×&Ñ&Ø× Ñ Ø!ô	
ˆŒô 'ØØ"×3Ñ3Ø,ô
ˆÔð #ˆÕr#   r   r,   c                 ó˜  — | j                   � t        | j                   «      |«      }| j                  |«      \  }}| j                  ||«      }||d   z  j	                  d¬«      j                  |j                  «      }|| j                  |«      z   }| j                   �+t        j                  j                  || j                   ¬«      }|S )N©.Néþÿÿÿrv   ©Úgroup)r™   r   r   r—   r}   ry   Údtyper˜   r   ÚdistributedÚall_sum)r*   r   r…   r†   Úrouted_outputÚys         r!   r.   zStep3p5MoE.__call__§   s»   € Ø×ÑÐ*Ø2”˜d×1Ñ1Ó2°1Ó5ˆAà%)§Y¡Y¨q£\Ñ"ˆ�lØŸ™¨¨<Ó8ˆà˜\¨)Ñ4Ñ4ß‰S�bˆS‹\ß‰V�M×'Ñ'Ó(ð 	ð
 ˜D×-Ñ-¨aÓ0Ñ0ˆà×ÑÐ*Ü—‘×&Ñ& q°×0CÑ0CÐ&ÓDˆAàˆr#   )
r/   r0   r1   r7   rX   r)   r   r3   r.   r4   r5   s   @r!   r‘   r‘   ‰   s1   ø„ ð#˜Yð #°3õ #ð:˜"Ÿ(™(ð  r§x¡x÷ 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 )
ÚStep3p5Attentionrh   r’   c                 óÚ  •— t         ‰| �  «        |j                  }|j                  xs g }|r||   dk(  | _        n|dz  dk(  | _        | j                  r5|j
                  r)|j
                  d   | _        |j
                  d   | _        n"|j                  | _        |j                  | _        |j                  | _
        | j                  dz  | _        t        j                  || j                  | j                  z  d¬«      | _        t        j                  || j                  | j                  z  d¬«      | _        t        j                  || j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  z  |d¬«      | _        t%        | j                  |j&                  ¬	«      | _        t%        | j                  |j&                  ¬	«      | _        |j,                  | _        | j,                  r't        j                  || j                  d¬«      | _        |j0                  }t3        |t4        «      r||   }d
}|j6                  r'|t9        |j6                  «      k  r|j6                  |   }t;        | j                  |z  «      }|j<                  xs g }|r||   nd}	|r|	|vrd }
n|j>                  }
tA        ||d|
|jB                  ¬«      | _"        y )NÚsliding_attentioné   r   r<   r=   g      à¿Frk   ©r^   g      ð?Úfull_attention)r]   ÚbaseÚtraditionalÚscaling_configrD   )#r(   r)   r9   rF   Ú
is_slidingrI   Ú	num_headsÚnum_kv_headsr<   r=   r>   Úscaler   rm   Úq_projÚk_projÚv_projÚo_projr\   rA   Úq_normÚk_normrJ   Úg_projrB   Ú
isinstanceÚlistrH   r–   rX   rG   rC   r   rD   Úrope)r*   rh   r’   ÚdimrF   rB   Úpartial_rotary_factorÚ	rope_dimsrG   Ú
layer_typerC   r+   s              €r!   r)   zStep3p5Attention.__init__»   s^  ø€ Ü‰ÑÔØ×Ñˆà×&Ñ&Ò,¨"ˆÙØ)¨)Ñ4Ð8KÑKˆD�Oà'¨!™m¨qÑ0ˆDŒOà�?Š?˜t×;Ò;Ø!×9Ñ9Ð:OÑPˆDŒNØ $× <Ñ <Ð=SÑ TˆDÕà!×5Ñ5ˆDŒNØ $× 9Ñ 9ˆDÔàŸ™ˆŒØ—]‘] DÑ(ˆŒ
ä—i‘i  T§^¡^°d·m±mÑ%CÈ%ÔPˆŒÜ—i‘i  T×%6Ñ%6¸¿¹Ñ%FÈUÔSˆŒÜ—i‘i  T×%6Ñ%6¸¿¹Ñ%FÈUÔSˆŒÜ—i‘i §¡°·±Ñ >ÀÈ%ÔPˆŒä)¨$¯-©-¸T×=NÑ=NÔOˆŒÜ)¨$¯-©-¸T×=NÑ=NÔOˆŒà'+×'CÑ'CˆÔ$Ø×'Ò'ÜŸ)™) C¨¯©¸eÔDˆDŒKà—_‘_ˆ
Ü�j¤$Ô'Ø# IÑ.ˆJà #ÐØ×&Ò&¨9´s¸4×;VÑ;VÓ7WÒ+WØ$(×$?Ñ$?À	Ñ$JÐ!ä˜Ÿ™Ð(=Ñ=Ó>ˆ	à×.Ñ.Ò4°"ˆÙ/:�[ Ò+Ð@Pˆ
Ù˜z°Ñ@Ø‰Là×,Ñ,ˆLä#ØØØØ'Ø$(×$@Ñ$@ô
ˆ�	r#   r   ÚmaskÚcacher,   c                 óÚ  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}| j	                  |j                  ||| j                  d«      «      j                  dddd«      }| j                  |j                  ||| j                  d«      «      j                  dddd«      }|	j                  ||| j                  d«      j                  dddd«      }	|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||	«      \  }}	n"| j                  |«      }| j                  |«      }t        |||	|| j                  |¬«      }
|
j                  dddd«      }
| j                  r*|
t!        j"                  | j%                  |«      «      d   z  }
| j'                  |
j                  ||d«      «      S )	Nrs   r   r©   r   é   )Úoffset)rÂ   r²   rÁ   rœ   )Úshaper³   r´   rµ   r·   Úreshaper°   Ú	transposer¸   r±   r¼   rÅ   Úupdate_and_fetchr   r²   rJ   r   rx   r¹   r¶   )r*   r   rÁ   rÂ   ÚBÚLÚ_ÚqueriesÚkeysÚvaluesÚoutputs              r!   r.   zStep3p5Attention.__call__ô   s¯  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—+‘+˜gŸo™o¨a°°D·N±NÀBÓGÓH×RÑRØˆq�!�Qó
ˆð �{‰{˜4Ÿ<™<¨¨1¨d×.?Ñ.?ÀÓDÓE×OÑOØˆq�!�Qó
ˆð —‘  1 d×&7Ñ&7¸Ó<×FÑFÀqÈ!ÈQÐPQÓRˆàÐØ—i‘i °·±�iÓ=ˆGØ—9‘9˜T¨%¯,©,�9Ó7ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—i‘i Ó(ˆGØ—9‘9˜T“?ˆDä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-ˆà×'Ò'ØœbŸj™j¨¯©°Q«Ó8¸ÑCÑCˆFà�{‰{˜6Ÿ>™>¨!¨Q°Ó3Ó4Ð4r#   ©NN©r/   r0   r1   r7   rX   r)   r   r3   r   r   r.   r4   r5   s   @r!   r¦   r¦   º   s_   ø„ ð7
˜Yð 7
°3õ 7
ðx $(Ø#ñ	"5à�8‰8ð"5ð �r—x‘xÑ ð"5ð ˜‰}ð	"5ð
 
�‰÷"5r#   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 )
ÚStep3p5DecoderLayerrh   r’   c                 ó   •— t         ‰| �  «        t        ||«      | _        | j                  j                  | _        t        «       }|j                  r@|j                  j                  «       j                  d«      D �ch c]  }t        |«      ’Œ }}nt        t        d|j                  «      «      }||v | _        | j                  rt        ||«      | _        nVd}|j                  r+|t!        |j                  «      k  r|j                  |   xs d}t#        ||j$                  |¬«      | _        t'        |j(                  |j*                  ¬«      | _        t'        |j(                  |j*                  ¬«      | _        y c c}w )NÚ,r   r   r•   rª   )r(   r)   r¦   Ú	self_attnr¯   ÚsetrP   ÚstripÚsplitrX   Úranger:   Úis_moe_layerr‘   ÚmlprT   r–   rg   r?   r\   r9   rA   Úinput_layernormÚpost_attention_layernorm)r*   rh   r’   Úmoe_layers_idxÚiri   r+   s         €r!   r)   zStep3p5DecoderLayer.__init__  sC  ø€ Ü‰ÑÔä)¨$°	Ó:ˆŒØŸ.™.×3Ñ3ˆŒä›ˆØ×ÒØ.2×.BÑ.B×.HÑ.HÓ.J×.PÑ.PÐQTÔ.UÓVÑ.U¨œc !�fÐ.UˆNÑVä ¤ q¨$×*@Ñ*@Ó!AÓBˆNà%¨Ð7ˆÔà×ÒÜ! $¨	Ó2ˆD�HàˆLØ×(Ò(¨Y¼¸T×=VÑ=VÓ9WÒ-WØ#×8Ñ8¸ÑCÒHÀq�Ü!ØØ"&×"8Ñ"8Ø)ôˆDŒHô  3Ø×Ñ $×"3Ñ"3ô 
ˆÔô )<Ø×Ñ $×"3Ñ"3ô)
ˆÕ%ùò+ Ws   Á=E;r   rÁ   rÂ   r,   c                 óœ   — | j                  | j                  |«      ||¬«      }||z   }| j                  | j                  |«      «      }||z   S )N©rÁ   rÂ   )r×   rÞ   rÝ   rß   )r*   r   rÁ   rÂ   ÚrÚhs         r!   r.   zStep3p5DecoderLayer.__call__;  sN   € ð �N‰N˜4×/Ñ/°Ó2¸ÀUˆNÓKˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�1‰uˆr#   rÑ   rÒ   r5   s   @r!   rÔ   rÔ     s_   ø„ ð
˜Yð 
°3õ 
ðH $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	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 )ÚStep3p5Modelrh   c                 ó8  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  |j                  |j                  «      | _	        t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}| _        t        |j                  |j                  ¬«      | _        t!        d„ t#        | j                  «      D «       d «      | _        t!        d„ t#        | j                  «      D «       d «      | _        y c c}w )Nrª   c              3   ó@   K  — | ]  \  }}|j                   sŒ|–— Œ y ­wr'   ©r¯   ©Ú.0rá   Úls      r!   Ú	<genexpr>z(Step3p5Model.__init__.<locals>.<genexpr>V  s   è ø€ ÐBÑ1‘4�1�a°Q·\³\ŒQÑ1ùó   ‚—c              3   ó@   K  — | ]  \  }}|j                   rŒ|–— Œ y ­wr'   rê   rë   s      r!   rî   z(Step3p5Model.__init__.<locals>.<genexpr>Y  s   è ø€ ÐFÑ1‘4�1�a¸¿»ŒQÑ1ùrï   )r(   r)   rh   r;   r:   Ú
num_layersr   Ú	Embeddingr9   Úembed_tokensrÛ   rÔ   Úlayersr\   rA   ÚnormÚnextÚ	enumerateÚ_swa_idxÚ	_full_idx)r*   rh   r’   r+   s      €r!   r)   zStep3p5Model.__init__H  sÞ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ×0Ñ0ˆŒäŸL™L¨¯©¸$×:JÑ:JÓKˆÔô # 4×#9Ñ#9Ô:ó
á:�	ô    iÕ0Ø:ñ
ˆŒô (¨×(8Ñ(8¸d×>OÑ>OÔPˆŒ	äÙBœ9 T§[¡[Ô1ÓBÀDó
ˆŒô ÙFœ9 T§[¡[Ô1ÓFÈó
ˆ�ùò
s   Á?Dr   rÂ   r,   c                 ó¤  — | j                  |«      }|€d g| j                  z  }d }d }| j                  �t        ||| j                     «      }| j                  �/t        ||| j                     | j
                  j                  ¬«      }t        | j                  |«      D ]   \  }}|j                  r|n|} ||||¬«      }Œ" | j                  |«      S )N)Úwindow_sizerã   )ró   rñ   rù   r   rø   rh   rE   Úziprô   r¯   rõ   )	r*   r   rÂ   rå   Ú	full_maskÚswa_maskÚlayerÚcrÁ   s	            r!   r.   zStep3p5Model.__call__\  sÈ   € ð
 ×Ñ˜aÓ ˆàˆ=Ø�F˜TŸ_™_Ñ,ˆEàˆ	Øˆà�>‰>Ð%Ü-¨a°°t·~±~Ñ1FÓGˆIà�=‰=Ð$Ü,Ø�5˜Ÿ™Ñ'°T·Y±Y×5MÑ5MôˆHô ˜DŸK™K¨Ö/‰HˆE�1Ø$×/Ò/‘8°YˆDÙ�a˜d¨!Ô,‰Að 0ð �y‰y˜‹|Ðr#   r'   )r/   r0   r1   r7   r)   r   r3   r   r   r   r.   r4   r5   s   @r!   rç   rç   G  sF   ø„ ð
˜Yõ 
ð. &*ñà�8‰8ðð ˜˜S™	Ñ"ðð 
�‰÷	r#   rç   c                   óÐ   ‡ — e Zd Zdefˆ fd„Z	 ddej                  deee	      fd„Z
ed„ «       Zd„ Zd„ Zed	„ «       Zed
„ «       Zddeej"                  j$                     fd„Zˆ xZS )ÚModelrh   c                 óÔ   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        y r‹   )r(   r)   rh   r8   rç   Úmodelr   rm   r9   r;   Úlm_headrŽ   s     €r!   r)   zModel.__init__y  sJ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ! $Ó'ˆŒ
Ü—y‘y ×!1Ñ!1°4·?±?ÈÔOˆ�r#   ÚinputsrÂ   c                 óH   — | j                  ||«      }| j                  |«      S r'   )r  r  )r*   r  rÂ   Úouts       r!   r.   zModel.__call__€  s#   € ð
 �j‰j˜ Ó'ˆØ�|‰|˜CÓ Ð r#   c                 ó.   — | j                   j                  S r'   )r  rô   )r*   s    r!   rô   zModel.layersˆ  s   € à�z‰z× Ñ Ð r#   c                 ó¨   — | j                   D �cg c]8  }|j                  r t        | j                  j                  ¬«      n	t        «       ‘Œ: c}S c c}w )N)Úmax_size)rô   r¯   r   rh   rE   r   )r*   rÿ   s     r!   Ú
make_cachezModel.make_cacheŒ  sU   € ð Ÿšó
ñ %�ð ×#Ò#ô  ¨¯©×)AÑ)AÕBä“Yñð %ñ
ð 	
ùò 
s   �=Ac                 ó¾  ‡	— g d¢Š	t        ˆ	fd„|D «       «      }i }|j                  «       D ]®  \  }}d|v rŒd|v rX|j                  d«      }t        |«      dkD  r9|d   j	                  «       r&t        |d   «      | j                  j                  k\  rŒg‰	D ]"  \  }}||v sŒ||vsŒ|j                  ||«      } n |r|j                  d«      r	d|v r|d	z   }|||<   Œ° |S )
N))z.moe.gate_proj.z.mlp.switch_mlp.gate_proj.)z.moe.up_proj.z.mlp.switch_mlp.up_proj.)z.moe.down_proj.z.mlp.switch_mlp.down_proj.)z
.moe.gate.z.mlp.gate.gate.)z.moe.router_biasz.mlp.gate.router_bias)z.share_expert.z.mlp.share_expert.c              3   óF   •K  — | ]  }‰D ]  \  }}||v xr ||v–— Œ Œ y ­wr'   rZ   )rì   ÚkÚsrcÚdstÚ
remappingss       €r!   rî   z!Model.sanitize.<locals>.<genexpr>   s2   øè ø€ ð 
Ù/6¨!Ãz¹8¸3ÀˆC�1ˆHÒ%˜ A˜Ó%ÀzÐ%©wùs   ƒ!z.mtpzmodel.layers.Ú.r©   z.weightrõ   r   )
ÚanyÚitemsrÚ   r–   ÚisdigitrX   rh   r:   ÚreplaceÚendswith)
r*   ÚweightsÚ
is_vanillaÚnew_weightsr  ÚvÚpartsr  r  r  s
            @r!   ÚsanitizezModel.sanitize–  sò   ø€ ò
ˆ
ô ó 
Ù/6ó
ó 
ˆ
ð ˆØ—M‘M–O‰DˆAˆqØ˜‰{ØØ !Ñ#ØŸ™ ›�Ü�u“: ’> e¨A¡h×&6Ñ&6Ô&8Ü˜5 ™8“}¨¯	©	×(CÑ(CÒCØ ã&‘��SØ˜!’8 ¨1¢ØŸ	™	 # sÓ+�AÙð 'ñ
 ˜aŸj™j¨Ô3¸À!¹Ø˜‘E�àˆK˜ŠNð# $ð& Ðr#   c                 ó   — d„ }|S )Nc                 ó
   — d| vS )Nr   rZ   )r  s    r!   Ú	predicatez'Model.cast_predicate.<locals>.predicate¼  s   € Ø ¨Ð)Ð)r#   rZ   ©r*   r!  s     r!   Úcast_predicatezModel.cast_predicateº  s   € ò	*ð Ðr#   c                 ó   — d„ }|S )Nc                 ó   — d| v rdddœS y)Nzmlp.gate.gateé@   rL   )Ú
group_sizeÚbitsTrZ   )ÚpathrÌ   s     r!   r!  z(Model.quant_predicate.<locals>.predicateÃ  s   € Ø $Ñ&Ø&(°!Ñ4Ð4Ør#   rZ   r"  s     r!   Úquant_predicatezModel.quant_predicateÁ  s   € ò	ð
 Ðr#   rŸ   c                 óÄ  — |xs t         j                  j                  «       }|j                  «       }| j                  j
                  D �]  }t        |j                  j                  d|¬«      |j                  _        t        |j                  j                  d|¬«      |j                  _	        t        |j                  j                  d|¬«      |j                  _
        t        |j                  j                  d|¬«      |j                  _        |j                  xj                  |z  c_        |j                  xj                  |z  c_        |j                  j                  r1t        |j                  j                  d|¬«      |j                  _        t!        |j"                  t$        «      r•t        |j"                  j&                  d|¬«      |j"                  _        t        |j"                  j(                  d|¬«      |j"                  _        t        |j"                  j*                  d|¬«      |j"                  _        �Œü||j"                  _        t/        |j"                  j0                  j&                  d|¬«       t/        |j"                  j0                  j(                  d|¬«       t/        |j"                  j0                  j*                  d|¬«       t/        |j"                  j2                  j&                  d|¬«       t/        |j"                  j2                  j(                  d|¬«       t/        |j"                  j2                  j*                  d|¬«       �Œ y )Nzall-to-shardedrž   zsharded-to-all)r   r¡   ÚinitÚsizer  rô   r
   r×   r³   r´   rµ   r¶   r°   r±   rJ   r¹   rº   rÝ   rg   rn   ro   rp   r™   r	   r˜   r—   )r*   rŸ   ÚNrÿ   s       r!   ÚshardzModel.shardÊ  s|  € ØÒ.œŸ™×,Ñ,Ó.ˆØ�J‰J‹Lˆà—Z‘Z×&Õ&ˆEÜ%1Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð(8Àô&ˆE�O‰OÔ"ð �O‰O×%Ò%¨!Ñ+Õ%Ø�O‰O×(Ò(¨QÑ.Õ(à�‰×6Ò6Ü)5Ø—O‘O×*Ñ*Ð,<ÀEô*�—‘Ô&ô ˜%Ÿ)™)¤ZÔ0Ü&2Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ô#ô %1Ø—I‘I×%Ñ%Ð'7¸uô%�—	‘	Ô!ô '3Ø—I‘I×'Ñ'Ð)9Àô'�—	‘	Ö#ð ,1�—	‘	Ô(ÜØ—I‘I×*Ñ*×4Ñ4Ð6FÈeõô Ø—I‘I×*Ñ*×2Ñ2Ð4DÈEõô Ø—I‘I×*Ñ*×4Ñ4Ð6FÈeõô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈEõô Ø—I‘I×(Ñ(×0Ñ0Ð2BÈ%õô Ø—I‘I×(Ñ(×2Ñ2Ð4DÈE÷ña 'r#   r'   )r/   r0   r1   r7   r)   r   r3   r   r   r   r.   Úpropertyrô   r  r  r#  r*  r¡   ÚGroupr/  r4   r5   s   @r!   r  r  x  sœ   ø„ ðP˜Yõ Pð &*ñ!à—‘ð!ð ˜˜S™	Ñ"ó!ð ñ!ó ð!ò
ò"ðH ñó ðð ñó ðñ6˜8 B§N¡N×$8Ñ$8Ñ9÷ 6r#   r  ).Údataclassesr   Ú	functoolsr   Útypingr   r   r   r   Úmlx.coreÚcorer   Úmlx.nnr   Úmlx.nn.layers.distributedr	   r
   r   Úactivationsr   r¬   r   r   r   rÂ   r   r   Ú
rope_utilsr   Úswitch_layersr   r   Úcompiler"   ÚModuler%   r7   r\   rg   r‡   r‰   r‘   r¦   rÔ   rç   r  rZ   r#   r!   Ú<module>r>     s  ðõ "Ý ß ,Ó ,å Ý ß PÑ På ß TÑ Tß +Ý 'ß ,ñ 	ˆ�‰˜tÔ$ñó %ðô3�B—I‘Iô 3ð ô&�ó &ó ð&ô>:˜"Ÿ)™)ô :ôJ�—‘ô Jð, ‡�ñ>ó ð>ô"
�R—Y‘Yô 
ô*.�—‘ô .ôb\5�r—y‘yô \5ô~+˜"Ÿ)™)ô +ô\.�2—9‘9ô .ôbHˆB�I‰Iõ Hr#   