Ë
    îÿæi½  ã                   ó6  — d dl 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)é    N)Ú	dataclassé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   ó®   — e Zd ZU 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y)Ú	ModelArgsÚphiÚ
model_typei   Úmax_position_embeddingsi È  Ú
vocab_sizei 
  Úhidden_sizeé    Únum_attention_headsÚnum_hidden_layersÚnum_key_value_headsgš™™™™™Ù?Úpartial_rotary_factori (  Úintermediate_sizegñhãˆµøä>Úlayer_norm_epsg     ˆÃ@Ú
rope_thetac                 ó@   — | j                   €| j                  | _         y y ©N)r   r   ©Úselfs    úf/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/phi.pyÚ__post_init__zModelArgs.__post_init__   s!   € Ø×#Ñ#Ð+Ø'+×'?Ñ'?ˆDÕ$ð ,ó    N)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   Úintr   r   r   r   r   r   Úfloatr   r   r   r   © r   r   r	   r	      s|   … à€J�ÓØ#'Ð˜SÓ'Ø€J�ÓØ€K�ÓØ!Ð˜Ó!ØÐ�sÓØ!Ð˜Ó!Ø#&Ð˜5Ó&Ø"Ð�sÓ"Ø €N�EÓ Ø€J�Óó@r   r	   c                   ó,   ‡ — e Zd Zdefˆ fd„Zdd„Zˆ xZS )ÚPhiAttentionÚconfigc                 óZ  •— t         ‰| �  «        |j                  | _        |j                  | _        | j                  | j                  z  | _        |j                  | _        | j                  | j                  z  | _        |j                  | _        |j                  | _	        | j
                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚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"                  t%        | j                  | j
                  z  «      d| j                  ¬«      | _        y )Nz?hidden_size must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).T©ÚbiasF)ÚtraditionalÚbase)ÚsuperÚ__init__r   r   Ú	num_headsÚhead_dimr   Úrepeatsr   r   Ú
ValueErrorÚnnÚLinearÚq_projÚk_projÚv_projÚdenseÚRoPEr#   Úrope©r   r(   Ú	__class__s     €r   r/   zPhiAttention.__init__    s¯  ø€ Ü‰ÑÔà!×-Ñ-ˆÔØ×3Ñ3ˆŒØ×(Ñ(¨D¯N©NÑ:ˆŒØ#)×#=Ñ#=ˆÔ Ø—~‘~¨×)AÑ)AÑAˆŒØ ×+Ñ+ˆŒØ%+×%AÑ%AˆÔ"à�M‰M˜DŸN™NÑ*¨t×/?Ñ/?Ò?ÜØQÐRV×RbÑRbÐQcØ$ T§^¡^Ð$4°Bð8óð ô
 —i‘iØ×Ñ˜dŸn™n¨t¯}©}Ñ<À4ô
ˆŒô —i‘iØ×Ñ˜d×6Ñ6¸¿¹ÑFÈTô
ˆŒô —i‘iØ×Ñ˜d×6Ñ6¸¿¹ÑFÈTô
ˆŒô —Y‘YØ�N‰N˜TŸ]™]Ñ*¨D×,<Ñ,<À4ô
ˆŒ
ô —G‘GÜ�×*Ñ*¨T¯]©]Ñ:Ó;ØØ—‘ô
ˆ�	r   c                 ó¸  — | j                  |«      | j                  |«      | j                  |«      }}}|j                  \  }}}	| j                  | j
                  }}
|j                  |||
d«      j                  dd«      }|j                  |||d«      j                  dd«      }|j                  |||d«      j                  dd«      }|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||«      \  }}n"| j                  |«      }| j                  |«      }t        j                  d|j                  d   z  «      }t        |j                  t        j                   «      |||||¬«      j                  |j"                  «      }|j                  dd«      j                  ||d«      }| j%                  |«      S )Néÿÿÿÿr   é   )Úoffset)ÚcacheÚscaleÚmask)r6   r7   r8   Úshaper0   r   ÚreshapeÚmoveaxisr;   rA   Úupdate_and_fetchÚmathÚsqrtr   ÚastypeÚmxÚfloat32Údtyper9   )r   ÚxrD   rB   ÚqueriesÚkeysÚvaluesÚBÚLÚDÚn_headsÚ
n_kv_headsrC   Úoutputs                 r   Ú__call__zPhiAttention.__call__D   s¨  € Ø $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆð —-‘-‰ˆˆ1ˆaØ"Ÿn™n¨d×.FÑ.F�ˆð —/‘/ØØØØó	
÷
 ‰(�1�a‹.ð 	ð �|‰|˜A˜q *¨bÓ1×:Ñ:¸1¸aÓ@ˆØ—‘  1 j°"Ó5×>Ñ>¸qÀ!ÓDˆð ÐØ—i‘i °·±�iÓ=ˆGØ—9‘9˜T¨%¯,©,�9Ó7ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—i‘i Ó(ˆGØ—9‘9˜T“?ˆDä—	‘	˜!˜gŸm™m¨BÑ/Ñ/Ó0ˆÜ-Ø�N‰Nœ2Ÿ:™:Ó&ØØØØØô
÷ ‰&�—‘Ó
ð 	ð —‘  AÓ&×.Ñ.¨q°!°RÓ8ˆà�z‰z˜&Ó!Ð!r   )NN©r   r   r    r	   r/   rY   Ú__classcell__©r=   s   @r   r'   r'      s   ø„ ð"
˜yõ "
÷H&"r   r'   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚPhiMLPr(   c                 óÞ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  «      | _        y r   )r.   r/   r4   r5   r   r   Úfc1Úfc2r<   s     €r   r/   zPhiMLP.__init__n   sJ   ø€ Ü‰ÑÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r   Úreturnc                 óh   — | j                  t        j                  | j                  |«      «      «      S r   )ra   r4   Úgelu_approxr`   )r   rO   s     r   rY   zPhiMLP.__call__s   s"   € Ø�x‰xœŸ™ t§x¡x°£{Ó3Ó4Ð4r   )	r   r   r    r	   r/   rL   ÚarrayrY   r[   r\   s   @r   r^   r^   m   s!   ø„ ðK˜yõ Kð
5˜RŸX™X÷ 5r   r^   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚPhiDecoderLayerr(   c                 óÄ   •— t         ‰| �  «        t        |¬«      | _        t	        j
                  |j                  |j                  ¬«      | _        t        |«      | _
        y )N)r(   ©Úeps)r.   r/   r'   Ú	self_attnr4   Ú	LayerNormr   r   Úinput_layernormr^   Úmlpr<   s     €r   r/   zPhiDecoderLayer.__init__x   sI   ø€ Ü‰ÑÔÜ%¨VÔ4ˆŒÜ!Ÿ|™|Ø×Ñ F×$9Ñ$9ô 
ˆÔô ˜&“>ˆ�r   c                 ó|   — | j                  |«      }| j                  |||«      }| j                  |«      }||z   |z   S r   )rm   rk   rn   )r   rO   rD   rB   ÚhÚattn_hÚff_hs          r   rY   zPhiDecoderLayer.__call__€   s@   € Ø× Ñ  Ó#ˆØ—‘  4¨Ó/ˆØ�x‰x˜‹{ˆØ˜‰}˜qÑ Ð r   rZ   r\   s   @r   rg   rg   w   s   ø„ ð"˜yõ "ö!r   rg   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚPhiModelr(   c                 óL  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w )Nri   )r.   r/   r4   Ú	Embeddingr   r   Úembed_tokensÚranger   rg   Úlayersrl   r   Úfinal_layernorm)r   r(   Úir=   s      €r   r/   zPhiModel.__init__ˆ   s}   ø€ Ü‰ÑÔÜŸL™L¨×):Ñ):¸F×<NÑ<NÓOˆÔÜ8=¸f×>VÑ>VÔ8WÓXÑ8W°1” vÕ.Ð8WÑXˆŒÜ!Ÿ|™|Ø×Ñ F×$9Ñ$9ô 
ˆÕùò Ys   ÁB!c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rw   Úlenry   r   Úziprz   )r   rO   rB   rD   ÚlayerÚcs         r   rY   zPhiModel.__call__�   st   € Ø×Ñ˜aÓ ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEÜ$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0à×#Ñ# AÓ&Ð&r   rZ   r\   s   @r   rt   rt   ‡   s   ø„ ð
˜yõ 
ö	'r   rt   c                   óp   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelr(   c                 óÔ   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        j                  |j                  |j                  d¬«      | _	        || _
        y )NTr*   )r.   r/   r   rt   Úmodelr4   r5   r   r   Úlm_headÚargsr<   s     €r   r/   zModel.__init__�   sN   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ˜fÓ%ˆŒ
Ü—y‘y ×!3Ñ!3°V×5FÑ5FÈTÔRˆŒØˆ�	r   rO   rb   c                 óH   — | j                  ||«      }| j                  |«      S r   )r„   r…   )r   rO   rB   Úys       r   rY   zModel.__call__¤   s"   € ð
 �J‰J�q˜%Ó ˆØ�|‰|˜A‹Ðr   c                 ó.   — | j                   j                  S r   )r„   ry   r   s    r   ry   zModel.layers¬   s   € à�z‰z× Ñ Ð r   r   )r   r   r    r	   r/   rL   re   rY   Úpropertyry   r[   r\   s   @r   r‚   r‚   œ   sG   ø„ ð˜yõ ð ñà�8‰8ðð 
�‰ó	ð ñ!ó ô!r   r‚   )rI   Údataclassesr   Úmlx.coreÚcorerL   Úmlx.nnr4   r-   r   r   r   r	   ÚModuler'   r^   rg   rt   r‚   r%   r   r   Ú<module>r�      sŠ   ðó Ý !å Ý ç TÑ Tð ô@�ó @ó ð@ô$K"�2—9‘9ô K"ô\5ˆR�Y‰Yô 5ô!�b—i‘iô !ô 'ˆr�y‰yô 'ô*!ˆB�I‰Iõ !r   