Ë
    îÿæi?  ã                   ód  — 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 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_maskc                   ó®   — 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<   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Úhead_dimÚrms_norm_epsÚ
vocab_sizeÚnum_key_value_headsi'  Ú
rope_thetaFÚrope_traditionalg      I@Úattn_logit_softcappingg      >@Úfinal_logit_softcappingg      b@Úquery_pre_attn_scalarN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   Úboolr   r   r   © ó    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gemma2.pyr
   r
      sk   … àƒOØÓØÓØÓØÓØƒMØÓØƒOØÓØ€J�ÓØ"Ð�dÓ"Ø$(Ð˜EÓ(Ø%)Ð˜UÓ)Ø#(Ð˜5Ô(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 )Nç      ð?)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+   r7   Ú__classcell__©r0   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                 ór  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }||z  | _        |j                  x| _        }d|j                  dz  z  | _
        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        |j"                  | _        t        j$                  ||j&                  |j(                  ¬«      | _        y )Nr2   ç      à?F©Úbias)ÚtraditionalÚbase)r*   r+   r   r   Ún_headsr   Ú
n_kv_headsÚrepeatsr   r   ÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projr   ÚRoPEr   r   Úrope)r/   r<   ÚdimrC   rD   r   r0   s         €r#   r+   zAttention.__init__)   s  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*Ø *Ñ,ˆŒØ#'§=¡=Ð0ˆŒ˜à˜D×6Ñ6¸Ñ;Ñ<ˆŒ
ä—i‘i  W¨xÑ%7¸eÔDˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒØ&*×&AÑ&AˆÔ#Ü—G‘GØØ×-Ñ-Ø—‘ô
ˆ�	r"   r6   ÚmaskÚcacheÚreturnc           	      ó,  — |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                  |«      }|| j                  z  }| j                  dkD  r_|j	                  || j                  | j                  || j                  «      }t        j                  |d«      }t        j                  |	d«      }	||j!                  dd«      z  }
t        j"                  |
| j$                  z  «      }
|
| j$                  z  }
|�|j&                  t        j(                  k(  r]t        j*                  ||
t        j,                  t        j.                  |
j&                  «      j0                  |
j&                  «      «      }
n|
|z   }
t        j2                  |
dd¬	«      }
|
|	z  }| j                  dkD  r(|j	                  || j
                  || j                  «      }|j                  dddd«      j	                  ||d«      }| j5                  |«      S )
Néÿÿÿÿr   é   r   é   )ÚoffsetéþÿÿÿT)ÚpreciseÚaxis)ÚshaperI   rJ   rK   ÚreshaperC   Ú	transposerD   rN   rW   Úupdate_and_fetchrF   rE   r   r,   Úexpand_dimsÚswapaxesÚtanhr   ÚdtypeÚbool_ÚwhereÚarrayÚfinfoÚminÚsoftmaxrL   )r/   r6   rP   rQ   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚscoresÚoutputs               r#   r7   zAttention.__call__?   s„  € ð —'‘'‰ˆˆ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à˜DŸJ™JÑ&ˆà�<‰<˜!ÒØ—o‘oØ�4—?‘? D§L¡L°!°T·]±]óˆGô —>‘> $¨Ó*ˆDÜ—^‘^ F¨AÓ.ˆFà˜4Ÿ=™=¨¨RÓ0Ñ0ˆÜ—‘˜ $×"=Ñ"=Ñ=Ó>ˆØ�$×-Ñ-Ñ-ˆàÐØ�z‰zœRŸX™XÒ%ÜŸ™Ø˜&¤"§(¡(¬2¯8©8°F·L±LÓ+A×+EÑ+EÀvÇ|Á|Ó"Tó‘ð   $™�Ü—‘˜F¨D°rÔ:ˆØ˜&‘ˆØ�<‰<˜!ÒØ—^‘^ A t§|¡|°Q¸¿¹ÓFˆFØ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�{‰{˜6Ó"Ð"r"   ©NN©r   r   r   r
   r+   r,   re   r   r   r7   r8   r9   s   @r#   r;   r;   (   sW   ø„ ð
˜Yõ 
ð2 $(Ø#ñ	-#à�8‰8ð-#ð �r—x‘xÑ ð-#ð ˜‰}ð	-#ð
 
�‰÷-#r"   r;   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+   rG   rH   Ú	gate_projÚ	down_projÚup_proj)r/   rO   Ú
hidden_dimr0   s      €r#   r+   zMLP.__init__p   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r"   rR   c                 óŒ   — | j                  t        j                  | j                  |«      «      | j	                  |«      z  «      S r)   )rw   rG   Úgelu_approxrv   rx   r5   s     r#   r7   zMLP.__call__v   s0   € Ø�~‰~œbŸn™n¨T¯^©^¸AÓ->Ó?À$Ç,Á,ÈqÃ/ÑQÓRÐRr"   )r   r   r   r+   r,   re   r7   r8   r9   s   @r#   rt   rt   o   s   ø„ ô>ðS˜RŸX™X÷ Sr"   rt   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                  | _        t	        |«      | _        t        |j                  |j                  «      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        || _        y )N©r'   )r*   r+   r   r   r;   Ú	self_attnrt   r   Úmlpr%   r   Úinput_layernormÚpre_feedforward_layernormÚpost_feedforward_layernormÚpost_attention_layernormr<   ©r/   r<   r0   s     €r#   r+   zTransformerBlock.__init__{   sÌ   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ& t×'7Ñ'7¸T×=NÑ=NÔOˆÔÜ)0Ø×Ñ $×"3Ñ"3ô*
ˆÔ&ô +2Ø×Ñ $×"3Ñ"3ô+
ˆÔ'ô )0°×0@Ñ0@Àd×FWÑFWÔ(XˆÔ%Øˆ�	r"   r6   rP   rQ   rR   c                 óÚ   — | j                  | j                  |«      ||«      }|| j                  |«      z   }| j                  | j	                  |«      «      }|| j                  |«      z   }|S r)   )r€   r‚   r…   r�   rƒ   r„   )r/   r6   rP   rQ   ÚrÚhÚouts          r#   r7   zTransformerBlock.__call__‹   si   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�×-Ñ-¨aÓ0Ñ0ˆØ�H‰H�T×3Ñ3°AÓ6Ó7ˆØ�$×1Ñ1°!Ó4Ñ4ˆØˆ
r"   rq   rr   r9   s   @r#   r}   r}   z   sW   ø„ ð˜Yõ ð& $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r"   r}   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú
GemmaModelr<   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   )r<   r   )r*   r+   r<   r   r   rG   Ú	Embeddingr   Úembed_tokensÚranger}   Úlayersr%   r   Únorm)r/   r<   Ú_r0   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   d¬«      }t        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr>   r   T)Úreturn_array)r�   r<   r   Úlenr‘   r   Úzipr’   )r/   r”   rQ   r‰   rP   ÚlayerÚcs          r#   r7   zGemmaModel.__call__¥   s�   € ð
 ×Ñ˜fÓ%ˆØ�—‘×&Ñ&¨Ñ+Ñ,ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©¸tÔDˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr"   r)   )	r   r   r   r
   r+   r,   re   r7   r8   r9   s   @r#   rŒ   rŒ   ˜   s'   ø„ ð
E˜Yõ 
Eð ñà—‘÷r"   rŒ   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 )ÚModelr<   c                 ó”   •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        || _        y r)   )r*   r+   r   r   rŒ   Úmodelr<   r†   s     €r#   r+   zModel.__init__¹   s:   ø€ Ü‰ÑÔØŸ/™/ˆŒØ'+×'CÑ'CˆÔ$Ü Ó%ˆŒ
Øˆ�	r"   r”   c                 óÖ   — | j                  ||«      }| j                   j                  j                  |«      }t        j                  || j
                  z  «      }|| j
                  z  }|S r)   )rž   r�   Ú	as_linearr,   ra   r   )r/   r”   rQ   rŠ   s       r#   r7   zModel.__call__À   s\   € ð
 �j‰j˜ Ó'ˆØ�j‰j×%Ñ%×/Ñ/°Ó4ˆÜ�g‰g�c˜D×8Ñ8Ñ8Ó9ˆØ�D×0Ñ0Ñ0ˆØˆ
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,   re   r7   Úpropertyr‘   r8   r9   s   @r#   rœ   rœ   ¸   s9   ø„ ð˜Yõ ð ñ	à—‘ó	ð ñ!ó ô!r"   rœ   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorer,   Úmlx.nnrG   rB   r   r   r
   ÚModuler%   r;   rt   r}   rŒ   rœ   r!   r"   r#   Ú<module>r©      s™   ðõ "ß  å Ý ç 6ð ô)�ó )ó ð)ô"@ˆb�i‰iô @ôD#�—	‘	ô D#ôNSˆ"�)‰)ô Sô�r—y‘yô ô<�—‘ô ô@!ˆB�I‰Iõ !r"   