Ë
    îÿæiô  ã                   ó^  — d dl mZ d dlmZmZmZm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 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 G d„ dej*                  «      Z G d„ dej*                  «      Zy)é    )Ú	dataclass)ÚAnyÚDictÚOptionalÚUnionNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Úinitialize_ropec                   ó  — 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<   dZee   ed	<   dZ	ee   ed
<   dZ
e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eeeef   f      ed<   dZeed<   d„ Zy)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚrms_norm_epsÚ
vocab_sizeNÚhead_dimÚmax_position_embeddingsÚnum_key_value_headsFÚattention_biasÚmlp_biasi'  Ú
rope_thetaÚrope_traditionalÚrope_scalingTÚtie_word_embeddingsc                 ó@   — | j                   €| j                  | _         y y ©N)r   r   ©Úselfs    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/olmo2.pyÚ__post_init__zModelArgs.__post_init__!   s!   € Ø×#Ñ#Ð+Ø'+×'?Ñ'?ˆDÕ$ð ,ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   r   r   Úboolr   r   r   r   r   r   r   r%   © r&   r$   r   r      s²   … àƒOØÓØÓØÓØÓØÓØƒOØ"€Hˆh�s‰mÓ"Ø-1Ð˜X c™]Ó1Ø)-Ð˜ #™Ó-Ø €N�DÓ Ø€HˆdÓØ€J�ÓØ"Ð�dÓ"Ø;?€L�(˜4  U¨5°#¨:Ñ%6Ð 6Ñ7Ñ8Ó?Ø $Ð˜Ó$ó@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                 óD  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  xs |j                  |z  x| _        }|dz  | _        t        |d«      r|j                  }nd}t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  ||z  ||¬«      | _        t#        | j                  |j$                  |j&                  |j(                  |j*                  «      | _        t        j.                  ||z  |j0                  «      | _        t        j.                  ||z  |j0                  «      | _        y )Ng      à¿r   F©Úbias)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr   ÚscaleÚhasattrr   ÚnnÚLinearÚq_projÚk_projÚv_projÚo_projr   r   r   r   r   ÚropeÚRMSNormr   Úq_normÚk_norm)r#   r2   Údimr8   r9   r   r   Ú	__class__s          €r$   r7   zAttention.__init__'   sX  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à#'§=¡=Ò#O°D×4DÑ4DÈÑ4OÐOˆŒ˜à˜t‘^ˆŒ
Ü�4Ð)Ô*Ø!×0Ñ0‰Nà"ˆNä—i‘i  W¨xÑ%7¸nÔMˆŒÜ—i‘i  Z°(Ñ%:ÀÔPˆŒÜ—i‘i  Z°(Ñ%:ÀÔPˆŒÜ—i‘i ¨(Ñ 2°C¸nÔMˆŒä#Ø�M‰MØ�O‰OØ×!Ñ!Ø×ÑØ×(Ñ(ó
ˆŒ	ô —j‘j ¨8Ñ!3°T×5FÑ5FÓGˆŒÜ—j‘j ¨hÑ!6¸×8IÑ8IÓJˆ�r&   ÚxÚmaskÚcacheÚreturnc                 óv  — |j                   \  }}}| j                  |«      | 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)rJ   r:   rI   )Úshaper>   r?   r@   rD   rE   Úreshaper8   Ú	transposer9   rB   rP   Úupdate_and_fetchr   r:   rA   )r#   rH   rI   rJ   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r$   Ú__call__zAttention.__call__F   s…  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆØ—+‘+˜gÓ&ˆØ�{‰{˜4Ó ˆð —/‘/ ! 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   r7   ÚmxÚarrayr   r   r\   Ú__classcell__©rG   s   @r$   r1   r1   &   sZ   ø„ ðK˜Yõ KðD $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r&   r1   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚMLPr2   c                 ó6  •— t         ‰| �  «        |j                  }|j                  }t	        |d«      r|j
                  }nd}t        j                  |||¬«      | _        t        j                  |||¬«      | _	        t        j                  |||¬«      | _
        y )Nr   Fr4   )r6   r7   r   r   r;   r   r<   r=   Ú	gate_projÚ	down_projÚup_proj)r#   r2   rF   Ú
hidden_dimr   rG   s        €r$   r7   zMLP.__init__h   sx   ø€ Ü‰ÑÔà×ÑˆØ×+Ñ+ˆ
Ü�4˜Ô$Ø—}‘}‰HàˆHäŸ™ 3¨
¸ÔBˆŒÜŸ™ :¨s¸ÔBˆŒÜ—y‘y  j°xÔ@ˆ�r&   rK   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S r!   )rg   r	   rf   rh   )r#   rH   s     r$   r\   zMLP.__call__v   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr&   ©	r'   r(   r)   r   r7   r_   r`   r\   ra   rb   s   @r$   rd   rd   g   s#   ø„ ðA˜Yõ AðJ˜RŸX™X÷ Jr&   rd   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 )	ÚTransformerBlockr2   c                 ót  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)r6   r7   r   r   r1   Ú	self_attnrd   Úmlpr<   rC   r   Úpost_attention_layernormÚpost_feedforward_layernormr2   ©r#   r2   rG   s     €r$   r7   zTransformerBlock.__init__{   s�   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t“9ˆŒÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÔ%ô +-¯*©*Ø×Ñ $×"3Ñ"3ô+
ˆÔ'ð ˆ�	r&   rH   rI   rJ   rK   c                 óž   — | j                  | j                  |||«      «      }||z   }| j                  | j                  |«      «      }||z   }|S r!   )rs   rq   rt   rr   )r#   rH   rI   rJ   ÚrÚhÚouts          r$   r\   zTransformerBlock.__call__‰   sP   € ð ×)Ñ)¨$¯.©.¸¸DÀ%Ó*HÓIˆØ�‰EˆØ×+Ñ+¨D¯H©H°Q«KÓ8ˆØ�!‰eˆØˆ
r&   r]   r^   rb   s   @r$   rm   rm   z   sW   ø„ ð˜Yõ ð" $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r&   rm   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú
LlamaModelr2   c                 óÂ  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        | j                  dkD  sJ ‚t        j                  |j                  |j                  «      | _        t        |j                  «      D �cg c]  }t        |¬«      ‘Œ c}| _        t        j                  |j                  |j                  ¬«      | _        y c c}w )Nr   )r2   ro   )r6   r7   r2   r   r   r<   Ú	Embeddingr   Úembed_tokensÚrangerm   ÚlayersrC   r   Únorm)r#   r2   Ú_rG   s      €r$   r7   zLlamaModel.__init__—   s¯   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò
s   ÂCÚinputsc                 óì   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||¬«      }Œ | j                  |«      S )Nr   )rJ   )r~   Úlenr€   r   Úzipr�   )r#   rƒ   rJ   rx   rI   ÚlayerÚcs          r$   r\   zLlamaModel.__call__£   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEÜ$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜ QÔ'‰Að 0ð �y‰y˜‹|Ðr&   r!   rk   rb   s   @r$   r{   r{   –   s'   ø„ ð
H˜Yõ 
Hð ñà—‘÷r&   r{   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 )ÚModelr2   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr4   )r6   r7   r2   r   r{   Úmodelr   r<   r=   r   r   Úlm_headru   s     €r$   r7   zModel.__init__µ   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ Ó%ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r&   rƒ   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r!   )rŒ   r2   r   r~   Ú	as_linearr�   )r#   rƒ   rJ   ry   s       r$   r\   zModel.__call__½   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r&   c                 ó`   — |j                  «       D ��ci c]  \  }}d|vsŒ||“Œ c}}S c c}}w )Nzself_attn.rotary_emb.inv_freq)Úitems)r#   ÚweightsÚkÚvs       r$   ÚsanitizezModel.sanitizeÉ   s<   € ð %Ÿ]™]œ_ô
Ù,‘T�Q˜Ð0OÐWXÒ0XˆAˆq‰D˜_ò
ð 	
ùó 
s   ”*¡*c                 ó.   — | j                   j                  S r!   )rŒ   r€   r"   s    r$   r€   zModel.layersÏ   s   € à�z‰z× Ñ Ð r&   r!   )r'   r(   r)   r   r7   r_   r`   r\   r•   Úpropertyr€   ra   rb   s   @r$   rŠ   rŠ   ´   s@   ø„ ðT˜Yõ Tð ñ
à—‘ó
ò
ð ñ!ó ô!r&   rŠ   )Údataclassesr   Útypingr   r   r   r   Úmlx.coreÚcorer_   Úmlx.nnr<   Úactivationsr	   Úbaser
   r   r   Ú
rope_utilsr   r   ÚModuler1   rd   rm   r{   rŠ   r/   r&   r$   Ú<module>r¡      s“   ðõ "ß -Ó -å Ý å ß TÑ TÝ 'ð ô@�ó @ó ð@ô.>#�—	‘	ô >#ôBJˆ"�)‰)ô Jô&�r—y‘yô ô8�—‘ô ô<!ˆB�I‰Iõ !r&   