Ë
    îÿæiÐ   ã                   ó„  — d dl mZ d dl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 G d„ de
j(                  «      Zy)é    )Ú	dataclass)ÚAnyÚListÚOptionalNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Ú	SwitchGLUc                   óÈ   — 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   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Ú
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚattention_biasÚmlp_only_layersÚnum_expertsÚnum_experts_per_tokÚdecoder_sparse_stepÚn_shared_expertsÚmoe_intermediate_sizeÚrms_norm_epsÚ
vocab_sizeÚnum_key_value_headsÚ
rope_thetaÚmax_position_embeddingsÚnorm_topk_probN)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚboolr   Úfloat© ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/Klear.pyr   r      sp   … àƒOØÓØÓØÓØÓØÓØ˜#‘YÓØÓØÓØÓØÓØÓØÓØƒ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 )	ÚKlearAttentionÚargsc                 ó,  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  |j                  z  | _        | j
                  dz  | _        t        j                  |j                  | j                  | j
                  z  |j                  ¬«      | _
        t        j                  |j                  | j                  | j
                  z  |j                  ¬«      | _        t        j                  |j                  | j                  | j
                  z  |j                  ¬«      | _        t        j                  | j                  | j
                  z  |j                  |j                  ¬«      | _        t        j                  | j
                  |j                  ¬«      | _        t        j                  | j
                  |j                  ¬«      | _        t        j$                  | j
                  d|j&                  ¬«      | _        y )Ng      à¿©Úbias©ÚepsF)ÚtraditionalÚbase)ÚsuperÚ__init__r   r   r   Úhead_dimÚscaleÚnnÚLinearr   Úq_projÚk_projÚv_projÚo_projÚRMSNormr   Úq_normÚk_normÚRoPEr   Úrope©Úselfr.   Ú	__class__s     €r+   r7   zKlearAttention.__init__%   sƒ  ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø#'×#;Ñ#;ˆÔ à×(Ñ(¨D×,DÑ,DÑDˆŒØ—]‘] DÑ(ˆŒ
ä—i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×ÑØ×$Ñ$ t§}¡}Ñ4Ø×$Ñ$ô
ˆŒô
 —i‘iØ×$Ñ$ t§}¡}Ñ4Ø×ÑØ×$Ñ$ô
ˆŒô —j‘j §¡°D×4EÑ4EÔFˆŒÜ—j‘j §¡°D×4EÑ4EÔFˆŒä—G‘GØ�M‰MØØ—‘ô
ˆ�	r*   ÚxÚmaskÚcacheÚreturnc                 ón  — |j                   \  }}}| j                  |«      | j                  |«      | j                  |«      }	}}| j	                  |j                  ||| j                  d«      «      j                  dddd«      }| j                  |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   r9   rI   )Úshaper<   r=   r>   rA   Úreshaper   Ú	transposerB   r   rD   rP   Úupdate_and_fetchr   r9   r?   )rF   rH   rI   rJ   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r+   Ú__call__zKlearAttention.__call__K   s�  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—+‘+Ø�O‰O˜A˜q $×":Ñ":¸BÓ?ó
ç
‰)�A�q˜!˜QÓ
ð 	ð �{‰{˜4Ÿ<™<¨¨1¨d×.FÑ.FÈÓKÓL×VÑVØˆq�!�Qó
ˆð —‘  1 d×&>Ñ&>ÀÓC×MÑMØˆq�!�Qó
ˆð ÐØ—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+   r-   r-   $   sX   ø„ ð$
˜Yõ $
ðR $(Ø#ñ	 #à�8‰8ð #ð �r—x‘xÑ ð #ð ˜‰}ð	 #ð
 
�‰÷ #r*   r-   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚKlearMLPc                 óÐ   •— t         ‰| �  «        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        t        j                  ||d¬«      | _        y ©NFr0   )r6   r7   r:   r;   Ú	gate_projÚ	down_projÚup_proj)rF   ÚdimÚ
hidden_dimrG   s      €r+   r7   zKlearMLP.__init__o   sJ   ø€ Ü‰ÑÔÜŸ™ 3¨
¸Ô?ˆŒÜŸ™ :¨s¸Ô?ˆŒÜ—y‘y  j°uÔ=ˆ�r*   rK   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S ©N)rh   r   rg   ri   )rF   rH   s     r+   r\   zKlearMLP.__call__u   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr*   )r!   r"   r#   r7   r_   r`   r\   ra   rb   s   @r+   rd   rd   n   s   ø„ ô>ðJ˜RŸX™X÷ Jr*   rd   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚKlearSparseMoeBlockr.   c                 ód  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _	        t        |j                  |j                  |j                  «      | _        t        |j                  |j                  |j                  z  ¬«      | _        t        j                  |j                  d«      | _        t#        j$                  | j                  ft"        j&                  ¬«      | _        y )NFr0   )rk   rN   )Údtype)r6   r7   r    r   r   Útop_kr:   r;   r   Úgater   r   Úexpertsrd   r   Úshared_expertsÚcoefficientr_   ÚzerosÚfloat32Úexpert_biasrE   s     €r+   r7   zKlearSparseMoeBlock.__init__z   sã   ø€ Ü‰ÑÔØ"×1Ñ1ˆÔØ×+Ñ+ˆÔØ×-Ñ-ˆŒ
ä—I‘I˜d×.Ñ.°×0@Ñ0@ÀuÔMˆŒ	Ü Ø×Ñ˜d×8Ñ8¸$×:JÑ:Jó
ˆŒô 'Ø×ÑØ×1Ñ1°D×4IÑ4IÑIô
ˆÔô Ÿ9™9 T×%5Ñ%5°qÓ9ˆÔÜŸ8™8 T×%5Ñ%5Ð$7¼r¿z¹zÔJˆÕr*   rH   rK   c                 óÌ  — t        j                  | j                  |«      j                  t         j                  «      «      }|| j
                  j                  d«      z   }| j                  }t        j                  | |dz
  d¬«      dd |…f   }t        j                  ||d¬«      }| j                  r|t        j                  |dd¬«      z  }|j                  |j                  «      }| j                  ||«      }||d	   z  j                  d
¬«      }t        j                  | j                  |«      dd¬«      }	| j!                  |«      }
||	dd d…f   z  |
|	ddd …f   z  z   }|S )N)r   r   rM   r   rM   )ÚkthÚaxis.)r|   T)r|   Úkeepdims).Néþÿÿÿ)r|   Úprecise)r_   Úsigmoidrs   Úastyperx   ry   rR   rr   ÚargpartitionÚtake_along_axisr    Úsumrq   rt   Úsoftmaxrv   ru   )rF   rH   Úrouting_weightsÚbiased_weightsÚkÚindsÚscoresÚ
expert_outÚ	y_expertsÚcoefÚsharedÚys               r+   r\   zKlearSparseMoeBlock.__call__‹   s?  € ÜŸ*™* T§Y¡Y¨q£\×%8Ñ%8¼¿¹Ó%DÓEˆØ(¨4×+;Ñ+;×+CÑ+CÀJÓ+OÑOˆØ�J‰JˆÜ�‰ ˜°A¸±EÀÔCÀCÈÈ!ÈÀGÑLˆÜ×#Ñ# O°TÀÔCˆØ×ÒØœbŸf™f V°"¸tÔDÑDˆFØ—‘˜qŸw™wÓ'ˆØ—\‘\ ! TÓ*ˆ
Ø &¨Ñ"3Ñ3×8Ñ8¸bÐ8ÓAˆ	Ü�z‰z˜$×*Ñ*¨1Ó-°BÀÔEˆØ×$Ñ$ QÓ'ˆØ˜˜S " 1 "˜W™Ñ%¨°°c¸1¹2°g±Ñ(>Ñ>ˆØˆr*   )	r!   r"   r#   r   r7   r_   r`   r\   ra   rb   s   @r+   ro   ro   y   s,   ø„ ðK˜Yõ Kð"˜"Ÿ(™(ð  r§x¡x÷ r*   ro   c            	       óŽ   ‡ — e Zd Zde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 )
ÚKlearDecoderLayerr.   Ú	layer_idxc                 óÒ  •— t         ‰| �  «        t        |«      | _        ||j                  vr5|j
                  dkD  r&|dz   |j                  z  dk(  rt        |«      | _        n%t        |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y )Nr   r   r2   )r6   r7   r-   Ú	self_attnr   r   r   ro   Úmlprd   r   r   r:   r@   r   Úinput_layernormÚpost_attention_layernorm)rF   r.   r’   rG   s      €r+   r7   zKlearDecoderLayer.__init__�   s´   ø€ Ü‰ÑÔÜ'¨Ó-ˆŒà˜T×1Ñ1Ñ1Ø×Ñ˜qÒ  i°!¡m°t×7OÑ7OÑ%OÐSTÒ%Tä*¨4Ó0ˆD�Hä × 0Ñ 0°$×2HÑ2HÓIˆDŒHä!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r*   rH   rI   rJ   rK   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S rm   )r”   r–   r•   r—   )rF   rH   rI   rJ   ÚrÚhÚouts          r+   r\   zKlearDecoderLayer.__call__­   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r*   r]   )r!   r"   r#   r   r&   r7   r_   r`   r   r   r\   ra   rb   s   @r+   r‘   r‘   œ   s^   ø„ ð
˜Yð 
°3õ 
ð& $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r*   r‘   c                   ój   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dee   dej                  fd„Z	ˆ xZ
S )Ú
KlearModelr.   c                 óP  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w )N)r.   r’   r2   )r6   r7   r:   Ú	Embeddingr   r   Úembed_tokensÚranger   r‘   Úlayersr@   r   Únorm)rF   r.   ÚirG   s      €r+   r7   zKlearModel.__init__»   sƒ   ø€ Ü‰ÑÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔô ˜4×1Ñ1Ô2ó
á2�ô  4°1Ö5Ø2ñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò	
s   ÁB#ÚinputsrJ   rK   c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )r    Úlenr¢   r
   Úzipr£   )rF   r¥   rJ   rš   rI   ÚlayerÚcs          r+   r\   zKlearModel.__call__Ä   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr*   rm   r^   rb   s   @r+   r�   r�   º   sC   ø„ ðH˜Yõ Hð  $ñà—‘ðð ˜‰}ðð 
�‰÷	r*   r�   c                   óˆ   ‡ — e Zd Zdefˆ fd„Z	 d
dej                  dee   fd„Z	d„ Z
ed„ «       Zed„ «       Zed	„ «       Zˆ xZS )ÚModelr.   c                 óÔ   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        y rf   )r6   r7   r.   r   r�   Úmodelr:   r;   r   r   Úlm_headrE   s     €r+   r7   zModel.__init__×   sJ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ Ó%ˆŒ
Ü—y‘y ×!1Ñ!1°4·?±?ÈÔOˆ�r*   r¥   rJ   c                 óH   — | j                  ||«      }| j                  |«      S rm   )r®   r¯   )rF   r¥   rJ   r›   s       r+   r\   zModel.__call__Þ   s#   € ð
 �j‰j˜ Ó'ˆØ�|‰|˜CÓ Ð r*   c                 óB  — d|vr|S t        | j                  j                  «      D ]q  }d|› d�}dD ]d  }t        | j                  j                  «      D �cg c]  }|j	                  |› d|› d|› d�«      ‘Œ }}t        j                  |«      ||› d|› d�<   Œf Œs |S c c}w )Nz-model.layers.0.mlp.experts.0.gate_proj.weightzmodel.layers.z.mlp.experts)rg   ri   rh   Ú.z.weight)r¡   r.   r   r   Úpopr_   Ústack)rF   ÚweightsÚlÚprefixÚnameÚeÚstackeds          r+   ÚsanitizezModel.sanitizeæ   s»   € Ø:À'ÑIØˆNä�t—y‘y×2Ñ2Ö3ˆAØ$ Q C |Ð4ˆFÛ=�ô # 4§9¡9×#8Ñ#8Ô9óá9˜ð —K‘K 6 (¨!¨A¨3¨a°¨v°WÐ =Õ>Ø9ð ð ô 68·X±X¸gÓ5F�˜6˜( ! D 6¨Ð1Ò2ñ >ð 4ð ˆùòs   Á!Bc                 ó.   — | j                   j                  S rm   )r®   r¢   )rF   s    r+   r¢   zModel.layersõ   s   € à�z‰z× Ñ Ð r*   c                 ó   — d„ }|S )Nc                 ó0   — | j                  d«      rdddœS y)Nzmlp.gateé@   é   )Ú
group_sizeÚbitsT)Úendswith)ÚpathÚ_s     r+   Ú	predicatez(Model.quant_predicate.<locals>.predicateû   s   € Ø�}‰}˜ZÔ(Ø&(°!Ñ4Ð4Ør*   r)   ©rF   rÆ   s     r+   Úquant_predicatezModel.quant_predicateù   s   € ò	ð
 Ðr*   c                 ó   — d„ }|S )Nc                 ó
   — d| vS )Nry   r)   )rˆ   s    r+   rÆ   z'Model.cast_predicate.<locals>.predicate  s   € Ø ¨Ð)Ð)r*   r)   rÇ   s     r+   Úcast_predicatezModel.cast_predicate  s   € ò	*ð Ðr*   rm   )r!   r"   r#   r   r7   r_   r`   r   r   r\   r»   Úpropertyr¢   rÈ   rË   ra   rb   s   @r+   r¬   r¬   Ö   sv   ø„ ðP˜Yõ Pð  $ñ!à—‘ð!ð ˜‰}ó!òð ñ!ó ð!ð ñó ðð ñó ôr*   r¬   )Údataclassesr   Útypingr   r   r   Úmlx.coreÚcorer_   Úmlx.nnr:   Úactivationsr   r5   r	   r
   r   Úswitch_layersr   r   ÚModuler-   rd   ro   r‘   r�   r¬   r)   r*   r+   Ú<module>rÕ      s£   ðõ "ß &Ñ &å Ý å ß TÑ TÝ $ð ô�ó ó ðô*G#�R—Y‘Yô G#ôTJˆr�y‰yô Jô ˜"Ÿ)™)ô  ôF˜Ÿ	™	ô ô<�—‘ô ô81ˆB�I‰Iõ 1r*   