Ë
    îÿæi	  ã                   ó>  — 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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<   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Únum_key_value_headsgñhãˆµøä>Únorm_epsiloni À  Ú
vocab_sizei † Ú
rope_thetaTÚtie_word_embeddingsN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   Úfloatr   r   r   Úbool© ó    úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/starcoder2.pyr   r      sN   … àƒOØÓØÓØÓØÓØÓØ€L�%ÓØ€J�ÓØ€J�ÓØ $Ð˜Ô$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                  |j                  z  }|dz  | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        t        j                  |d|j                   ¬«      | _        y )Ng      à¿T©ÚbiasF)ÚtraditionalÚbase)ÚsuperÚ__init__r#   r   r   Ún_headsr   Ú
n_kv_headsÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRoPEr   Úrope)Úselfr#   Údimr+   r,   Úhead_dimÚ	__class__s         €r    r*   zAttention.__init__   sá   ø€ Ü‰ÑÔØˆŒ	à×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à×#Ñ# t×'?Ñ'?Ñ?ˆØ˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸dÔCˆŒÜ—i‘i  Z°(Ñ%:ÀÔFˆŒÜ—i‘i  Z°(Ñ%:ÀÔFˆŒÜ—i‘i ¨(Ñ 2°C¸dÔCˆŒÜ—G‘G˜H°%¸d¿o¹oÔNˆ�	r   ÚxÚ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<   r-   r;   )Úshaper0   r1   r2   Úreshaper+   Ú	transposer,   r5   rB   Úupdate_and_fetchr	   r-   r3   )r6   r:   r;   r<   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r    Ú__call__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*   ÚmxÚarrayr   r   rN   Ú__classcell__©r9   s   @r    r"   r"      sY   ø„ ðO˜Yõ Oð( $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r   r"   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚMLPc                 ó–   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y )NTr%   )r)   r*   r.   r/   Úc_fcÚc_proj)r6   r7   Ú
hidden_dimr9   s      €r    r*   zMLP.__init__L   s6   ø€ Ü‰ÑÔÜ—I‘I˜c :°DÔ9ˆŒ	Ü—i‘i 
¨C°dÔ;ˆ�r   c                 óh   — | j                  t        j                  | j                  |«      «      «      S ©N)rY   r.   ÚgelurX   )r6   r:   s     r    rN   zMLP.__call__Q   s"   € Ø�{‰{œ2Ÿ7™7 4§9¡9¨Q£<Ó0Ó1Ð1r   )r   r   r   r*   rN   rS   rT   s   @r    rV   rV   K   s   ø„ ô<ö
2r   rV   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                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)r)   r*   r   r   r+   r"   Ú	self_attnrV   r   Úmlpr.   Ú	LayerNormr   Úinput_layernormÚpost_attention_layernormr#   ©r6   r#   r9   s     €r    r*   zTransformerBlock.__init__V   s˜   ø€ Ü‰ÑÔØ×+Ñ+ˆÔØ×/Ñ/ˆŒä" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ!Ÿ|™|¨D×,<Ñ,<À$×BSÑBSÔTˆÔÜ(*¯©Ø×Ñ $×"3Ñ"3ô)
ˆÔ%ð ˆ�	r   r:   r;   r<   r=   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r\   )rc   rf   rd   rg   )r6   r:   r;   r<   ÚrÚhÚouts          r    rN   zTransformerBlock.__call__c   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r   rO   rP   rT   s   @r    r_   r_   U   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 )ÚStarcoder2Modelr#   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   )r#   ra   )r)   r*   r#   r   r   r.   Ú	Embeddingr   Úembed_tokensÚranger_   Úlayersre   r   Únorm)r6   r#   Ú_r9   s      €r    r*   zStarcoder2Model.__init__q   s¯   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —L‘L ×!1Ñ!1°t×7HÑ7HÔIˆ�	ùò
s   ÂCÚinputsc                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rq   Úlenrs   r   Úziprt   )r6   rv   r<   rk   r;   ÚlayerÚcs          r    rN   zStarcoder2Model.__call__}   su   € ð
 ×Ñ˜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*   rQ   rR   rN   rS   rT   s   @r    rn   rn   p   s'   ø„ ð
J˜Yõ 
Jð ñà—‘÷r   rn   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                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr%   )r)   r*   r#   r   rn   Úmodelr   r.   r/   r   r   Úlm_headrh   s     €r    r*   zModel.__init__�   sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ$ TÓ*ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r   rv   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r\   )r   r#   r   rq   Ú	as_linearr€   )r6   rv   r<   rl   s       r    rN   zModel.__call__˜   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r   c                 ó.   — | j                   j                  S r\   )r   rs   )r6   s    r    rs   zModel.layers¤   s   € à�z‰z× Ñ Ð r   r\   )r   r   r   r   r*   rQ   rR   rN   Úpropertyrs   rS   rT   s   @r    r}   r}   �   s;   ø„ ðT˜Yõ Tð ñ
à—‘ó
ð ñ!ó ô!r   r}   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerQ   Úmlx.nnr.   r(   r   r   r	   r   ÚModuler"   rV   r_   rn   r}   r   r   r    Ú<module>r‹      s…   ðõ "ß  å Ý ç TÑ Tð ô
%�ó 
%ó ð
%ô.#�—	‘	ô .#ôb2ˆ"�)‰)ô 2ô�r—y‘yô ô6�b—i‘iô ô>!ˆB�I‰Iõ !r   