Ë
    îÿæiˆ  ã                   ó|  — 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
ZddlmZ ddlmZmZ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 G d„ de	j&                  «      Zy)é    )Ú	dataclass)ÚAnyÚOptionalNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   ó~   — 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<   dZe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é   Ún_shared_headi'  Ú
rope_thetaFÚrope_traditionalN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   Úbool© ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/plamo.pyr   r      sI   … àƒOØÓØÓØÓØÓØÓØƒOØ€M�3ÓØ€J�ÓØ"Ð�dÔ"r!   r   c            	       óŽ   ‡ — e Zd Zdedd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ÚconfigÚreturnNc                 ó¬  •— t         ‰| �  «        || _        |j                  | _        | j                  |j                  z  }|j                  | _        |x| _        | _        t        t        j                  | j
                  |j                  z  «      «      x| _        | _        |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.                  d¬«      | _        y )Ng      à¿F©Úbiasg      ð?)ÚtraditionalÚbaseÚscale)ÚsuperÚ__init__r%   r   r   Úq_num_headsÚqk_dimÚv_dimr   ÚnpÚceilr   Úk_num_headsÚv_num_headsr,   ÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRoPEr   r   Ú
rotary_emb)Úselfr%   Úhead_dimÚ	__class__s      €r"   r.   zAttention.__init__   sv  ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ×#Ñ# v×'AÑ'AÑAˆà!×5Ñ5ˆÔØ#+Ð+ˆŒ�d”jÜ.1Ü�G‰G�D×$Ñ$ v×';Ñ';Ñ;Ó<ó/
ð 	
ˆÔ˜4Ô+ð ˜t‘^ˆŒ
ä—i‘iØ×Ñ˜d×.Ñ.°·±Ñ<À5ô
ˆŒô —i‘iØ×Ñ˜d×.Ñ.°·±Ñ<À5ô
ˆŒô —i‘iØ×Ñ˜d×.Ñ.°·±Ñ;À%ô
ˆŒô —i‘iØ×Ñ˜tŸz™zÑ)¨4×+;Ñ+;À%ô
ˆŒô Ÿ'™'ØØ×/Ñ/Ø×"Ñ"Øô	
ˆ�r!   Úhidden_statesÚattention_maskÚcachec                 ó&  — |j                   \  }}}| j                  |«      }| j                  |«      }| j                  |«      }	|j	                  ||| j
                  | j                  «      j                  dddd«      }|j	                  ||| j                  | j                  «      j                  dddd«      }|	j	                  ||| j                  | j                  «      j                  dddd«      }	|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||	«      \  }}	n"| j                  |«      }| j                  |«      }t        j                  |d| j                   j"                  ddg«      }t        j                  |	d| j                   j"                  ddg«      }	t%        |||	|| j&                  |¬«      }
|
j                  dddd«      j	                  ||d«      }
| j)                  |
«      S )Nr   é   r   é   )Úoffset)rC   r,   Úmaskéÿÿÿÿ)Úshaper8   r9   r:   Úreshaper/   r0   Ú	transposer4   r5   r1   r=   rG   Úupdate_and_fetchÚmxÚtiler%   r   r
   r,   r;   )r>   rA   rB   rC   ÚbszÚq_lenÚ_ÚqueriesÚkeysÚvaluesÚoutputs              r"   Ú__call__zAttention.__call__>   sÝ  € ð &×+Ñ+‰ˆˆU�Aà—+‘+˜mÓ,ˆØ�{‰{˜=Ó)ˆØ—‘˜]Ó+ˆð —/‘/ # u¨d×.>Ñ.>ÀÇÁÓL×VÑVØˆq�!�Qó
ˆð �|‰|˜C ¨×(8Ñ(8¸$¿+¹+ÓF×PÑPØˆq�!�Qó
ˆð —‘  U¨D×,<Ñ,<¸d¿j¹jÓI×SÑSØˆq�!�Qó
ˆð ÐØ—o‘o g°e·l±l�oÓCˆGØ—?‘? 4°·±�?Ó=ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—o‘o gÓ.ˆGØ—?‘? 4Ó(ˆDä�w‰w�t˜a §¡×!:Ñ!:¸A¸qÐAÓBˆÜ—‘˜ ! T§[¡[×%>Ñ%>ÀÀ1Ð!EÓFˆä-ØØØØØ—*‘*Øô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°c¸5À"ÓEˆØ�{‰{˜6Ó"Ð"r!   ©NN©r   r   r   r   r.   rN   Úarrayr   r   rW   Ú__classcell__©r@   s   @r"   r$   r$      s_   ø„ ð
˜yð 
¨Tõ 
ðH .2Ø#ñ	+#à—x‘xð+#ð ! §¡Ñ*ð+#ð ˜‰}ð	+#ð
 
�‰÷+#r!   r$   c                   ó`   ‡ — e Zd Zdeddfˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMLPr%   r&   Nc                 óš  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _	        y ©NFr(   )
r-   r.   r%   r   r   r6   r7   Ú	gate_projÚup_projÚ	down_proj©r>   r%   r@   s     €r"   r.   zMLP.__init__m   s”   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 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ˆ�r!   Úxc                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)rc   r   ra   rb   )r>   re   s     r"   rW   zMLP.__call__v   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr!   )	r   r   r   r   r.   rN   rZ   rW   r[   r\   s   @r"   r^   r^   l   s7   ø„ ðY˜yð Y¨Tõ YðJ˜"Ÿ(™(ð J r§x¡x÷ Jr!   r^   c                   óv   ‡ — e Zd Zdeddfˆ fd„Z	 	 d	dej                  deej                     dee   fd„Z	ˆ xZ
S )
ÚPlamoDecoderLayerr%   r&   Nc                 óò   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        y ©N)Úeps)r-   r.   r%   r   r$   Ú	self_attnr^   Úmlpr6   ÚRMSNormr   Únormrd   s     €r"   r.   zPlamoDecoderLayer.__init__{   sX   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔÜ" 6Ó*ˆŒÜ�v“;ˆŒÜ—J‘J˜v×1Ñ1°v×7JÑ7JÔKˆ�	r!   rA   rB   rC   c                 ó†   — |}| j                  |«      }| j                  |||¬«      }| j                  |«      }||z   |z   }|S )N)rA   rB   rC   )rp   rm   rn   )r>   rA   rB   rC   ÚresidualÚhidden_states_saÚhidden_states_mlps          r"   rW   zPlamoDecoderLayer.__call__ƒ   s^   € ð !ˆàŸ	™	 -Ó0ˆð  Ÿ>™>Ø'Ø)Øð *ó 
Ðð !ŸH™H ]Ó3Ðà Ð#3Ñ3Ð6GÑGˆØÐr!   rX   rY   r\   s   @r"   ri   ri   z   sS   ø„ ðL˜yð L¨Tõ Lð .2Ø#ñ	à—x‘xðð ! §¡Ñ*ðð ˜‰}÷	r!   ri   c                   ó(   ‡ — e Zd Zdeddfˆ fd„Zˆ xZS )ÚPlamoDecoderr%   r&   Nc                 óŽ   •— t         ‰| �  «        t        |j                  «      D �cg c]  }t	        |«      ‘Œ c}| _        y c c}w rg   )r-   r.   Úranger   ri   Úlayers)r>   r%   rR   r@   s      €r"   r.   zPlamoDecoder.__init__�   s@   ø€ Ü‰ÑÔä/4°V×5MÑ5MÔ/Nó
Ù/N¨!Ô˜fÕ%Ð/Nñ
ˆ�ùò 
s   §A)r   r   r   r   r.   r[   r\   s   @r"   rv   rv   œ   s   ø„ ð
˜yð 
¨T÷ 
ñ 
r!   rv   c                   ój   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   dej                  fd„Z	ˆ xZ
S )Ú
PlamoModelr%   c                 ó0  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |«      | _	        t	        j                  |j                  |j                  ¬«      | _        y rk   )r-   r.   r%   r   r6   Ú	Embeddingr   Úembed_tokensrv   ry   ro   r   rp   rd   s     €r"   r.   zPlamoModel.__init__¥   sk   ø€ Ü‰ÑÔØˆŒØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÓOˆÔÜ" 6Ó*ˆŒÜ—J‘J˜v×1Ñ1°v×7JÑ7JÔKˆ�	r!   ÚinputsrC   r&   c                 óB  — | j                  |«      }|€5t        t        | j                  j                  «      «      D �cg c]  }d ‘Œ }}t	        ||d   «      }t        | j                  j                  |«      D ]  \  }} ||||¬«      }Œ | j                  |«      S c c}w )Nr   )rC   )r~   rx   Úlenry   r	   Úziprp   )r>   r   rC   ÚhrR   rH   ÚlayerÚcs           r"   rW   zPlamoModel.__call__®   s–   € ð
 ×Ñ˜fÓ%ˆàˆ=Ü#(¬¨T¯[©[×-?Ñ-?Ó)@Ô#AÓBÑ#A˜a’TÐ#AˆEÐBä$ Q¨¨a©Ó1ˆä˜DŸK™K×.Ñ.°Ö6‰HˆE�1Ù�a˜ QÔ'‰Að 7ð �y‰y˜‹|Ðùò Cs   ¾	Brg   rY   r\   s   @r"   r{   r{   ¤   sC   ø„ ðL˜yõ Lð  $ñà—‘ðð ˜‰}ðð 
�‰÷	r!   r{   c                   ó~   ‡ — e Zd Zdeddfˆ fd„Z	 d	dej                  dee   dej                  fd„Z	e
d„ «       Zˆ xZS )
ÚModelÚargsr&   Nc                 óÔ   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        j                  |j                  |j                  d¬«      | _	        || _
        y r`   )r-   r.   r   r{   Úmodelr6   r7   r   r   Úlm_headrˆ   )r>   rˆ   r@   s     €r"   r.   zModel.__init__Á   sO   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ Ó%ˆŒ
Ü"$§)¡)Ø×Ñ˜dŸo™o°Eô#
ˆŒð ˆ�	r!   r   rC   c                 óH   — | j                  ||«      }| j                  |«      S rg   )rŠ   r‹   )r>   r   rC   Úouts       r"   rW   zModel.__call__Ê   s#   € ð
 �j‰j˜ Ó'ˆØ�|‰|˜CÓ Ð r!   c                 óB   — | j                   j                  j                  S rg   )rŠ   ry   )r>   s    r"   ry   zModel.layersÒ   s   € à�z‰z× Ñ ×'Ñ'Ð'r!   rg   )r   r   r   r   r.   rN   rZ   r   r   rW   Úpropertyry   r[   r\   s   @r"   r‡   r‡   À   s\   ø„ ð˜Yð ¨4õ ð  $ñ!à—‘ð!ð ˜‰}ð!ð 
�‰ó	!ð ñ(ó ô(r!   r‡   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerN   Úmlx.nnr6   Únumpyr2   Úactivationsr   r+   r   r	   r
   r   ÚModuler$   r^   ri   rv   r{   r‡   r    r!   r"   Ú<module>r˜      s    ðõ "ß  å Ý Û å ß TÑ Tð ô
#�ó 
#ó ð
#ôM#�—	‘	ô M#ô`Jˆ"�)‰)ô Jô˜Ÿ	™	ô ôD
�2—9‘9ô 
ô�—‘ô ô8(ˆB�I‰Iõ (r!   