Ë
    îÿæi×!  ã                   óÈ  — d dl mZ d dlmZ d dlmZmZmZ d dlm	Z
 d dlmZ ddlmZmZmZ ddlmZmZ ddl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 ee
j6                  d¬«      d„ «       Z G d„ dej.                  «      Z G d„ dej.                  «      Z G d„ dej.                  «      Zy)é    )Ú	dataclass)Úpartial)ÚAnyÚDictÚOptionalNé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚKVCacheÚRotatingKVCache)Úinitialize_ropec                   óê   — e Zd ZU 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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_typei€  Úhidden_sizeé   Únum_hidden_layersi   Úintermediate_sizeé   Únum_attention_headsé   Úhead_dimg�íµ ÷Æ°>Úrms_norm_epsi   Ú
vocab_sizer   Únum_key_value_headsg    €„.AÚ
rope_thetag     ˆÃ@Úrope_local_base_freqÚquery_pre_attn_scalari   Úsliding_windowé   Úsliding_window_patterni €  Úmax_position_embeddingsNÚrope_scaling)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr   r   r   r   r   Úfloatr   r   r   r   r   r    r"   r#   r$   r   © ó    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gemma3_text.pyr   r      s¥   … àƒOØ€K�ÓØÐ�sÓØ!Ð�sÓ!Ø Ð˜Ó Ø€HˆcÓØ €L�%Ó Ø€J�ÓØ Ð˜Ó Ø#€J�Ó#Ø"*Ð˜%Ó*Ø#&Ð˜5Ó&Ø€N�CÓØ"#Ð˜CÓ#Ø#(Ð˜SÓ(Ø€L�$Ôr-   r   c            	       óŽ   ‡ — e Zd Zde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ÚargsÚ	layer_idxc                 óT  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }||z  | _        |j                  x| _        }|| _	        |j                  dz  | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        t%        ||j&                  ¬«      | _        t%        ||j&                  ¬«      | _        |dz   |j,                  z  dk7  | _        | j.                  rt1        ||j2                  d¬«      | _        y t1        ||j6                  d|j8                  |j:                  ¬«      | _        y )	Ng      à¿F©Úbias)ÚdimsÚepsr   r   )r6   ÚbaseÚtraditional)r6   r8   r9   r#   Úscaling_config)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsÚrepeatsr   r2   r   ÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRMSNormr   Úq_normÚk_normr"   Ú
is_slidingr   r   Úroper   r#   r$   )Úselfr1   r2   Údimr=   r>   r   Ú	__class__s          €r.   r<   zAttention.__init__$   sh  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*Ø *Ñ,ˆŒØ#'§=¡=Ð0ˆŒ˜Ø"ˆŒà×/Ñ/°Ñ5ˆŒ
ä—i‘i  W¨xÑ%7¸eÔDˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒä 8°×1BÑ1BÔCˆŒÜ 8°×1BÑ1BÔCˆŒØ$ q™=¨D×,GÑ,GÑGÈ1ÑLˆŒà�?Š?Ü'ØØ×.Ñ.Ø!ôˆD�Iô (ØØ—_‘_Ø!Ø(,×(DÑ(DØ#×0Ñ0ôˆD�Ir-   ÚxÚmaskÚcacheÚreturnc                 óv  — |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«      }	| j                  |«      }| j                  |«      }|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||	«      \  }}	n"| j                  |«      }| j                  |«      }t        |||	|| j                  |¬«      }
|
j                  dddd«      j	                  ||d«      }
| j                  |
«      S )Néÿÿÿÿr   é   r   é   )Úoffset)rQ   r@   rP   )ÚshaperC   rD   rE   Úreshaper=   Ú	transposer>   rH   rI   rK   rW   Úupdate_and_fetchr   r@   rF   )rL   rO   rP   rQ   ÚBÚLÚ_ÚqueriesÚkeysÚvaluesÚoutputs              r.   Ú__call__zAttention.__call__H   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ˆà—+‘+˜gÓ&ˆØ�{‰{˜4Ó ˆàÐØ—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<   ÚmxÚarrayr   r   rc   Ú__classcell__©rN   s   @r.   r0   r0   #   s_   ø„ ð"˜Yð "°3õ "ðN $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r-   r0   c                   ó0   ‡ — e Zd Zddedefˆ fd„Zd„ Zˆ xZS )rG   r6   r7   c                 óf   •— t         ‰| �  «        t        j                  |f«      | _        || _        y ©N)r;   r<   rf   ÚonesÚweightr7   )rL   r6   r7   rN   s      €r.   r<   zRMSNorm.__init__i   s'   ø€ Ü‰ÑÔÜ—g‘g˜t˜gÓ&ˆŒØˆ�r-   c                 ór   — t         j                  j                  |d| j                  z   | j                  «      S )Ng      ð?)rf   ÚfastÚrms_normrn   r7   ©rL   rO   s     r.   rc   zRMSNorm.__call__n   s(   € Ü�w‰w×Ñ  3¨¯©Ñ#4°d·h±hÓ?Ð?r-   )gñhãˆµøä>)r%   r&   r'   r*   r+   r<   rc   rh   ri   s   @r.   rG   rG   h   s   ø„ ñ˜Sð  uõ ö
@r-   rG   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 ©NFr4   )r;   r<   rA   rB   Ú	gate_projÚ	down_projÚup_proj)rL   rM   Ú
hidden_dimrN   s      €r.   r<   zMLP.__init__s   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r-   rR   c                 óŒ   — | j                  t        j                  | j                  |«      «      | j	                  |«      z  «      S rl   )rx   rA   Úgelu_approxrw   ry   rr   s     r.   rc   zMLP.__call__y   s0   € Ø�~‰~œbŸn™n¨T¯^©^¸AÓ->Ó?À$Ç,Á,ÈqÃ/ÑQÓRÐRr-   )r%   r&   r'   r<   rf   rg   rc   rh   ri   s   @r.   rt   rt   r   s   ø„ ô>ðS˜RŸX™X÷ Sr-   rt   T)Ú	shapelessc                 ó„  — | j                   t        j                  k7  r| |z   S t        j                  t        j                  «      j                  }t        j
                  | j                  t        j                  «      |j                  t        j                  «      z   | |«      j                  t        j                  «      S rl   )Údtyperf   Úfloat16ÚfinfoÚmaxÚclipÚastypeÚfloat32)rO   ÚyÚbounds      r.   Úclip_residualrˆ   }   s{   € à‡w�w”"—*‘*ÒØ�1‰uˆÜ�H‰H”R—Z‘ZÓ ×$Ñ$€EÜ�7‰7�1—8‘8œBŸJ™JÓ'¨!¯(©(´2·:±:Ó*>Ñ>ÀÀÈÓN×UÑUÜ
�
‰
óð r-   c            	       óŽ   ‡ — e Zd Zde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 )
ÚTransformerBlockr1   r2   c                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        ||«      | _        t        |j                  |j                  «      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        y )N©r7   )r;   r<   r   r   r0   Ú	self_attnrt   r   ÚmlprG   r   Úinput_layernormÚpost_attention_layernormÚpre_feedforward_layernormÚpost_feedforward_layernorm©rL   r1   r2   rN   s      €r.   r<   zTransformerBlock.__init__ˆ   sÆ   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4¨Ó3ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ& t×'7Ñ'7¸T×=NÑ=NÔOˆÔÜ(/°×0@Ñ0@Àd×FWÑFWÔ(XˆÔ%Ü)0Ø×Ñ $×"3Ñ"3ô*
ˆÔ&ô +2Ø×Ñ $×"3Ñ"3ô+
ˆÕ'r-   rO   rP   rQ   rR   c                 óö   — | j                  | j                  |«      ||«      }t        || j                  |«      «      }| j	                  | j                  |«      «      }t        || j                  |«      «      }|S rl   )r�   r�   rˆ   r�   rŽ   r‘   r’   )rL   rO   rP   rQ   ÚrÚhÚouts          r.   rc   zTransformerBlock.__call__—   sm   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆÜ˜!˜T×:Ñ:¸1Ó=Ó>ˆØ�H‰H�T×3Ñ3°AÓ6Ó7ˆÜ˜A˜t×>Ñ>¸qÓAÓBˆØˆ
r-   rd   re   ri   s   @r.   rŠ   rŠ   ‡   s^   ø„ ð
˜Yð 
°3õ 
ð$ $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r-   rŠ   c                   óh   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  deej                     fd„Zˆ xZ	S )ÚGemma3Modelr1   c                 óô  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |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   )r1   r2   rŒ   )r;   r<   r1   r    Úwindow_sizer"   r   r   rA   Ú	Embeddingr   Úembed_tokensÚrangerŠ   ÚlayersrG   r   Únormr“   s      €r.   r<   zGemma3Model.__init__¥   sÍ   ø€ Ü‰ÑÔØˆŒ	Ø×.Ñ.ˆÔØ&*×&AÑ&AˆÔ#ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔô # 4×#9Ñ#9Ô:ó
á:�	ô  $°)Ö<Ø:ñ
ˆŒô ˜D×,Ñ,°$×2CÑ2CÔDˆ�	ùò	
s   Â2C5ÚinputsÚinput_embeddingsc                 óx  — |�|}n| j                  |«      }|t        j                  | j                  j                  dz  t        j
                  «      j                  |j                  «      z  }|€d gt        | j                  «      z  }t        ||| j                  dz
     «      }| j                  dkD  rt        ||d   | j                  ¬«      }nd }t        t        | j                  |«      «      D ]7  \  }\  }}	|| j                  z  | j                  dz
  k(  }
|
r|n|} ||||	«      }Œ9 | j                  |«      S )Ng      à?r   r   )r›   )r�   rf   rg   r1   r   Úbfloat16r„   r   ÚlenrŸ   r
   r"   r›   Ú	enumerateÚzipr    )rL   r¡   rQ   r¢   r–   Úglobal_maskÚsliding_window_maskÚiÚlayerÚcÚ	is_globalrP   s               r.   rc   zGemma3Model.__call__´   s2  € ð Ð'Ø ‰Aà×!Ñ! &Ó)ˆAØ	ŒR�X‰X�d—i‘i×+Ñ+¨SÑ0´"·+±+Ó>×EÑEÀaÇgÁgÓNÑNˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä+¨A¨u°T×5PÑ5PÐSTÑ5TÑ/UÓVˆà×&Ñ&¨Ò*Ü"7ØØ�a‘Ø ×,Ñ,ô#Ñð #'ÐÜ&¤s¨4¯;©;¸Ó'>Ö?‰MˆA‰z��qà�D×/Ñ/Ñ/°4×3NÑ3NÐQRÑ3RÑRð ñ #,‘;Ð1DˆDÙ�a˜˜qÓ!‰Að @ð �y‰y˜‹|Ðr-   rd   )
r%   r&   r'   r   r<   rf   rg   r   rc   rh   ri   s   @r.   r™   r™   ¤   s=   ø„ ðE˜Yõ Eð$ Ø/3ñ	 à—‘ð ð # 2§8¡8Ñ,÷	 r-   r™   c                   ó„   ‡ — e Zd Zdefˆ fd„Z	 	 d	dej                  deej                     fd„Zd„ Z	e
d„ «       Zd„ Zˆ xZS )
ÚModelr1   c                 óâ   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        d| _        y rv   )r;   r<   r1   r   r™   ÚmodelrA   rB   r   r   Úlm_headÚtie_word_embeddings)rL   r1   rN   s     €r.   r<   zModel.__init__Ø   sR   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ  Ó&ˆŒ
Ü—y‘y ×!1Ñ!1°4·?±?ÈÔOˆŒØ#(ˆÕ r-   r¡   r¢   c                 ó´   — | j                  |||«      }| j                  r'| j                   j                  j                  |«      }|S | j	                  |«      }|S rl   )r±   r³   r�   Ú	as_linearr²   )rL   r¡   rQ   r¢   r—   s        r.   rc   zModel.__call__à   sV   € ð �j‰j˜ Ð(8Ó9ˆØ×#Ò#Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r-   c                 ó>   — d|vrd| _         | j                  d«       |S )Nzlm_head.weightTr²   )r³   Úpop)rL   Úweightss     r.   ÚsanitizezModel.sanitizeí   s#   € Ø 7Ñ*Ø'+ˆDÔ$Ø�H‰H�YÔØˆr-   c                 ó.   — | j                   j                  S rl   )r±   rŸ   )rL   s    r.   rŸ   zModel.layersó   s   € à�z‰z× Ñ Ð r-   c                 óJ  — g }t        | j                  j                  «      D ]~  }|| j                  j                  z  | j                  j                  dz
  k(  r|j	                  t        «       «       ŒP|j	                  t        | j                  j                  ¬«      «       Œ€ |S )Nr   )Úmax_size)rž   r1   r   r"   Úappendr   r   r    )rL   Úcachesrª   s      r.   Ú
make_cachezModel.make_cache÷   s{   € ØˆÜ�t—y‘y×2Ñ2Ö3ˆAà�D—I‘I×4Ñ4Ñ4Ø—9‘9×3Ñ3°aÑ7ò8ð —‘œg›iÕ(à—‘œo°t·y±y×7OÑ7OÔPÕQð 4ð ˆr-   rd   )r%   r&   r'   r   r<   rf   rg   r   rc   r¹   ÚpropertyrŸ   r¿   rh   ri   s   @r.   r¯   r¯   ×   sY   ø„ ð)˜Yõ )ð Ø/3ñ	à—‘ðð # 2§8¡8Ñ,ó	òð ñ!ó ð!ö
r-   r¯   ) Údataclassesr   Ú	functoolsr   Útypingr   r   r   Úmlx.coreÚcorerf   Úmlx.nnrA   r8   r	   r
   r   rQ   r   r   Ú
rope_utilsr   r   ÚModuler0   rG   rt   Úcompilerˆ   rŠ   r™   r¯   r,   r-   r.   Ú<module>rÊ      sÇ   ðõ "Ý ß &Ñ &å Ý ç TÑ Tß +Ý 'ð ô�ó ó ðô&B#�—	‘	ô B#ôJ@ˆb�i‰iô @ôSˆ"�)‰)ô Sñ 	ˆ�‰˜tÔ$ñó %ðô�r—y‘yô ô:0�"—)‘)ô 0ôf*ˆB�I‰Iõ *r-   