Ë
    îÿæiÀ-  ã                   ó   — d dl Z d dlmZ 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 ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZ e G d„ de«      «       Zdd„Z ee
j<                  d¬«      d dedefd„«       Z  G d„ dejB                  «      Z" G d„ dejB                  «      Z# G d„ dejB                  «      Z$ G d„ dejB                  «      Z% G d„ dejB                  «      Z& G d„ dejB                  «      Z'y)!é    N)Ú	dataclass)Úpartial)ÚAnyÚOptional)Úshard_inplaceÚshard_linearÚsum_gradientsé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚKVCacheÚRotatingKVCache)Úinitialize_rope)Ú	SwitchGLUc                   óà   — e Zd ZU 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Úgpt_ossÚ
model_typeé$   Únum_hidden_layersé€   Únum_local_expertsé   Únum_experts_per_toki€ Ú
vocab_sizegñhãˆµøä>Úrms_norm_epsi@  Úhidden_sizeÚintermediate_sizeé@   Úhead_dimÚnum_attention_headsé   Únum_key_value_headsÚsliding_windowiðI Ú
rope_thetaNÚrope_scalingÚlayer_types)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__r   Úintr   r   r   r   Úfloatr   r   r!   r"   r$   r%   r&   r'   r   r(   Úlist© ó    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/gpt_oss.pyr   r      sž   … à€J�ÓØÐ�sÓØ Ð�sÓ Ø Ð˜Ó Ø€J�ÓØ€L�%ÓØ€K�ÓØ!Ð�sÓ!Ø€HˆcÓØ!Ð˜Ó!Ø Ð˜Ó Ø€N�CÓØ€J�ÓØ€L�#ÓØ€K�Ôr2   r   c                 ó€   — t        j                  | | |¬«      }|d| d…f   }t        j                  | ||¬«      }||fS )zMLX equivalent of torch.topk)ÚkthÚaxis.N©r6   )ÚmxÚargpartitionÚtake_along_axis)ÚaÚkr6   Úpartitioned_indicesÚtop_k_indicesÚtop_k_valuess         r3   Úmlx_topkr@   &   sH   € äŸ/™/¨!°!°¸$Ô?Ðà'¨¨a¨R©S¨Ñ1€Mä×%Ñ% a¨¸TÔB€LØ˜Ð&Ð&r2   T)Ú	shapelessÚalphaÚlimitc                 ó²   — t        j                  |d |¬«      }t        j                  | | |¬«      } ||z  }t        j                  |«      }||z  }|| dz   z  S )N)Úa_minÚa_maxr
   )r8   ÚclipÚsigmoid)Úx_linearÚx_glurB   rC   Ú
glu_scaledÚsigÚout_glus          r3   ÚswiglurN   0   sY   € ô �G‰G�E ¨UÔ3€EÜ�w‰w�x¨ v°UÔ;€Hà˜‘€JÜ
�*‰*�ZÓ
 €Cà�c‰k€Gà�h ‘lÑ#Ð#r2   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSwiGLUc                 ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €r3   rT   zSwiGLU.__init__?   s   ø€ Ü‰ÑÕr2   c                 ó   — t        ||«      S rR   )rN   )rU   ÚxÚgates      r3   Ú__call__zSwiGLU.__call__B   s   € Ü�a˜‹Ðr2   )r)   r*   r+   rT   rZ   Ú__classcell__©rV   s   @r3   rP   rP   >   s   ø„ ôör2   rP   c                   óv   ‡ — e Zd Zdefˆ fd„Zddej                  dej                  dej                  fd„Zˆ xZS )ÚAttentionBlockÚconfigc                 ó°  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        |j                  |j                  z  | _        t        j                  |j                  f«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  |j                  |j                  | j                  z  d¬«      | _        t        j                  | j                  |j                  z  |j                  d¬«      | _        dt!        j"                  |j                  «      z  | _        t'        | j                  |j(                  d|j*                  ¬«      | _        y )NT©Úbiasr
   F)ÚtraditionalÚscaling_config)rS   rT   r!   r"   r$   Únum_key_value_groupsr8   ÚzerosÚsinksÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projÚmathÚsqrtÚsm_scaler   r&   r'   Úrope©rU   r_   rV   s     €r3   rT   zAttentionBlock.__init__G   si  ø€ Ü‰ÑÔàŸ™ˆŒØ#)×#=Ñ#=ˆÔ Ø#)×#=Ñ#=ˆÔ à×&Ñ&¨&×*DÑ*DÑDð 	Ô!ô —X‘X˜v×9Ñ9Ð;Ó<ˆŒ
ä—i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQUô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQUô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQUô
ˆŒô —i‘iØ�M‰M˜F×6Ñ6Ñ6¸×8JÑ8JÐQUô
ˆŒð œDŸI™I f§o¡oÓ6Ñ6ˆŒä#Ø�M‰MØ×ÑØØ!×.Ñ.ô	
ˆ�	r2   rX   ÚmaskÚreturnc           	      ó  — |j                   \  }}}| j                  }| j                  }| j                  |«      j	                  ||d|«      j                  dd«      }	| j                  |«      j	                  ||d|«      j                  dd«      }
| j                  |«      j	                  ||d|«      j                  dd«      }|�P| j                  |	|j                  ¬«      }	| j                  |
|j                  ¬«      }
|j                  |
|«      \  }
}n"| j                  |	«      }	| j                  |
«      }
t        |	|
||| j                  || j                  ¬«      }| j                  |j                  dd«      j	                  ||d«      «      S )Néÿÿÿÿr
   é   )Úoffset)rs   rg   )Úshaper!   r$   rj   ÚreshapeÚswapaxesrk   rl   rq   rx   Úupdate_and_fetchr   rp   rg   rm   )rU   rX   rs   ÚcacheÚBÚLÚ_ÚDÚHkÚqr<   ÚvÚv_hats                r3   rZ   zAttentionBlock.__call__j   sT  € Ø—'‘'‰ˆˆ1ˆaØ�M‰MˆØ×%Ñ%ˆà�K‰K˜‹N×"Ñ" 1 a¨¨QÓ/×8Ñ8¸¸AÓ>ˆØ�K‰K˜‹N×"Ñ" 1 a¨¨QÓ/×8Ñ8¸¸AÓ>ˆØ�K‰K˜‹N×"Ñ" 1 a¨¨QÓ/×8Ñ8¸¸AÓ>ˆàÐØ—	‘	˜! E§L¡L�	Ó1ˆAØ—	‘	˜! E§L¡L�	Ó1ˆAØ×)Ñ)¨!¨QÓ/‰DˆA‰qà—	‘	˜!“ˆAØ—	‘	˜!“ˆAä,Øˆq�!�U˜DŸM™M°¸D¿J¹Jô
ˆð �{‰{˜5Ÿ>™>¨!¨QÓ/×7Ñ7¸¸1¸bÓAÓBÐBr2   rR   ©	r)   r*   r+   r   rT   r8   ÚarrayrZ   r[   r\   s   @r3   r^   r^   F   s:   ø„ ð!
˜yõ !
ñFC˜"Ÿ(™(ð C¨"¯(©(ð CÀ2Ç8Á8÷ Cr2   r^   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚMLPBlockr_   c                 ón  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        |j                  |j                  |j                  t        «       d¬«      | _        t        j                  |j                  |j                  d¬«      | _        d | _        y )NT)Ú
input_dimsÚhidden_dimsÚnum_expertsÚ
activationrb   ra   )rS   rT   r   r   r   r   r   rP   Úexpertsrh   ri   ÚrouterÚsharding_grouprr   s     €r3   rT   zMLPBlock.__init__ƒ   s’   ø€ Ü‰ÑÔà!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔØ#)×#=Ñ#=ˆÔ ä Ø×)Ñ)Ø×0Ñ0Ø×0Ñ0Ü“xØô
ˆŒô —i‘i × 2Ñ 2°F×4LÑ4LÐSWÔXˆŒØ"ˆÕr2   rX   rt   c                 óÆ  — | j                   � t        | j                   «      |«      }| j                  |«      }t        || j                  d¬«      \  }}t        j                  |dd¬«      }| j                  ||«      }|t        j                  |d¬«      z  }|j                  d¬«      }| j                   �+t
        j                  j                  || j                   ¬«      }|S )Nrv   )r<   r6   T)r6   Úpreciser7   éþÿÿÿ©Úgroup)r‘   r	   r�   r@   r   r8   Úsoftmaxr�   Úexpand_dimsÚsumÚdistributedÚall_sum)rU   rX   Úgr�   ÚindicesÚexpert_weightsÚys          r3   rZ   zMLPBlock.__call__”   sÃ   € Ø×ÑÐ*Ø2”˜d×1Ñ1Ó2°1Ó5ˆAà�K‰K˜‹NˆÜ# A¨×)AÑ)AÈÔKÑˆ�ÜŸ™ G°"¸dÔCˆð �L‰L˜˜GÓ$ˆà”—‘˜~°BÔ7Ñ7ˆà�E‰E�rˆE‹Nˆà×ÑÐ*Ü—‘×&Ñ& q°×0CÑ0CÐ&ÓDˆAàˆr2   r†   r\   s   @r3   r‰   r‰   ‚   s*   ø„ ð#˜yõ #ð"˜"Ÿ(™(ð  r§x¡x÷ r2   r‰   c                   óv   ‡ — e Zd Zdefˆ fd„Zddej                  dej                  dej                  fd„Zˆ xZS )ÚTransformerBlockr_   c                 ó  •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y rR   )rS   rT   r^   Ú	self_attnr‰   Úmlprh   ÚRMSNormr   r   Úinput_layernormÚpost_attention_layernormrr   s     €r3   rT   zTransformerBlock.__init__ª   sg   ø€ Ü‰ÑÔÜ'¨Ó/ˆŒÜ˜FÓ#ˆŒÜ!Ÿz™z¨&×*<Ñ*<¸f×>QÑ>QÓRˆÔÜ(*¯
©
Ø×Ñ × 3Ñ 3ó)
ˆÕ%r2   rX   rs   rt   c                 ó®   — |}| j                  |«      }| j                  |||«      }||z   }|}| j                  |«      }| j                  |«      }||z   }|S rR   )r¦   r£   r§   r¤   )rU   rX   rs   r}   Úresiduals        r3   rZ   zTransformerBlock.__call__³   sb   € ØˆØ× Ñ  Ó#ˆØ�N‰N˜1˜d EÓ*ˆØ�q‰LˆàˆØ×)Ñ)¨!Ó,ˆØ�H‰H�Q‹KˆØ�q‰LˆØˆr2   rR   r†   r\   s   @r3   r¡   r¡   ©   s5   ø„ ð
˜yõ 
ñ
˜"Ÿ(™(ð 
¨"¯(©(ð 
À2Ç8Á8÷ 
r2   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 )ÚGptOssMoeModelÚargsc                 ó:  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  «      | _	        |j                  xs ddg|j                  dz  z  | _
        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _        |j                  | _        | j                  j#                  d«      | _        | j                  j#                  d«      | _        y c c}w )NÚsliding_attentionÚfull_attentionrw   )rS   rT   rh   Ú	Embeddingr   r   Úembed_tokensr¥   r   Únormr(   r   Úranger¡   Úlayersr%   Úwindow_sizeÚindexÚswa_idxÚga_idx)rU   r¬   r€   rV   s      €r3   rT   zGptOssMoeModel.__init__Á   sí   ø€ Ü‰ÑÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔÜ—J‘J˜t×/Ñ/°×1BÑ1BÓCˆŒ	Ø×+Ñ+ò *ØØð0
ð ×#Ñ# qÑ(ñ0*ˆÔô 8=¸T×=SÑ=SÔ7TÓUÑ7T°!Ô'¨Õ-Ð7TÑUˆŒØ×.Ñ.ˆÔØ×'Ñ'×-Ñ-Ð.AÓBˆŒØ×&Ñ&×,Ñ,Ð-=Ó>ˆ�ùò Vs   Â,DÚinputsÚinput_embeddingsc                 ó€  — |�|}n| j                  |«      }|€d gt        | j                  «      z  }t        ||| j                     «      }t        ||| j
                     | j                  ¬«      }t        | j                  || j                  «      D ]  \  }}}	|	dk(  r|n|}
 |||
|«      }Œ | j                  |«      }|S )N)rµ   r¯   )
r±   Úlenr´   r   r¸   r·   rµ   Úzipr(   r²   )rU   r¹   r}   rº   rX   Ú	full_maskÚswa_maskÚlayerÚcÚ
layer_typers   s              r3   rZ   zGptOssMoeModel.__call__Î   sÆ   € ð Ð'Ø ‰Aà×!Ñ! &Ó)ˆAàˆ=Ø�FœS §¡Ó-Ñ-ˆEä)¨!¨U°4·;±;Ñ-?Ó@ˆ	Ü(Øˆu�T—\‘\Ñ"°×0@Ñ0@ô
ˆô %(¨¯©°U¸D×<LÑ<LÖ$MÑ ˆE�1�jØ *Ð.>Ò >‘9ÀHˆDÙ�a˜˜qÓ!‰Að %Nð �I‰I�a‹LˆØˆr2   )NN)
r)   r*   r+   r   rT   r8   r‡   r   rZ   r[   r\   s   @r3   r«   r«   À   s;   ø„ ð?˜Yõ ?ð  Ø/3ñ	à—‘ðð # 2§8¡8Ñ,÷	r2   r«   c                   ó®   ‡ — e Zd Zdefˆ fd„Zddej                  fd„Zd„ Zdde	ej                  j                     fd„Zed„ «       Zed	„ «       Zd
„ Zˆ xZS )ÚModelr¬   c                 óÔ   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        y )NFra   )rS   rT   r¬   r   r«   Úmodelrh   ri   r   r   Úlm_head)rU   r¬   rV   s     €r3   rT   zModel.__init__é   sJ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ# DÓ)ˆŒ
Ü—y‘y ×!1Ñ!1°4·?±?ÈÔOˆ�r2   r¹   c                 óD   — | j                  | j                  ||«      «      S rR   )rÇ   rÆ   )rU   r¹   r}   s      r3   rZ   zModel.__call__ð   s   € Ø�|‰|˜DŸJ™J v¨uÓ5Ó6Ð6r2   c                 óò  — t        d„ |j                  «       D «       «      r|S i }|j                  «       D �]¾  \  }}d|v rÅd|vrÁd|v r@|j                  t        j
                  «      j                  d«      }|j                  dd«      }d|v r|j                  dd«      }t	        j                  |d	d d d
…d d …f   «      ||j                  dd«      <   t	        j                  |d	dd d
…d d …f   «      ||j                  dd«      <   ŒÐd|v red|vrad|v r@|j                  t        j
                  «      j                  d«      }|j                  dd«      }d|v r|j                  dd«      }|||<   �Œ9d|v rbt	        j                  |d	d d d
…f   «      ||j                  dd«      <   t	        j                  |d	dd d
…f   «      ||j                  dd«      <   �ŒŸd|v r|||j                  dd«      <   �Œº|||<   �ŒÁ |S )Nc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)zgate_proj.weightNr1   )Ú.0r<   s     r3   Ú	<genexpr>z!Model.sanitize.<locals>.<genexpr>ô   s   è ø€ Ð?±¨1Ð! QÔ&±ùs   ‚Úgate_up_projrb   Ú_blocksr”   z.weightÚ_scalesz.scales.rw   Ú	gate_projr
   Úup_projÚ	down_projÚgate_up_proj_biaszgate_proj.biaszup_proj.biasÚdown_proj_biaszdown_proj.bias)	ÚanyÚkeysÚitemsÚviewr8   Úuint32ÚflattenÚreplaceÚ
contiguous)rU   ÚweightsÚnew_weightsr<   r„   s        r3   ÚsanitizezModel.sanitizeó   só  € ÜÑ?°·±´Ó?Ô?ØˆNàˆØ—M‘M—O‰DˆAˆqØ Ñ" v°Q¡Ø ‘>ØŸ™œrŸy™yÓ)×1Ñ1°"Ó5�AØŸ	™	 )¨YÓ7�AØ ‘>ØŸ	™	 )¨YÓ7�AÜFHÇmÁmØ�c™3˜Q˜3¢�k‘NóG�˜AŸI™I n°kÓBÑCô EGÇMÁMØ�c˜1˜4˜a˜4¢�l‘OóE�˜AŸI™I n°iÓ@ÒAð  Ñ! f°A¡oØ ‘>ØŸ™œrŸy™yÓ)×1Ñ1°"Ó5�AØŸ	™	 )¨YÓ7�AØ ‘>ØŸ	™	 )¨YÓ7�AØ!"�˜A“Ø$¨Ñ)ä—M‘M ! C©¨1¨ H¡+Ó.ð ˜AŸI™IÐ&9Ð;KÓLÑMô —M‘M ! C¨¨¨A¨ I¡,Ó/ð ˜AŸI™IÐ&9¸>ÓJÓKð " QÑ&ØMN�˜AŸI™IÐ&6Ð8HÓIÓJà!"�˜A“ð= $ð@ Ðr2   r–   c                 ó€  — |xs t         j                  j                  «       }|j                  «       }|j	                  «       }| j
                  j                  D �]b  }t        |j                  j                  d|¬«      |j                  _	        t        |j                  j                  d|¬«      |j                  _
        t        |j                  j                  d|¬«      |j                  _        t        |j                  j                  d|¬«      |j                  _        |j                  xj                  |z  c_        |j                  xj                  |z  c_        |j                  j                  |j                  j                  z  |j                  _        |j                  j                   |j                  j                  |z  |j                  j                  |dz   z   |j                  _        t#        |j$                  j&                  j(                  d|¬«       t#        |j$                  j&                  j*                  d|¬«       |j$                  j&                  j*                  xj,                  |z  c_        t#        |j$                  j&                  j.                  d|¬«       ||j$                  _        �Œe y )Nzall-to-sharded)Úshardingr–   zsharded-to-allr
   r•   )r8   rš   ÚinitÚsizeÚrankrÆ   r´   r   r£   rj   rk   rl   rm   r"   r$   re   rg   r   r¤   r�   rÐ   rÒ   rb   rÑ   r‘   )rU   r–   ÚNÚRrÀ   s        r3   ÚshardzModel.shard  s  € ØÒ.œŸ™×,Ñ,Ó.ˆØ�J‰J‹LˆØ�J‰J‹Lˆà—Z‘Z×&Õ&ˆEÜ%1Ø—‘×&Ñ&Ð1AÈô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð1AÈô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð1AÈô&ˆE�O‰OÔ"ô &2Ø—‘×&Ñ&Ð1AÈô&ˆE�O‰OÔ"ð �O‰O×/Ò/°AÑ5Õ/Ø�O‰O×/Ò/°AÑ5Õ/à—‘×3Ñ3Ø—?‘?×6Ñ6ñ7ð �O‰OÔ0ð
 %*§O¡O×$9Ñ$9Ø—‘×3Ñ3ØñØ—o‘o×9Ñ9Ø�q‘5ñð%ˆE�O‰OÔ!ô ˜%Ÿ)™)×+Ñ+×5Ñ5Ð7GÈuÕUÜ˜%Ÿ)™)×+Ñ+×5Ñ5Ð7GÈuÕUØ�I‰I×Ñ×'Ñ'×,Ò,°Ñ1Õ,ÜØ—	‘	×!Ñ!×)Ñ)Ð4DÈEõð (-ˆE�I‰IÖ$ñE 'r2   c                 ó.   — | j                   j                  S rR   )rÆ   r´   )rU   s    r3   r´   zModel.layersC  s   € à�z‰z× Ñ Ð r2   c                 ó   — d„ }|S )Nc                 ó0   — | j                  d«      rdddœS y)Nr�   r    r#   )Ú
group_sizeÚbitsT)Úendswith)Úpathr€   s     r3   Ú	predicatez(Model.quant_predicate.<locals>.predicateI  s   € Ø�}‰}˜XÔ&Ø&(°!Ñ4Ð4Ør2   r1   )rU   rï   s     r3   Úquant_predicatezModel.quant_predicateG  s   € ò	ð
 Ðr2   c                 óÜ   — g }| j                   j                  D ]P  }|dk(  r|j                  t        «       «       Œ"|j                  t	        | j
                  j                  ¬«      «       ŒR |S )Nr¯   )Úmax_size)rÆ   r(   Úappendr   r   r¬   r%   )rU   ÚcachesÚlts      r3   Ú
make_cachezModel.make_cacheP  sT   € ØˆØ—*‘*×(Ô(ˆBØÐ%Ò%Ø—‘œg›iÕ(à—‘œo°t·y±y×7OÑ7OÔPÕQð	 )ð
 ˆr2   rR   )r)   r*   r+   r   rT   r8   r‡   rZ   rß   r   rš   ÚGrouprç   Úpropertyr´   rð   rö   r[   r\   s   @r3   rÄ   rÄ   è   sp   ø„ ðP˜Yõ Pñ7˜rŸx™xó 7ò%ñN'-˜8 B§N¡N×$8Ñ$8Ñ9ó '-ðR ñ!ó ð!ð ñó ðör2   rÄ   )rv   )g¬Zd;û?g      @)(rn   Údataclassesr   Ú	functoolsr   Útypingr   r   Úmlx.coreÚcorer8   Úmlx.nnrh   Úmlx.nn.layers.distributedr   r   r	   Úbaser   r   r   r}   r   r   Ú
rope_utilsr   Úswitch_layersr   r   r@   Úcompiler/   rN   ÚModulerP   r^   r‰   r¡   r«   rÄ   r1   r2   r3   Ú<module>r     sâ   ðó Ý !Ý ß  å Ý ß PÑ Pç TÑ Tß +Ý 'Ý $ð ô�ó ó ðó&'ñ 	ˆ�‰˜tÔ$ñ
$ 5ð 
$¸ò 
$ó %ð
$ôˆR�Y‰Yô ô9C�R—Y‘Yô 9Côx$ˆr�y‰yô $ôN�r—y‘yô ô.%�R—Y‘Yô %ôPoˆB�I‰Iõ or2   