Ë
    îÿæi  ã                   óJ  — 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 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é   )Úswiglu)Ú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	<   eed
<   eed<   eed<   eed<   eed<   y)Ú	ModelArgsÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚnum_key_value_headsÚrms_norm_epsÚ
vocab_sizeÚattention_biasÚhead_dimÚmax_position_embeddingsÚmlp_biasÚ
model_typeÚ
rope_thetaÚtie_word_embeddingsN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚfloatÚboolÚstr© ó    úi/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/helium.pyr   r      sR   … àÓØÓØÓØÓØÓØÓØƒOØÓØƒMØ Ó ØƒNØƒOØÓØÔ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 )	ÚHeliumAttentionÚargsc                 ó^  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  €J ‚|j
                  x| _        }|j                  |z  }|dz  | _        t        j                  |||z  |j                  ¬«      | _        t        j                  |||z  |j                  ¬«      | _        t        j                  |||z  |j                  ¬«      | _        t        j                  ||z  |d¬«      | _        t        j                  |d|j                   ¬«      | _        y )Ng      à¿©ÚbiasFT)ÚtraditionalÚbase)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsÚscaleÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projÚRoPEr   Úrope)Úselfr(   Údimr0   r1   r   Ú	__class__s         €r%   r/   zHeliumAttention.__init__    sø   ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ×'Ñ'Ð3Ð3Ð3Ø'+×'?Ñ'?Ð?ˆŒ˜*à×#Ñ# wÑ.ˆØ˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸d×>QÑ>QÔRˆŒÜ—i‘i  Z°(Ñ%:À×ATÑATÔUˆŒÜ—i‘i  Z°(Ñ%:À×ATÑATÔUˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒÜ—G‘G˜H°$¸T¿_¹_ÔMˆ�	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@   r2   r?   )Úshaper5   r6   r7   Úreshaper0   Ú	transposer1   r:   rF   Úupdate_and_fetchr
   r2   r8   )r;   r>   r?   r@   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r%   Ú__call__zHeliumAttention.__call__1   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   rR   Ú__classcell__©r=   s   @r%   r'   r'      sY   ø„ ðN˜Yõ Nð( $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r$   r'   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )Ú	HeliumMLPr(   c                 óÈ  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        j
                  | j                  | j                  |j                  ¬«      | _        t	        j
                  | j                  | j                  |j                  ¬«      | _        t	        j
                  | j                  | j                  |j                  ¬«      | _	        y )Nr*   )
r.   r/   r   r   r3   r4   r   Ú	gate_projÚup_projÚ	down_proj©r;   r(   r=   s     €r%   r/   zHeliumMLP.__init__P   s£   ø€ Ü‰ÑÔØ×+Ñ+ˆÔØ!%×!7Ñ!7ˆÔäŸ™Ø×Ñ˜d×4Ñ4¸4¿=¹=ô
ˆŒô —y‘yØ×Ñ˜d×4Ñ4¸4¿=¹=ô
ˆŒô Ÿ™Ø×"Ñ" D×$4Ñ$4¸4¿=¹=ô
ˆ�r$   r>   rA   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)r^   r   r\   r]   )r;   r>   s     r%   rR   zHeliumMLP.__call___   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr$   ©	r   r   r   r   r/   rU   rV   rR   rW   rX   s   @r%   rZ   rZ   O   s-   ø„ ð
˜Yõ 
ðJ˜"Ÿ(™(ð J r§x¡x÷ Jr$   rZ   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 )	ÚHeliumDecoderLayerr(   c                 óD  •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _
        t        j                  |j                  |j                  ¬«      | _        y )N©Úeps)r.   r/   r   r'   Ú	self_attnrZ   Úmlpr3   ÚRMSNormr   Úinput_layernormÚpost_attention_layernormr_   s     €r%   r/   zHeliumDecoderLayer.__init__d   st   ø€ Ü‰ÑÔØ×+Ñ+ˆÔä(¨Ó.ˆŒÜ˜T“?ˆŒÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r$   r>   r?   r@   rA   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S ra   )rh   rk   ri   rl   )r;   r>   r?   r@   ÚrÚhÚouts          r%   rR   zHeliumDecoderLayer.__call__o   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r$   rS   rT   rX   s   @r%   rd   rd   c   sW   ø„ ð	
˜Yõ 	
ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r$   rd   c                   ó`   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  fd„Zˆ xZS )ÚHeliumModelr(   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   rf   )r.   r/   r   r   r3   Ú	Embeddingr   Úembed_tokensÚrangerd   Úlayersrj   r   Únorm)r;   r(   Ú_r=   s      €r%   r/   zHeliumModel.__init__}   s£   ø€ Ü‰ÑÔØ!%×!7Ñ!7ˆÔØŸ/™/ˆŒà�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä9>¸t×?UÑ?UÔ9VÓWÑ9V°AÔ)¨$Õ/Ð9VÑWˆŒä—J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò Xs   Â	CÚinputsrA   c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )ru   Úlenrw   r	   Úziprx   )r;   rz   r@   ro   r?   ÚlayerÚcs          r%   rR   zHeliumModel.__call__‰   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr$   ra   rb   rX   s   @r%   rr   rr   |   s5   ø„ ð
H˜Yõ 
Hð ñà—‘ðð 
�‰÷	r$   rr   c                   óp   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelr(   c                 ór  •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _
        |j                  s2t        j                  |j                  |j                  d¬«      | _
        y y )NFr*   )r.   r/   r(   r   rr   Úmodelr   r3   r4   r   Úlm_headr   r_   s     €r%   r/   zModel.__init__œ   s�   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒä  Ó&ˆŒ
àŸ/™/ˆŒÜ—y‘y ×!1Ñ!1°4·?±?ÈÔOˆŒà×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r$   rz   rA   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S ra   )rƒ   r(   r   ru   Ú	as_linearr„   )r;   rz   r@   rp   s       r%   rR   zModel.__call__©   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r$   c                 ó.   — | j                   j                  S ra   )rƒ   rw   )r;   s    r%   rw   zModel.layersµ   s   € à�z‰z× Ñ Ð r$   ra   )r   r   r   r   r/   rU   rV   rR   Úpropertyrw   rW   rX   s   @r%   r�   r�   ›   sI   ø„ ðT˜Yõ Tð  ñ
à—‘ð
ð 
�‰ó	
ð ñ!ó ô!r$   r�   )Údataclassesr   Útypingr   r   Úmlx.coreÚcorerU   Úmlx.nnr3   Úactivationsr   r-   r   r	   r
   r   ÚModuler'   rZ   rd   rr   r�   r#   r$   r%   Ú<module>r�      sŠ   ðõ "ß  å Ý å ß TÑ Tð ô�ó ó ðô"-#�b—i‘iô -#ô`J�—	‘	ô Jô(˜Ÿ™ô ô2�"—)‘)ô ô>!ˆB�I‰Iõ !r$   