Ë
    îÿæi¥  ã                   óR  — 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 e G d„ de«      «       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ÚOptionalÚUnionNé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Ú	SwitchGLUc                   óî   — e Zd ZU 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<   dZeeeeeef   f      ed<   dZeed<   d„ Zy)Ú	ModelArgsÚ
model_typei }  Ú
vocab_sizei   Úhidden_sizei 8  Úintermediate_sizeé    Únum_hidden_layersÚnum_attention_headsé   Únum_experts_per_toké   Únum_key_value_headsÚnum_local_expertsgñhãˆµøä>Úrms_norm_epsg    €„.AÚ
rope_thetaFÚrope_traditionalNÚrope_scalingÚtie_word_embeddingsc                 ó@   — | j                   €| j                  | _         y y ©N)r   r   ©Úselfs    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/mixtral.pyÚ__post_init__zModelArgs.__post_init__   s!   € Ø×#Ñ#Ð+Ø'+×'?Ñ'?ˆDÕ$ð ,ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr   r   r   r   r   r   r   r   Úfloatr   r   Úboolr   r   r   r   r   r%   © r&   r$   r   r      s¯   … àƒOØ€J�ÓØ€K�ÓØ"Ð�sÓ"ØÐ�sÓØ!Ð˜Ó!Ø Ð˜Ó Ø Ð˜Ó ØÐ�sÓØ€L�%ÓØ€J�ÓØ"Ð�dÓ"Ø;?€L�(˜4  U¨5°#¨:Ñ%6Ð 6Ñ7Ñ8Ó?Ø %Ð˜Ó%ó@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 )	ÚMixtralAttentionÚargsc                 ót  •— t         ‰| �  «        |j                  | _        |j                  | _        | j                  | j                  z  | _        |j                  | _        |j                  | _        | j
                  dz  | _        t        j                  | j                  | j                  | j
                  z  d¬«      | _        t        j                  | j                  | j                  | j
                  z  d¬«      | _        t        j                  | j                  | j                  | j
                  z  d¬«      | _        t        j                  | j                  | j
                  z  | j                  d¬«      | _        t        j                  | j
                  |j                   |j                  ¬«      | _        y )Ng      à¿F©Úbias)ÚtraditionalÚbase)ÚsuperÚ__init__r   r   Ú	num_headsÚhead_dimr   r   ÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRoPEr   Úrope©r#   r2   Ú	__class__s     €r$   r9   zMixtralAttention.__init__$   sC  ø€ Ü‰ÑÔØ×+Ñ+ˆÔØ×1Ñ1ˆŒØ×(Ñ(¨D¯N©NÑ:ˆŒØ#'×#;Ñ#;ˆÔ ØŸ/™/ˆŒà—]‘] DÑ(ˆŒ
ä—i‘iØ×Ñ˜dŸn™n¨t¯}©}Ñ<À5ô
ˆŒô —i‘iØ×Ñ˜d×6Ñ6¸¿¹ÑFÈUô
ˆŒô —i‘iØ×Ñ˜d×6Ñ6¸¿¹ÑFÈUô
ˆŒô —i‘iØ�N‰N˜TŸ]™]Ñ*¨D×,<Ñ,<À5ô
ˆŒô —G‘GØ�M‰MØ×-Ñ-Ø—‘ô
ˆ�	r&   ÚxÚmaskÚcacheÚreturnc                 ó2  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}|j	                  ||| j
                  d«      j                  dddd«      }|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	                  ||d«      }
| j                  |
«      S )Néÿÿÿÿr   r   r   é   )Úoffset)rI   r<   rH   )Úshaper?   r@   rA   Úreshaper:   Ú	transposer   rD   rN   Úupdate_and_fetchr   r<   rB   )r#   rG   rH   rI   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r$   Ú__call__zMixtralAttention.__call__A   st  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆð —/‘/ ! Q¨¯©¸Ó;×EÑEÀaÈÈAÈqÓQˆØ�|‰|˜A˜q $×":Ñ":¸BÓ?×IÑIÈ!ÈQÐPQÐSTÓUˆØ—‘  1 d×&>Ñ&>ÀÓC×MÑMØˆq�!�Qó
ˆð ÐØ—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Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r&   ©NN©r'   r(   r)   r   r9   ÚmxÚarrayr   r   rZ   Ú__classcell__©rF   s   @r$   r1   r1   #   sX   ø„ ð
˜Yõ 
ð@ $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r&   r1   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMixtralSparseMoeBlockr2   c                 ól  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  | _        t        j                  | j                  | j                  d¬«      | _        t        | j                  | j
                  | j                  «      | _        y ©NFr4   )r8   r9   r   Ú
hidden_dimr   Úffn_dimr   Únum_expertsr   r=   r>   Úgater   Ú
switch_mlprE   s     €r$   r9   zMixtralSparseMoeBlock.__init__b   s‚   ø€ Ü‰ÑÔØ×*Ñ*ˆŒØ×-Ñ-ˆŒØ×1Ñ1ˆÔØ#'×#;Ñ#;ˆÔ ô —I‘I˜dŸo™o¨t×/?Ñ/?ÀeÔLˆŒ	ä# D§O¡O°T·\±\À4×CSÑCSÓTˆ�r&   rG   rJ   c                 ó`  — | j                  |«      }| j                  }t        j                  t        j                  | |dz
  d¬«      dd |…f   «      }t        j
                  ||d¬«      }t        j                  |dd¬«      }| j                  ||«      }||d   z  j                  d	¬«      }|S )
Nr   rL   )ÚkthÚaxis.)rl   T)rl   Úprecise).Néþÿÿÿ)	rh   r   r]   Ústop_gradientÚargpartitionÚtake_along_axisÚsoftmaxri   Úsum)r#   rG   ÚgatesÚkÚindsÚscoresÚys          r$   rZ   zMixtralSparseMoeBlock.__call__n   s¥   € Ø—	‘	˜!“ˆà×$Ñ$ˆÜ×Ñ¤§¡°°¸AÀ¹EÈÔ KÈCÐQSÐRSÐQSÈGÑ TÓUˆÜ×#Ñ# E¨4°bÔ9ˆÜ—‘˜F¨°TÔ:ˆà�O‰O˜A˜tÓ$ˆØ�˜	Ñ"Ñ"×'Ñ'¨RÐ'Ó0ˆàˆr&   )	r'   r(   r)   r   r9   r]   r^   rZ   r_   r`   s   @r$   rb   rb   a   s,   ø„ ð
U˜Yõ 
Uð˜"Ÿ(™(ð  r§x¡x÷ r&   rb   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 )	ÚMixtralDecoderLayerr2   c                 óD  •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _
        t        j                  |j                  |j                  ¬«      | _        y )N©Úeps)r8   r9   r   r1   Ú	self_attnrb   Úblock_sparse_moer=   ÚRMSNormr   Úinput_layernormÚpost_attention_layernormrE   s     €r$   r9   zMixtralDecoderLayer.__init__}   sv   ø€ Ü‰ÑÔØ×+Ñ+ˆÔä)¨$Ó/ˆŒä 5°dÓ ;ˆÔÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r&   rG   rH   rI   rJ   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r!   )r~   r�   r   r‚   )r#   rG   rH   rI   ÚrÚhÚouts          r$   rZ   zMixtralDecoderLayer.__call__‰   sS   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ×!Ñ! $×"?Ñ"?ÀÓ"BÓCˆØ�!‰eˆØˆ
r&   r[   r\   r`   s   @r$   rz   rz   |   sW   ø„ ð

˜Yõ 

ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r&   rz   c                   ó€   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  deej                     dej                  fd„Zˆ xZ	S )ÚMixtralModelr2   c                 ó’  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _
        t	        j                  |j                  |j                  ¬«      | _        y c c}w )N)r2   r|   )r8   r9   r   r   r=   Ú	Embeddingr   Úembed_tokensÚrangerz   Úlayersr€   r   Únorm)r#   r2   Ú_rF   s      €r$   r9   zMixtralModel.__init__—   s–   ø€ Ü‰ÑÔØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔäŸL™L¨¯©¸$×:JÑ:JÓKˆÔä49¸$×:PÑ:PÔ4Qó
Ù4Q¨qÔ TÖ*Ð4Qñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò
s   Á8CÚinputsÚinput_embeddingsrJ   c                 óô   — |�|}n| j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )r‹   Úlenr�   r
   ÚziprŽ   )r#   r�   rI   r‘   r…   rH   ÚlayerÚcs           r$   rZ   zMixtralModel.__call__¢   s€   € ð Ð'Ø ‰Aà×!Ñ! &Ó)ˆAàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr&   r[   )
r'   r(   r)   r   r9   r]   r^   r   rZ   r_   r`   s   @r$   rˆ   rˆ   –   sK   ø„ ð	H˜Yõ 	Hð Ø/3ñ	à—‘ðð # 2§8¡8Ñ,ð	ð
 
�‰÷r&   rˆ   c                   ó–   ‡ — e Zd Zdefˆ fd„Z	 	 d	dej                  deej                     dej                  fd„Zd„ Z	e
d„ «       Zˆ xZS )
ÚModelr2   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y rd   )r8   r9   r2   r   rˆ   Úmodelr   r=   r>   r   r   Úlm_headrE   s     €r$   r9   zModel.__init__¹   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ! $Ó'ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r&   r�   r‘   rJ   c                 óÀ   — | j                  |||«      }| j                  j                  r%| j                   j                  j	                  |«      S | j                  |«      S r!   )rš   r2   r   r‹   Ú	as_linearr›   )r#   r�   rI   r‘   r†   s        r$   rZ   zModel.__call__Á   sN   € ð �j‰j˜ Ð(8Ó9ˆØ�9‰9×(Ò(Ø—:‘:×*Ñ*×4Ñ4°SÓ9Ð9à—<‘< Ó$Ð$r&   c                 óÆ  — | j                   j                  r|j                  dd «       d|vr|S t        | j                   j                  «      D ]‹  }d|› �}dD ]  \  }}dD ]u  }|› d|› d|› �|v sŒt        | j                   j
                  «      D �cg c]  }|j                  |› d|› d|› d|› �«      ‘Œ  }}t        j                  |«      ||› d	|› d|› �<   Œw Œ� Œ� |S c c}w )
Nzlm_head.weightz3model.layers.0.block_sparse_moe.experts.0.w1.weightzmodel.layers.))Úw1Ú	gate_proj)Úw2Ú	down_proj)Úw3Úup_proj)ÚweightÚscalesÚbiasesz.block_sparse_moe.experts.0.Ú.z.block_sparse_moe.experts.z.block_sparse_moe.switch_mlp.)r2   r   ÚpoprŒ   r   r   r]   Ústack)	r#   ÚweightsÚlÚprefixÚnÚmru   ÚeÚto_joins	            r$   ÚsanitizezModel.sanitizeÍ   s  € Ø�9‰9×(Ò(Ø�K‰KÐ(¨$Ô/Ø@ÈÑOØˆNÜ�t—y‘y×2Ñ2Ö3ˆAØ$ Q CÐ(ˆFÛU‘��1Û7�AØ ˜Ð!=¸a¸SÀÀ!ÀÐEÈÒPô
 &+¨4¯9©9×+FÑ+FÔ%Gó	#ñ &H ð $ŸK™KØ#) (Ð*DÀQÀCÀqÈÈÈ1ÈQÈCÐ Põð &Hð	  ð #ô ŸH™H WÓ-ð   6 (Ð*GÈÀsÈ!ÈAÈ3Ð OÒPñ 8ñ Vð 4ð ˆùò#s   Â#C
c                 ó.   — | j                   j                  S r!   )rš   r�   r"   s    r$   r�   zModel.layersâ   s   € à�z‰z× Ñ Ð r&   r[   )r'   r(   r)   r   r9   r]   r^   r   rZ   r²   Úpropertyr�   r_   r`   s   @r$   r˜   r˜   ¸   sd   ø„ ðT˜Yõ Tð Ø/3ñ	
%à—‘ð
%ð # 2§8¡8Ñ,ð	
%ð
 
�‰ó
%òð* ñ!ó ô!r&   r˜   )Údataclassesr   Útypingr   r   r   r   Úmlx.coreÚcorer]   Úmlx.nnr=   r7   r	   r
   r   Úswitch_layersr   r   ÚModuler1   rb   rz   rˆ   r˜   r/   r&   r$   Ú<module>r¼      s�   ðõ "ß -Ó -å Ý ç TÑ TÝ $ð ô@�ó @ó ð@ô*;#�r—y‘yô ;#ô|˜BŸI™Iô ô6˜"Ÿ)™)ô ô4�2—9‘9ô ôD,!ˆB�I‰Iõ ,!r&   