Ë
    îÿæiÆ  ã                   óh  — 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 G d„ de	j                  «      Zy)é    )Ú	dataclass)ÚAnyÚOptionalNé   )Ú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	<   d
Zeed<   dZe	ed<   y)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚhead_dimÚrms_norm_epsÚ
vocab_sizeÚnum_key_value_headsi'  Ú
rope_thetaFÚrope_traditionalN)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   Úbool© ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gemma.pyr   r      sJ   … àƒOØÓØÓØÓØÓØƒMØÓØƒOØÓØ€J�ÓØ"Ð�dÔ"r    r   c                   ó0   ‡ — e Zd Zddedefˆ fd„Zd„ Zˆ xZS )ÚRMSNormÚdimsÚepsc                 óf   •— t         ‰| �  «        t        j                  |f«      | _        || _        y ©N)ÚsuperÚ__init__ÚmxÚonesÚweightr%   )Úselfr$   r%   Ú	__class__s      €r!   r)   zRMSNorm.__init__   s'   ø€ Ü‰ÑÔÜ—g‘g˜t˜gÓ&ˆŒØˆ�r    c                 ór   — t         j                  j                  |d| j                  z   | j                  «      S )Ng      ð?)r*   ÚfastÚrms_normr,   r%   ©r-   Úxs     r!   Ú__call__zRMSNorm.__call__!   s(   € Ü�w‰w×Ñ  3¨¯©Ñ#4°d·h±hÓ?Ð?r    )gñhãˆµøä>)r   r   r   r   r   r)   r4   Ú__classcell__©r.   s   @r!   r#   r#      s   ø„ ñ˜Sð  uõ ö
@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                 ó"  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  x| _        }|dz  | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        t        j                  ||j                   |j"                  ¬«      | _        y )Ng      à¿F©Úbias)ÚtraditionalÚbase)r(   r)   r   r   Ún_headsr   Ú
n_kv_headsr   ÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRoPEr   r   Úrope)r-   r9   Údimr?   r@   r   r.   s         €r!   r)   zAttention.__init__&   sß   ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*Ø#'§=¡=Ð0ˆŒ˜à˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸eÔDˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒä—G‘GØØ×-Ñ-Ø—‘ô
ˆ�	r    r3   Ú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)rL   rA   rK   )ÚshaperD   rE   rF   Úreshaper?   Ú	transposer@   rI   rR   Úupdate_and_fetchr	   rA   rG   )r-   r3   rK   rL   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r!   r4   zAttention.__call__;   si  € ð —'‘'‰ˆˆ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)   r*   Úarrayr   r   r4   r5   r6   s   @r!   r8   r8   %   sW   ø„ ð
˜Yõ 
ð0 $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r    r8   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y )NFr;   )r(   r)   rB   rC   Ú	gate_projÚ	down_projÚup_proj)r-   rJ   Ú
hidden_dimr.   s      €r!   r)   zMLP.__init__[   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r    rM   c                 óŒ   — | j                  t        j                  | j                  |«      «      | j	                  |«      z  «      S r'   )re   rB   Úgelurd   rf   r2   s     r!   r4   zMLP.__call__a   s0   € Ø�~‰~œbŸg™g d§n¡n°QÓ&7Ó8¸4¿<¹<È»?ÑJÓKÐKr    )r   r   r   r)   r*   r`   r4   r5   r6   s   @r!   rb   rb   Z   s   ø„ ô>ðL˜RŸX™X÷ Lr    rb   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 )	ÚTransformerBlockr9   c                 óv  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |j                  |j                  «      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        || _        y )N©r%   )r(   r)   r   r   r8   Ú	self_attnrb   r   Úmlpr#   r   Úinput_layernormÚpost_attention_layernormr9   ©r-   r9   r.   s     €r!   r)   zTransformerBlock.__init__f   sŒ   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ& t×'7Ñ'7¸T×=NÑ=NÔOˆÔÜ(/°×0@Ñ0@Àd×FWÑFWÔ(XˆÔ%Øˆ�	r    r3   rK   rL   rM   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r'   )rn   rp   ro   rq   )r-   r3   rK   rL   ÚrÚhÚouts          r!   r4   zTransformerBlock.__call__p   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r    r^   r_   r6   s   @r!   rk   rk   e   sW   ø„ ð˜Yõ ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r    rk   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú
GemmaModelr9   c                 ó®  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        | j                  dkD  sJ ‚t        j                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        |j                  |j                  ¬«      | _        y c c}w )Nr   )r9   rm   )r(   r)   r9   r   r   rB   Ú	Embeddingr   Úembed_tokensÚrangerk   Úlayersr#   r   Únorm)r-   r9   Ú_r.   s      €r!   r)   zGemmaModel.__init__~   s«   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô ˜D×,Ñ,°$×2CÑ2CÔDˆ�	ùò
s   ÂCÚinputsc                 ó"  — | j                  |«      }|| j                  j                  dz  z  }|€d gt        | j                  «      z  }t        ||d   «      }t        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Ng      à?r   )r{   r9   r   Úlenr}   r   Úzipr~   )r-   r€   rL   ru   rK   ÚlayerÚcs          r!   r4   zGemmaModel.__call__Š   sŽ   € ð
 ×Ñ˜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)   r*   r`   r4   r5   r6   s   @r!   rx   rx   }   s'   ø„ ð
E˜Yõ 
Eð ñà—‘÷r    rx   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 )ÚModelr9   c                 ór   •— t         ‰| �  «        |j                  | _        t        |«      | _        || _        y r'   )r(   r)   r   rx   Úmodelr9   rr   s     €r!   r)   zModel.__init__ž   s,   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ Ó%ˆŒ
Øˆ�	r    r€   c                 ót   — | j                  ||«      }| j                   j                  j                  |«      }|S r'   )r‰   r{   Ú	as_linear)r-   r€   rL   rv   s       r!   r4   zModel.__call__¤   s3   € ð
 �j‰j˜ Ó'ˆØ�j‰j×%Ñ%×/Ñ/°Ó4ˆØˆ
r    c                 ó.   — | j                   j                  S r'   )r‰   r}   )r-   s    r!   r}   zModel.layers­   s   € à�z‰z× Ñ Ð r    r'   )r   r   r   r   r)   r*   r`   r4   Úpropertyr}   r5   r6   s   @r!   r‡   r‡   �   s9   ø„ ð˜Yõ ð ñà—‘óð ñ!ó ô!r    r‡   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorer*   Úmlx.nnrB   r>   r   r   r	   r   ÚModuler#   r8   rb   rk   rx   r‡   r   r    r!   Ú<module>r”      sš   ðõ "ß  å Ý ç TÑ Tð ô#�ó #ó ð#ô@ˆb�i‰iô @ô2#�—	‘	ô 2#ôjLˆ"�)‰)ô Lô�r—y‘yô ô0�—‘ô ô@!ˆB�I‰Iõ !r    