Ë
    îÿæi‚  ã                   ó°  — d dl mZ 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mZmZ e G d„ de«      «       Z eej&                  d	¬
«      d„ «       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)Úpartial)ÚAnyÚDictÚOptionalÚUnionNé   )Ú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   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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Ú
hidden_actÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚnorm_epsÚ
vocab_sizeÚnum_key_value_headsNÚhead_dimÚmax_position_embeddingsFÚattention_biasÚmlp_biasg      à?Úpartial_rotary_factorg     ˆÃ@Ú
rope_thetaÚrope_traditionalÚrope_scalingÚtie_word_embeddingsc                 óø   — | j                   rnd| j                   vrt        d«      ‚| j                   j                  d«      xs | j                   j                  d«      }|€t        d«      ‚|dvrt        d«      ‚y y )NÚfactorz"rope_scaling must contain 'factor'ÚtypeÚ	rope_typez6rope_scaling must contain either 'type' or 'rope_type')Úlinearz4rope_scaling 'type' currently only supports 'linear')r   Ú
ValueErrorÚget)Úselfr$   s     úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/nemotron.pyÚ__post_init__zModelArgs.__post_init__"   sŽ   € Ø×ÒØ˜t×0Ñ0Ñ0Ü Ð#EÓGÐGØ×)Ñ)×-Ñ-¨fÓ5ò ¸×9JÑ9J×9NÑ9NØó:ˆIð Ð Ü ØLóð ð  
Ñ*Ü Ð!WÓXÐXð +ð ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   r   Úboolr   r   r   r   r   r   r   r    r*   © r+   r)   r   r      s¸   … àƒOØÓØƒOØÓØÓØÓØƒOØƒOØÓØ"€Hˆh�s‰mÓ"Ø-1Ð˜X c™]Ó1Ø €N�DÓ Ø€HˆdÓØ#&Ð˜5Ó&Ø€J�ÓØ"Ð�dÓ"Ø;?€L�(˜4  U¨5°#¨:Ñ%6Ð 6Ñ7Ñ8Ó?Ø %Ð˜Ó%óYr+   r   T)Ú	shapelessc                 óH   — t        j                  | «      j                  «       S ©N)ÚnnÚreluÚsquare)Úxs    r)   Úrelu_squaredr<   1   s   € ä�7‰7�1‹:×ÑÓÐr+   c                   ó   — e Zd Zd„ Zy)ÚNemotronLayerNorm1Pc                 ó¨   — d| v r| j                   dz   nd }d| v r| j                  nd }t        j                  j	                  |||| j
                  «      S )NÚweightr	   Úbias)r@   rA   ÚmxÚfastÚ
layer_normÚeps)r(   r;   r@   rA   s       r)   Ú__call__zNemotronLayerNorm1P.__call__7   sH   € Ø$,°Ñ$4�—‘˜q’¸$ˆØ" d™Nˆt�yŠy°ˆÜ�w‰w×!Ñ! ! V¨T°4·8±8Ó<Ð<r+   N)r,   r-   r.   rF   r4   r+   r)   r>   r>   6   s   „ ó=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                 ój  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  xs |j                  |z  x| _        }|j                  | _        |dz  | _	        t        |d«      r|j                  }nd}t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  |||z  |¬«      | _        t        j                  ||z  ||¬«      | _        d}|j$                  rC|j$                  d   dk(  r1t'        |j$                  d   t(        «      sJ ‚d	|j$                  d   z  }t        j*                  t-        | j                  | j                  z  «      |j.                  |¬
«      | _        y )Ng      à¿r   F©rA   g      ð?r#   r%   r"   r	   )ÚbaseÚscale)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr   r   rM   Úhasattrr   r8   ÚLinearÚq_projÚk_projÚv_projÚo_projr   Ú
isinstancer2   ÚRoPEr1   r   Úrope)	r(   rI   ÚdimrP   rQ   r   r   Ú
rope_scaleÚ	__class__s	           €r)   rO   zAttention.__init__>   sv  ø€ Ü‰ÑÔà×ÑˆØ!%×!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ˆŒàˆ
Ø×Ò ×!2Ñ!2°6Ñ!:¸hÒ!FÜ˜d×/Ñ/°Ñ9¼5ÔAÐAÐAØ˜T×.Ñ.¨xÑ8Ñ8ˆJÜ—G‘GÜ�×*Ñ*¨T¯]©]Ñ:Ó;Ø—‘Øô
ˆ�	r+   r;   Ú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)r_   rM   r^   )ÚshaperT   rU   rV   ÚreshaperP   Ú	transposerQ   rZ   re   Úupdate_and_fetchr   rM   rW   )r(   r;   r^   r_   ÚBÚLÚ_ÚqueriesÚkeysÚvaluesÚoutputs              r)   rF   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   rO   rB   Úarrayr   r   rF   Ú__classcell__©r]   s   @r)   rH   rH   =   sX   ø„ ð
˜Yõ 
ðD $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r+   rH   c                   óD   ‡ — e Zd Zdefˆ fd„Zdej                  fd„Zˆ xZS )ÚMLPrI   c                 óÞ   •— t         ‰| �  «        |j                  }|j                  }|j                  }t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )NrK   )	rN   rO   r   r   r   r8   rS   Ú	down_projÚup_proj)r(   rI   r[   Ú
hidden_dimr   r]   s        €r)   rO   zMLP.__init__|   sU   ø€ Ü‰ÑÔà×ÑˆØ×+Ñ+ˆ
Ø—=‘=ˆäŸ™ :¨s¸ÔBˆŒÜ—y‘y  j°xÔ@ˆ�r+   r`   c                 óT   — | j                  t        | j                  |«      «      «      S r7   )ry   r<   rz   )r(   r;   s     r)   rF   zMLP.__call__†   s   € Ø�~‰~œl¨4¯<©<¸«?Ó;Ó<Ð<r+   ©	r,   r-   r.   r   rO   rB   rs   rF   rt   ru   s   @r)   rw   rw   {   s!   ø„ ðA˜Yõ Að=˜RŸX™X÷ =r+   rw   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 )	ÚTransformerBlockrI   c                 ó>  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _
        t        |j                  |j                  ¬«      | _        y )N©rE   )rN   rO   r   r   rH   Ú	self_attnrw   Úmlpr>   r   Úinput_layernormÚpost_attention_layernorm©r(   rI   r]   s     €r)   rO   zTransformerBlock.__init__‹   su   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t“9ˆŒÜ2°4×3CÑ3CÈÏÉÔWˆÔÜ(;Ø×Ñ $§-¡-ô)
ˆÕ%r+   r;   r^   r_   r`   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r7   )r‚   r„   rƒ   r…   )r(   r;   r^   r_   ÚrÚhÚouts          r)   rF   zTransformerBlock.__call__–   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r+   rq   rr   ru   s   @r)   r   r   Š   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 )ÚNemotronModelrI   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   )rI   r�   )rN   rO   rI   r   r   r8   Ú	Embeddingr   Úembed_tokensÚranger   Úlayersr>   r   Únorm)r(   rI   rl   r]   s      €r)   rO   zNemotronModel.__init__¤   s©   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô (¨×(8Ñ(8¸d¿m¹mÔLˆ�	ùò
s   ÂCÚinputsc                 óì   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||¬«      }Œ | j                  |«      S )Nr   )r_   )r�   Úlenr‘   r   Úzipr’   )r(   r“   r_   r‰   r^   ÚlayerÚcs          r)   rF   zNemotronModel.__call__°   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆÜ˜DŸK™K¨Ö/‰HˆE�1Ù�a˜ QÔ'‰Að 0ð �y‰y˜‹|Ðr+   r7   r}   ru   s   @r)   rŒ   rŒ   £   s'   ø„ ð
M˜Yõ 
Mð ñà—‘÷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 )ÚModelrI   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFrK   )rN   rO   rI   r   rŒ   Úmodelr    r8   rS   r   r   Úlm_headr†   s     €r)   rO   zModel.__init__Â   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ" 4Ó(ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r+   r“   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r7   )rœ   rI   r    r�   Ú	as_linearr�   )r(   r“   r_   rŠ   s       r)   rF   zModel.__call__Ê   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r+   c                 ó.   — | j                   j                  S r7   )rœ   r‘   )r(   s    r)   r‘   zModel.layersÖ   s   € à�z‰z× Ñ Ð r+   r7   )r,   r-   r.   r   rO   rB   rs   rF   Úpropertyr‘   rt   ru   s   @r)   rš   rš   Á   s;   ø„ ðT˜Yõ Tð ñ
à—‘ó
ð ñ!ó ô!r+   rš   )Údataclassesr   Ú	functoolsr   Útypingr   r   r   r   Úmlx.coreÚcorerB   Úmlx.nnr8   rL   r
   r   r   r   Úcompiler<   Ú	LayerNormr>   ÚModulerH   rw   r   rŒ   rš   r4   r+   r)   Ú<module>r«      s¾   ðõ "Ý ß -Ó -å Ý ç TÑ Tð ô Y�ó  Yó ð YñF 	ˆ�‰˜tÔ$ñó %ðô=˜"Ÿ,™,ô =ô;#�—	‘	ô ;#ô|=ˆ"�)‰)ô =ô�r—y‘yô ô2�B—I‘Iô ô<!ˆB�I‰Iõ !r+   