Ë
    îÿæiz  ã                   óJ  — 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 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_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<   eed<   eed	<   eed
<   eed<   eed<   eed<   eed<   y)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_attention_headsÚnum_hidden_layersÚ
vocab_sizeÚintermediate_sizeÚintermediate_size_mlpÚnum_key_value_headsÚrms_norm_epsÚ
rope_thetaÚhead_dimÚtie_word_embeddingsÚno_rope_layersÚuse_qk_normN)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatÚboolÚlist© ó    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/llama4_text.pyr   r      sS   … àƒOØÓØÓØÓØƒOØÓØÓØÓØÓØÓØƒMØÓØÓØÔ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                 óf  •— t         ‰| �  «        || _        |j                  | _        |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¬«      | _        || _        |r1t        j"                  | j                  d|j$                  ¬«      | _        |j(                  | _        |j*                  | _        y )Ng      à¿F©ÚbiasT)ÚtraditionalÚbase)ÚsuperÚ__init__r)   r   Ún_headsr   Ú
n_kv_headsr   ÚscaleÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projÚuse_ropeÚRoPEr   Úroper   r   ©Úselfr)   r:   Ú	__class__s      €r&   r0   zAttention.__init__    s<  ø€ Ü‰ÑÔØˆŒ	Ø×/Ñ/ˆŒØ×2Ñ2ˆŒØŸ™ˆŒØ—]‘] DÑ(ˆŒ
ä—i‘iØ×Ñ˜dŸl™l¨T¯]©]Ñ:Àô
ˆŒô —i‘iØ×Ñ˜dŸo™o°·±Ñ=ÀEô
ˆŒô —i‘iØ×Ñ˜dŸo™o°·±Ñ=ÀEô
ˆŒô —i‘iØ�L‰L˜4Ÿ=™=Ñ(¨$×*:Ñ*:Àô
ˆŒð !ˆŒÙÜŸ™ §¡¸4ÀdÇoÁoÔVˆDŒIØ×+Ñ+ˆÔØ ×-Ñ-ˆÕr%   ÚxÚmaskÚcacheÚreturnc                 óÈ  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}|j	                  ||| j
                  d«      }|j	                  ||| j                  d«      }| j                  rVt        j                  j                  |d | j                  «      }t        j                  j                  |d | j                  «      }|j                  dddd«      }|j                  dddd«      }|	j	                  ||| j                  d«      j                  dddd«      }	| j                  r6|�|j                  nd}
| j                  ||
¬«      }| j                  ||
¬«      }|�|j!                  ||	«      \  }}	t#        |||	|| j$                  |¬«      }|j                  dddd«      j	                  ||d«      }| j'                  |«      S )Néÿÿÿÿr   é   r   é   )Úoffset)rB   r3   rA   )Úshaper6   r7   r8   Úreshaper1   r2   r   ÚmxÚfastÚrms_normr   Ú	transposer:   rH   r<   Úupdate_and_fetchr
   r3   r9   )r>   r@   rA   rB   ÚBÚLÚDÚqueriesÚkeysÚvaluesrH   Úoutputs               r&   Ú__call__zAttention.__call__:   s¨  € ð —'‘'‰ˆˆ1ˆaØ $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—/‘/ ! Q¨¯©°bÓ9ˆØ�|‰|˜A˜q $§/¡/°2Ó6ˆØ×ÒÜ—g‘g×&Ñ& w°°d×6GÑ6GÓHˆGÜ—7‘7×#Ñ# D¨$°×0AÑ0AÓBˆDØ×#Ñ# A q¨!¨QÓ/ˆØ�~‰~˜a  A qÓ)ˆØ—‘  1 d§o¡o°rÓ:×DÑDÀQÈÈ1ÈaÓPˆà�=Š=Ø%*Ð%6�U—\’\¸AˆFØ—i‘i °�iÓ7ˆGØ—9‘9˜T¨&�9Ó1ˆDàÐØ ×1Ñ1°$¸Ó?‰LˆD�&ä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r%   ©NN©r   r   r   r   r0   rK   Úarrayr   r   rW   Ú__classcell__©r?   s   @r&   r(   r(      sW   ø„ ð.˜Yõ .ð: $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r%   r(   c                   ón   ‡ — e Zd Zej                  fˆ fd„	Zdej                  dej                  fd„Zˆ xZ	S )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y ©NFr+   )r/   r0   r4   r5   Ú	gate_projÚup_projÚ	down_proj)r>   Údimr   Ú
activationr?   s       €r&   r0   zMLP.__init__\   sM   ø€ Ü‰ÑÔÜŸ™ 3Ð(9ÀÔFˆŒÜ—y‘y Ð&7¸eÔDˆŒÜŸ™Ð#4°cÀÔFˆ�r%   r@   rC   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)rc   r   ra   rb   )r>   r@   s     r&   rW   zMLP.__call__b   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr%   )
r   r   r   r4   Úsilur0   rK   rZ   rW   r[   r\   s   @r&   r^   r^   [   s.   ø„ Ø:<¿'¹'õ GðJ˜"Ÿ(™(ð 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                 óN  •— t         ‰| �  «        t        ||«      | _        t	        |j
                  |j                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j
                  |j                  ¬«      | _        y )N©Úeps)r/   r0   r(   Ú	self_attnr^   r   r   Úfeed_forwardr4   ÚRMSNormr   Úinput_layernormÚpost_attention_layernormr=   s      €r&   r0   zTransformerBlock.__init__g   s~   ø€ Ü‰ÑÔÜ" 4¨Ó2ˆŒäØ×ÑØ×&Ñ&ó
ˆÔô
  "Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r%   r@   rA   rB   rC   c                 óš   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   S rg   )rn   rq   ro   rr   )r>   r@   rA   rB   ÚrÚhs         r&   rW   zTransformerBlock.__call__u   sN   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ×Ñ˜d×;Ñ;¸AÓ>Ó?ˆØ�1‰uˆr%   rX   rY   r\   s   @r&   rj   rj   f   sW   ø„ ð
˜Yõ 
ð" $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	r%   rj   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 )ÚLanguageModelr)   c                 óš  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        ||j                  |   ¬«      ‘Œ c}| _        t	        j                  |j                  |j                  ¬«      | _        y c c}w )N)r)   r:   rl   )r/   r0   r)   r   r4   Ú	Embeddingr   Úembed_tokensÚranger   rj   r   Úlayersrp   r   Únorm)r>   r)   Úir?   s      €r&   r0   zLanguageModel.__init__‚   s    ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔô ˜4×1Ñ1Ô2ó
á2�ô  $°×1DÑ1DÀQÑ1GÖHØ2ñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò	
s   Á.!CÚinputsrB   rC   c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rz   Úlenr|   r	   Úzipr}   )r>   r   rB   ru   rA   ÚlayerÚcs          r&   rW   zLanguageModel.__call__�   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆÜ˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr%   rg   rY   r\   s   @r&   rw   rw   �   sC   ø„ ð	H˜Yõ 	Hð  $ñà—‘ðð ˜‰}ðð 
�‰÷	r%   rw   c                   óz   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   dej                  fd„Z	e
d„ «       Zˆ xZS )	ÚModelr)   c                 ó  •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  | _        | j                  s2t        j                  |j                  |j                  d¬«      | _        y y r`   )r/   r0   r)   r   rw   Úmodelr   r4   r5   r   r   rV   )r>   r)   r?   s     €r&   r0   zModel.__init__Ÿ   sf   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ" 4Ó(ˆŒ
à#'×#;Ñ#;ˆÔ Ø×'Ò'ÜŸ)™) D×$4Ñ$4°d·o±oÈEÔRˆD�Kð (r%   r   rB   rC   c                 óº   — | j                  ||«      }| j                  r-|| j                   j                  j                  j                  z  S | j                  |«      S rg   )rˆ   r   rz   ÚweightÚTrV   )r>   r   rB   ru   s       r&   rW   zModel.__call__©   sL   € ð
 �J‰J�v˜uÓ%ˆØ×#Ò#Ø�t—z‘z×.Ñ.×5Ñ5×7Ñ7Ñ7Ð7à—;‘;˜q“>Ð!r%   c                 ó.   — | j                   j                  S rg   )rˆ   r|   )r>   s    r&   r|   zModel.layers´   s   € à�z‰z× Ñ Ð r%   rg   )r   r   r   r   r0   rK   rZ   r   r   rW   Úpropertyr|   r[   r\   s   @r&   r†   r†   ž   sW   ø„ ðS˜Yõ Sð  $ñ	"à—‘ð	"ð ˜‰}ð	"ð 
�‰ó		"ð ñ!ó ô!r%   r†   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerK   Úmlx.nnr4   Úactivationsr   r.   r   r	   r
   r   ÚModuler(   r^   rj   rw   r†   r$   r%   r&   Ú<module>r•      sŠ   ðõ "ß  å Ý å ß TÑ Tð ô�ó ó ðô"9#�—	‘	ô 9#ôxJˆ"�)‰)ô Jô�r—y‘yô ô6�B—I‘Iô ô:!ˆB�I‰Iõ !r%   