Ë
    îÿæit  ã                   ó^  — 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 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é   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Úinitialize_ropec                   óÌ   — 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d<   dZeeeeeef   f      ed<   dZe
ed<   dZeed<   y)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚrms_norm_epsÚ
vocab_sizeÚnum_key_value_headsi €  Úmax_position_embeddingsg     ˆÃ@Ú
rope_thetaFÚrope_traditionalNÚrope_scalingÚtie_word_embeddingsé   Únum_nextn_predict_layers)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   Úboolr   r   r   r   r   r   © ó    úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/mimo.pyr   r      sˆ   … àƒOØÓØÓØÓØÓØÓØƒOØÓØ#(Ð˜SÓ(Ø€J�ÓØ"Ð�dÓ"Ø;?€L�(˜4  U¨5°#¨:Ñ%6Ð 6Ñ7Ñ8Ó?Ø %Ð˜Ó%Ø$%Ð˜cÔ%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 )	Ú	AttentionÚargsc                 óN  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  €J ‚|j
                  x| _        }|j                  |z  }|dz  | _        t        j                  |||z  d¬«      | _
        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        t        ||j                  |j                   |j"                  |j$                  ¬«      | _        y )Ng      à¿T©ÚbiasF)ÚbaseÚtraditionalÚscaling_configr   )ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projr   r   r   r   r   Úrope)Úselfr,   Údimr5   r6   Úhead_dimÚ	__class__s         €r)   r4   zAttention.__init__!   sÿ   ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ×'Ñ'Ð3Ð3Ð3Ø'+×'?Ñ'?Ð?ˆŒ˜*à×#Ñ# wÑ.ˆØ˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸dÔCˆŒÜ—i‘i  Z°(Ñ%:ÀÔFˆŒÜ—i‘i  Z°(Ñ%:ÀÔFˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒä#ØØ—‘Ø×-Ñ-Ø×,Ñ,Ø$(×$@Ñ$@ô
ˆ�	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)rE   r7   rD   )Úshaper:   r;   r<   Úreshaper5   Ú	transposer6   r>   rJ   Úupdate_and_fetchr   r7   r=   )r?   rC   rD   rE   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r)   Ú__call__zAttention.__call__9   sg  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—/‘/ ! Q¨¯©°bÓ9×CÑCÀAÀqÈ!ÈQÓOˆØ�|‰|˜A˜q $§/¡/°2Ó6×@Ñ@ÀÀAÀqÈ!ÓLˆØ—‘  1 d§o¡o°rÓ:×DÑDÀQÈÈ1ÈaÓPˆàÐØ—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   r4   ÚmxÚarrayr   r   rV   Ú__classcell__©rB   s   @r)   r+   r+       sW   ø„ ð
˜Yõ 
ð6 $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r(   r+   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y ©NFr.   )r3   r4   r8   r9   Ú	gate_projÚ	down_projÚup_proj)r?   r@   Ú
hidden_dimrB   s      €r)   r4   zMLP.__init__W   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r(   rF   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)rb   r	   ra   rc   )r?   rC   s     r)   rV   zMLP.__call__]   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr(   )r   r    r!   r4   rY   rZ   rV   r[   r\   s   @r)   r^   r^   V   s   ø„ ô>ðJ˜RŸX™X÷ J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 )	ÚTransformerBlockr,   c                 óž  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)r3   r4   r   r   r+   Ú	self_attnr^   r   Úmlpr8   ÚRMSNormr   Úinput_layernormÚpost_attention_layernormr,   ©r?   r,   rB   s     €r)   r4   zTransformerBlock.__init__b   s™   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÔ%ð ˆ�	r(   rC   rD   rE   rF   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S rf   )rl   ro   rm   rp   )r?   rC   rD   rE   ÚrÚhÚouts          r)   rV   zTransformerBlock.__call__n   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r(   rW   rX   r\   s   @r)   rh   rh   a   sW   ø„ ð
˜Yõ 
ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r(   rh   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú	MiMoModelr,   c                 óä  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j
                  | _        | j                  dkD  sJ ‚t        j                  |j                  |j                  «      | _	        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        j                  |j                  |j                  ¬«      | _        y c c}w )Nr   )r,   rj   )r3   r4   r,   r   r   r   r8   Ú	Embeddingr   Úembed_tokensÚrangerh   Úlayersrn   r   Únorm)r?   r,   Ú_rB   s      €r)   r4   zMiMoModel.__init__|   s½   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ(,×(EÑ(EˆÔ%à�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò
s   Â!C-Úinputsc                 óî   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      }|S )Nr   )rz   Úlenr|   r   Úzipr}   )r?   r   rE   rt   rD   ÚlayerÚcs          r)   rV   zMiMoModel.__call__Š   sy   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �I‰I�a‹Lˆàˆr(   rf   )	r   r    r!   r   r4   rY   rZ   rV   r[   r\   s   @r)   rw   rw   {   s'   ø„ ðH˜Yõ Hð" ñà—‘÷r(   rw   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zd„ Ze	d„ «       Z
ˆ xZS )ÚModelr,   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y r`   )r3   r4   r,   r   rw   Úmodelr   r8   r9   r   r   Úlm_headrq   s     €r)   r4   zModel.__init__Ÿ   sW   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ˜t“_ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r(   r   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S rf   )rˆ   r,   r   rz   Ú	as_linearr‰   )r?   r   rE   ru   s       r)   rV   zModel.__call__§   sW   € ð
 �j‰j˜ Ó'ˆà�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCàˆ
r(   c                 óÐ   — | j                   j                  r|j                  dd «       |j                  «       D ��ci c]  \  }}d|vr|j	                  d«      s||“Œ c}}S c c}}w )Nzlm_head.weightzself_attn.rotary_emb.inv_freqzmodel.mtp_layers.)r,   r   ÚpopÚitemsÚ
startswith)r?   ÚweightsÚkÚvs       r)   ÚsanitizezModel.sanitizeµ   sh   € Ø�9‰9×(Ò(Ø�K‰KÐ(¨$Ô/ð  Ÿ™œô
á'‘��1Ø.°aÑ7Ø—L‘LÐ!4Ô5ð ˆq‰DØ'ò
ð 	
ùó 
s   ¼"A"c                 ó.   — | j                   j                  S rf   )rˆ   r|   )r?   s    r)   r|   zModel.layersÀ   s   € à�z‰z× Ñ Ð r(   rf   )r   r    r!   r   r4   rY   rZ   rV   r“   Úpropertyr|   r[   r\   s   @r)   r†   r†   ž   s@   ø„ ðT˜Yõ Tð ñà—‘óò	
ð ñ!ó ô!r(   r†   )Údataclassesr   Útypingr   r   r   r   Úmlx.coreÚcorerY   Úmlx.nnr8   Úactivationsr	   r0   r
   r   r   Ú
rope_utilsr   r   ÚModuler+   r^   rh   rw   r†   r'   r(   r)   Ú<module>rž      s‘   ðõ "ß -Ó -å Ý å ß TÑ TÝ 'ð ô&�ó &ó ð&ô"3#�—	‘	ô 3#ôlJˆ"�)‰)ô Jô�r—y‘yô ô4 �—	‘	ô  ôF$!ˆB�I‰Iõ $!r(   