Ë
    îÿæ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
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é   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   ór   — 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y	)Ú	ModelArgsÚ
model_typeÚn_ctxÚn_embdÚn_headÚn_layerÚn_positionsÚlayer_norm_epsilonÚ
vocab_sizeNÚnum_key_value_headsc                 ó@   — | j                   €| j                  | _         y y ©N)r   r   ©Úselfs    úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gpt2.pyÚ__post_init__zModelArgs.__post_init__   s   € Ø×#Ñ#Ð+Ø'+§{¡{ˆDÕ$ð ,ó    )	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   © r   r   r   r      s<   … àƒOØƒJØƒKØƒKØƒLØÓØÓØƒOØ#Ð˜Ó#ó3r   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                 óÚ  •— t         ‰| �  «        |j                  |j                  z  dk(  sJ d«       ‚|j                  | _        |j                  | _        | j                  | j                  z  | _        | j                  dz  | _        t        j                  | j                  d| j                  z  d¬«      | _        t        j                  | j                  | j                  d¬«      | _	        y )Nr   z"n_embd must be divisible by n_headg      à¿é   T)Úbias)
ÚsuperÚ__init__r   r   Úhead_dimÚscaleÚnnÚLinearÚc_attnÚc_proj©r   r&   Ú	__class__s     €r   r+   zAttention.__init__   s¥   ø€ Ü‰ÑÔà�{‰{˜TŸ[™[Ñ(¨AÒ-ÐSÐ/SÓSÐ-à—k‘kˆŒØ—k‘kˆŒØŸ™ t§{¡{Ñ2ˆŒà—]‘] DÑ(ˆŒ
ä—i‘i §¡¨Q°·±©_À4ÔHˆŒÜ—i‘i §¡¨T¯[©[¸tÔDˆ�r   ÚxÚmaskÚcacheÚreturnc                 ól  — |j                   \  }}}| j                  |«      }t        j                  |dd¬«      \  }}	}
|j	                  ||| j
                  d«      j                  dddd«      }|	j	                  ||| j
                  d«      j                  dddd«      }	|
j	                  ||| j
                  d«      j                  dddd«      }
|�|j                  |	|
«      \  }	}
t        ||	|
|| j                  |¬«      }|j                  dddd«      j	                  ||d«      }| j                  |«      S )Nr(   éÿÿÿÿ)Úaxisr   é   r   )r6   r-   r5   )Úshaper0   ÚmxÚsplitÚreshaper   Ú	transposeÚupdate_and_fetchr	   r-   r1   )r   r4   r5   r6   ÚBÚLÚDÚqkvÚqueriesÚkeysÚvaluesÚoutputs               r   Ú__call__zAttention.__call__,   s#  € ð —'‘'‰ˆˆ1ˆaà�k‰k˜!‹nˆÜ "§¡¨¨a°bÔ 9Ñˆ��vð —/‘/ ! Q¨¯©°RÓ8×BÑBÀ1ÀaÈÈAÓNˆØ�|‰|˜A˜q $§+¡+¨rÓ2×<Ñ<¸QÀÀ1ÀaÓHˆØ—‘  1 d§k¡k°2Ó6×@Ñ@ÀÀAÀqÈ!ÓLˆàÐØ ×1Ñ1°$¸Ó?‰LˆD�&ä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r   ©NN©r   r   r   r   r+   r=   Úarrayr   r   rJ   Ú__classcell__©r3   s   @r   r%   r%      sY   ø„ ðE˜Yõ Eð" $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r   r%   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚMLPr&   c                 ó  •— t         ‰| �  «        |j                  | _        t        j                  | j                  d| j                  z  «      | _        t        j                  d| j                  z  | j                  «      | _        y )Né   )r*   r+   r   r.   r/   Úc_fcr1   r2   s     €r   r+   zMLP.__init__H   sU   ø€ Ü‰ÑÔà—k‘kˆŒÜ—I‘I˜dŸk™k¨1¨t¯{©{©?Ó;ˆŒ	Ü—i‘i  D§K¡K¡°·±Ó=ˆ�r   r7   c                 óh   — | j                  t        j                  | j                  |«      «      «      S r   )r1   r.   Úgelu_approxrT   )r   r4   s     r   rJ   zMLP.__call__O   s"   € Ø�{‰{œ2Ÿ>™>¨$¯)©)°A«,Ó7Ó8Ð8r   ©	r   r   r   r   r+   r=   rM   rJ   rN   rO   s   @r   rQ   rQ   G   s   ø„ ð>˜Yõ >ð9˜RŸX™X÷ 9r   rQ   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                  | _        |j                  | _        t        |«      | _        t        |«      | _        t        j                  | j                  | j                  ¬«      | _        t        j                  | j                  | j                  ¬«      | _        y )N©Úeps)r*   r+   r   r   r   r%   ÚattnrQ   Úmlpr.   Ú	LayerNormÚln_1Úln_2r2   s     €r   r+   zTransformerBlock.__init__T   s†   ø€ Ü‰ÑÔà—k‘kˆŒØ—k‘kˆŒØ"&×"9Ñ"9ˆÔÜ˜d“OˆŒ	Ü�t“9ˆŒÜ—L‘LØ�K‰KØ×'Ñ'ô
ˆŒ	ô —L‘L §¡°$×2IÑ2IÔJˆ�	r   r4   r5   r6   r7   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r   )r]   r`   r^   ra   )r   r4   r5   r6   ÚrÚhÚouts          r   rJ   zTransformerBlock.__call__b   sK   € ð �I‰I�d—i‘i “l D¨%Ó0ˆØ�‰EˆØ�H‰H�T—Y‘Y˜q“\Ó"ˆØ�!‰eˆØˆ
r   rK   rL   rO   s   @r   rY   rY   S   sY   ø„ ðK˜Yõ Kð" $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r   rY   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú	GPT2Modelr&   c                 óx  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        | j                  dkD  sJ ‚t        j                  | j                  | j                  «      | _	        t        j                  | j                  | j                  «      | _
        t        | j
                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        j                  | j                  | j                  ¬«      | _        y c c}w )Nr   )r&   r[   )r*   r+   r   r   r   r   r   r.   Ú	EmbeddingÚwteÚwpeÚrangerY   rd   r_   Úln_f)r   r&   Ú_r3   s      €r   r+   zGPT2Model.__init__p   sÜ   ø€ Ü‰ÑÔØ—k‘kˆŒØ×+Ñ+ˆÔØŸ/™/ˆŒØ—|‘|ˆŒØ"&×"9Ñ"9ˆÔØ�‰ Ò"Ð"Ð"Ü—<‘< §¡°·±Ó=ˆŒÜ—<‘< × 0Ñ 0°$·+±+Ó>ˆŒÜ7<¸T¿\¹\Ô7JÓKÑ7J°!Ô"¨Ö-Ð7JÑKˆŒÜ—L‘L §¡°$×2IÑ2IÔJˆ�	ùò Ls   Ã+D7Úinputsc                 ó¾  — |j                   \  }}| j                  |«      }|€d gt        | j                  «      z  }d}|d   �|d   j                  }t        j                  |«      }t        j                  |«      |d   z   }|| j                  |«      z  }t        ||d   «      }t        | j                  |«      D ]  \  }	}
 |	|||
¬«      }Œ | j                  |«      S )Nr   ).N)r6   )r<   rj   Úlenrd   Úoffsetr=   rM   Úarangerk   r   Úziprm   )r   ro   r6   rn   rC   Úhidden_statesrr   Úposition_idsr5   ÚlayerÚcs              r   rJ   zGPT2Model.__call__}   sÔ   € ð
 �|‰|‰ˆˆ1àŸ™ Ó(ˆàˆ=Ø�FœS §¡›[Ñ(ˆEàˆØ�‰8ÐØ˜1‘X—_‘_ˆFä—‘˜&Ó!ˆÜ—y‘y “| f¨YÑ&7Ñ7ˆà˜Ÿ™ ,Ó/Ñ/ˆä$ ]°E¸!±HÓ=ˆä˜DŸF™F EÖ*‰HˆE�1Ù! -°¸QÔ?‰Mð +ð �y‰y˜Ó'Ð'r   r   rW   rO   s   @r   rg   rg   o   s'   ø„ ðK˜Yõ Kð  ñ(à—‘÷(r   rg   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                 ór   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        y r   )r*   r+   r&   r   rg   Úmodelr2   s     €r   r+   zModel.__init__›   s+   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ˜t“_ˆ�
r   ro   c                 ót   — | j                  ||«      }| j                   j                  j                  |«      }|S r   )r|   rj   Ú	as_linear)r   ro   r6   re   s       r   rJ   zModel.__call__¡   s1   € ð
 �j‰j˜ Ó'ˆØ�j‰j�n‰n×&Ñ& sÓ+ˆØˆ
r   c                 ó
  — i }t        | j                  j                  «      D ]²  }d|› d�|v r|d|› d�= d|› d�|v r |d|› d�   j                  dd«      |d|› d�<   d|› d�|v r |d|› d�   j                  dd«      |d|› d�<   d|› d�|v r |d|› d�   j                  dd«      |d|› d�<   d|› d�|v sŒ“|d|› d�   j                  dd«      |d|› d�<   Œ´ |D ]'  }|j	                  d	«      s||   |d	|› �<   Œ ||   ||<   Œ) |S )
Nzh.z
.attn.biasz.attn.c_attn.weightr   r   z.attn.c_proj.weightz.mlp.c_fc.weightz.mlp.c_proj.weightzmodel.)rl   r&   r   r@   Ú
startswith)r   ÚweightsÚnew_weightsÚiÚweights        r   ÚsanitizezModel.sanitizeª   s¥  € ØˆÜ�t—y‘y×(Ñ(Ö)ˆAØ�A�3�jÐ! WÑ,Ø˜b   :Ð.Ð/Ø�A�3Ð)Ð*¨gÑ5Ø7>Ø˜˜Ð.Ð/ñ8ç‘)˜A˜q“/ð ˜"˜Q˜CÐ2Ð3Ñ4ð �A�3Ð)Ð*¨gÑ5Ø7>Ø˜˜Ð.Ð/ñ8ç‘)˜A˜q“/ð ˜"˜Q˜CÐ2Ð3Ñ4ð �A�3Ð&Ð'¨7Ñ2Ø4;Ø˜˜Ð+Ð,ñ5ç‘)˜A˜q“/ð ˜"˜Q˜CÐ/Ð0Ñ1ð �A�3Ð(Ð)¨WÒ4Ø6=Ø˜˜Ð-Ð.ñ7ç‘)˜A˜q“/ð ˜"˜Q˜CÐ1Ð2Ò3ð! *ó& ˆFØ×$Ñ$ XÔ.Ø18¸±�˜f V HÐ-Ò.à&-¨f¡o�˜FÒ#ð	 ð
 Ðr   c                 ó.   — | j                   j                  S r   )r|   rd   r   s    r   ÚlayerszModel.layersÆ   s   € à�z‰z�|‰|Ðr   r   )r   r   r   r   r+   r=   rM   rJ   r…   Úpropertyr‡   rN   rO   s   @r   rz   rz   š   s>   ø„ ð%˜Yõ %ð ñà—‘óòð8 ñó ôr   rz   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorer=   Úmlx.nnr.   Úbaser   r   r	   r   ÚModuler%   rQ   rY   rg   rz   r#   r   r   Ú<module>r�      s†   ðõ "ß  å Ý ç TÑ Tð ô3�ó 3ó ð3ô '#�—	‘	ô '#ôT	9ˆ"�)‰)ô 	9ô�r—y‘yô ô8((�—	‘	ô ((ôV.ˆB�I‰Iõ .r   