Ë
    îÿæiû  ã                   óV  — d dl mZ d dl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ÚOptionalNé   )Ú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   ed<   eed<   eed	<   eed
<   eed<   eed<   eed<   y)Ú	ModelArgsÚhidden_sizeÚintermediate_sizeÚ
model_typeÚmax_position_embeddingsÚnum_attention_headsÚnum_key_value_headsÚhead_dimÚnum_hidden_layersÚrms_norm_epsÚ
vocab_sizeÚ
rope_thetaÚuse_biasÚtie_word_embeddingsN)	Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__Ústrr   ÚfloatÚbool© ó    úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/ernie4_5.pyr   r      sQ   … àÓØÓØƒOØ Ó ØÓØÓØ�s‰mÓØÓØÓØƒOØÓØƒNØÔ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
                  x| _        }|j                  xs ||z  x| _        }|dz  | _        t        j                  |||z  |j                  ¬«      | _        t        j                  |||z  |j                  ¬«      | _        t        j                  |||z  |j                  ¬«      | _        t        j                  ||z  ||j                  ¬«      | _        t!        ||j"                  d|j$                  ¬«      | _        y )Ng      à¿©ÚbiasT)ÚbaseÚtraditionalr   )ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr   ÚscaleÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projr   r   r   Úrope)Úselfr(   Údimr0   r1   r   Ú	__class__s         €r%   r/   zAttention.__init__    s÷   ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à#'§=¡=Ò#B°C¸7±NÐBˆŒ˜Ø˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸d¿m¹mÔLˆŒÜ—i‘i  Z°(Ñ%:ÀÇÁÔOˆŒÜ—i‘i  Z°(Ñ%:ÀÇÁÔOˆŒÜ—i‘i ¨(Ñ 2°C¸d¿m¹mÔLˆŒä#ØØ—‘ØØ$(×$@Ñ$@ô	
ˆ�	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   é   )Úoffset)r?   r2   r>   )Úshaper5   r6   r7   Úreshaper0   Ú	transposer1   r9   rE   Úupdate_and_fetchr
   r2   r8   )r:   r=   r>   r?   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r%   Ú__call__zAttention.__call__6   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   r/   ÚmxÚarrayr   r   rQ   Ú__classcell__©r<   s   @r%   r'   r'      sW   ø„ ð
˜Yõ 
ð2 $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r$   r'   c                   ó@   ‡ — e Zd Zdˆ fd„	Zdej
                  fd„Zˆ xZS )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )Nr*   )r.   r/   r3   r4   Ú	gate_projÚ	down_projÚup_proj)r:   r;   Ú
hidden_dimr   r<   s       €r%   r/   zMLP.__init__T   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸ÔBˆŒÜŸ™ :¨s¸ÔBˆŒÜ—y‘y  j°xÔ@ˆ�r$   r@   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)r\   r   r[   r]   )r:   r=   s     r%   rQ   zMLP.__call__Z   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr$   )F)r   r   r   r/   rT   rU   rQ   rV   rW   s   @r%   rY   rY   S   s   ø„ õAðJ˜RŸX™X÷ Jr$   rY   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 )	ÚDecoderLayerr(   c                 ób  •— t         ‰| �  «        t        |«      | _        t	        |j
                  |j                  |j                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j
                  |j                  ¬«      | _        y ©N)Úeps)r.   r/   r'   Ú	self_attnrY   r   r   r   Úmlpr3   ÚRMSNormr   Úinput_layernormÚpost_attention_layernorm©r:   r(   r<   s     €r%   r/   zDecoderLayer.__init___   sz   ø€ Ü‰ÑÔÜ" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?ÀÇÁÓOˆŒä!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r$   r=   r>   r?   r@   c                 óš   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   S r`   )rf   ri   rg   rj   )r:   r=   r>   r?   ÚrÚhs         r%   rQ   zDecoderLayer.__call__i   sL   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�1‰uˆr$   rR   rS   rW   s   @r%   rb   rb   ^   sW   ø„ ð
˜Yõ 
ð $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	r$   rb   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )ÚErnie45Modelr(   c                 óL  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w rd   )r.   r/   r3   Ú	Embeddingr   r   Úembed_tokensÚranger   rb   Úlayersrh   r   Únorm)r:   r(   Ú_r<   s      €r%   r/   zErnie45Model.__init__v   sw   ø€ Ü‰ÑÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔÜ38¸×9OÑ9OÔ3PÓQÑ3P¨a”| DÕ)Ð3PÑQˆŒÜ—J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò Rs   ÁB!Úinputsc                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rs   Úlenru   r	   Úziprv   )r:   rx   r?   rn   r>   ÚlayerÚcs          r%   rQ   zErnie45Model.__call__|   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr$   r`   )	r   r   r   r   r/   rT   rU   rQ   rV   rW   s   @r%   rp   rp   u   s'   ø„ ðH˜Yõ Hð ñà—‘÷r$   rp   c                   óX   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelr(   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr*   )r.   r/   r(   r   rp   Úmodelr   r3   r4   r   r   Úlm_headrk   s     €r%   r/   zModel.__init__�   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ! $Ó'ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r$   rx   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r`   )r�   r(   r   rs   Ú	as_linearr‚   )r:   rx   r?   Úouts       r%   rQ   zModel.__call__—   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r$   c                 ó.   — | j                   j                  S r`   )r�   ru   )r:   s    r%   ru   zModel.layers£   s   € à�z‰z× Ñ Ð r$   r`   )r   r   r   r   r/   rT   rU   rQ   Úpropertyru   rV   rW   s   @r%   r   r   Ž   s;   ø„ ðT˜Yõ Tð ñ
à—‘ó
ð ñ!ó ô!r$   r   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerT   Úmlx.nnr3   Úactivationsr   r,   r   r	   r
   Ú
rope_utilsr   r   ÚModuler'   rY   rb   rp   r   r#   r$   r%   Ú<module>r�      s�   ðõ "ß  å Ý å ß TÑ TÝ 'ð ô�ó ó ðô 1#�—	‘	ô 1#ôhJˆ"�)‰)ô Jô�2—9‘9ô ô.�2—9‘9ô ô2!ˆB�I‰Iõ !r$   