Ë
    îÿæ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 ddlmZmZmZ ddlmZ dd	lmZ e G d
„ de«      «       Z G d„ dej2                  «      Zej6                  d„ «       Z G d„ dej2                  «      Z G d„ dej2                  «      Z G d„ dej2                  «      Z G d„ dej2                  «      Z  G d„ dej2                  «      Z! G d„ dej2                  «      Z"y)é    )Ú	dataclass)Úpartial)ÚAnyÚDictÚOptionalÚUnionNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)Úinitialize_rope)Ú	SwitchGLUc                   óZ  — 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   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<   dZ	ee   ed<   dZ
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eeeef   f      ed<   dZeed<   y)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚrms_norm_epsÚ
vocab_sizeÚmax_position_embeddingsÚnum_key_value_headsÚfirst_k_dense_replaceÚmoe_intermediate_sizeÚn_routed_expertsÚn_shared_expertsÚnorm_topk_probÚnum_experts_per_tokÚ
rope_thetaÚrouted_scaling_factorNÚhead_dim)Únoaux_tcÚscoring_funcr	   Ún_groupÚ
topk_groupFÚattention_biasÚmlp_biasÚrope_scalingÚtie_word_embeddings)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   Úboolr#   r%   r&   r'   r(   r)   r*   r   r   r+   © ó    úh/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/dots1.pyr   r      sß   … àƒOØÓØÓØÓØÓØÓØƒOØ% c™]Ó*ØÓØÓØÓØÓØÓØÓØÓØÓØ Ó Ø"€Hˆh�s‰mÓ"Ø%€L�#Ó%Ø€GˆX�c‰]ÓØ !€J�˜‘Ó!Ø €N�DÓ Ø€HˆdÓØ;?€L�(˜4  U¨5°#¨:Ñ%6Ð 6Ñ7Ñ8Ó?Ø %Ð˜Ô%r5   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 )	ÚDots1AttentionÚargsc                 óÒ  •— t         ‰| �  «        |j                  }|j                  x| _        }|j
                  x| _        }|j                  xs |j                  |z  }|dz  | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  |||z  d¬«      | _        t        j                  ||z  |d¬«      | _        t        j                  ||j                   ¬«      | _        t        j                  ||j                   ¬«      | _        t'        ||j(                  d|j*                  |j,                  ¬«      | _        y )Ng      à¿F©Úbias©Úeps)ÚbaseÚtraditionalÚscaling_configr   )ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr#   ÚscaleÚnnÚLinearÚq_projÚk_projÚv_projÚo_projÚRMSNormr   Úq_normÚk_normr   r!   r*   r   Úrope)Úselfr9   ÚdimrD   rE   r#   Ú	__class__s         €r6   rC   zDots1Attention.__init__.   s   ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*à—=‘=Ò? D×$4Ñ$4¸Ñ$?ˆØ˜t‘^ˆŒ
ä—i‘i  W¨xÑ%7¸eÔDˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i  Z°(Ñ%:ÀÔGˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒä—j‘j ¨t×/@Ñ/@ÔAˆŒÜ—j‘j ¨t×/@Ñ/@ÔAˆŒÜ#ØØ—‘ØØ×,Ñ,Ø$(×$@Ñ$@ô
ˆ�	r5   Ú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)rV   rF   rU   )ÚshaperI   rJ   rK   rN   ÚreshaperD   Ú	transposerO   rE   rP   r\   Úupdate_and_fetchr   rF   rL   )rQ   rT   rU   rV   ÚBÚLÚDÚqueriesÚkeysÚvaluesÚoutputs              r6   Ú__call__zDots1Attention.__call__G   sƒ  € ð —'‘'‰ˆˆ1ˆaà $§¡¨A£°·±¸A³ÀÇÁÈAÃ�v�ˆà—+‘+˜gŸo™o¨a°°D·L±LÀ"ÓEÓF×PÑPØˆq�!�Qó
ˆð �{‰{˜4Ÿ<™<¨¨1¨d¯o©o¸rÓBÓC×MÑMØˆq�!�Qó
ˆð —‘  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Ó"Ð"r5   ©NN)r,   r-   r.   r   rC   ÚmxÚarrayr   r   rh   Ú__classcell__©rS   s   @r6   r8   r8   -   sW   ø„ ð
˜Yõ 
ð8 $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r5   r8   c                 ó¬  — |}t        j                  | j                  t         j                  «      «      }|}	||z   }||z
  }|dk7  r«t        j                  |d|df¬«      }t        j
                  |dd¬«      j                  dd¬«      }
t        j                  |
|dz
  d	¬
«      dd |…d d …f   }t        j                  ||t        j                  d«      d	¬«      }t        j                  |d	d«      }|}t        j                  | |dz
  d¬
«      dd |…f   }t        j                  |	|d¬«      }|dkD  r|r|j                  dd¬«      }||z  }||z  }||fS )Nr   rY   )Úaxisr]   rZ   ©ro   T)ro   Úkeepdimsr	   éþÿÿÿ)Úkthro   .g        )rj   ÚsigmoidÚastypeÚfloat32Ú	unflattenÚtopkÚsumÚargpartitionÚput_along_axisrk   ÚflattenÚtake_along_axis)ÚgatesÚe_score_correction_biasÚtop_kr&   r'   r"   r   ÚkÚscoresÚorig_scoresÚgroup_scoresÚ	group_idxÚindsÚdenominators                 r6   Úgroup_expert_selectrˆ   h   sJ  € ð 	€AÜ�Z‰Z˜Ÿ™¤R§Z¡ZÓ0Ó1€FØ€KØÐ-Ñ-€FØ�*Ñ€AØˆA‚vÜ—‘˜f¨2°g¸r°]ÔCˆÜ—w‘w˜v q¨rÔ2×6Ñ6¸BÈÐ6ÓNˆÜ—O‘O L°a¸!±eÀ"ÔEÀcÈ2ÈAÈ2ÊqÀjÑQˆ	Ü×"Ñ" 6¨9´b·h±h¸s³mÈ"ÔMˆÜ—‘˜F B¨Ó+ˆà€AÜ�?‰?˜F˜7¨¨A©°BÔ7¸¸R¸a¸R¸Ñ@€DÜ×Ñ ¨T¸Ô;€FØˆq‚y‘^Ø—j‘j b°4�jÓ8ˆØ˜+Ñ%ˆØÐ+Ñ+€Fà�ˆ<Ðr5   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDots1TopkRouterr9   c                 ó˜  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        t        j                  | j
                  |j                  f«      | _        t        j                  | j
                  f«      | _        y ©N)rB   rC   r    r€   r   r   r"   r&   r'   rj   Úzerosr   Úweightr   ©rQ   r9   rS   s     €r6   rC   zDots1TopkRouter.__init__‹   s–   ø€ Ü‰ÑÔØ×-Ñ-ˆŒ
Ø"×1Ñ1ˆÔØ $× 5Ñ 5ˆÔØ%)×%?Ñ%?ˆÔ"Ø—|‘|ˆŒØŸ/™/ˆŒÜ—h‘h × 5Ñ 5°t×7GÑ7GÐHÓIˆŒÜ')§x¡x°×1FÑ1FÐ0HÓ'IˆÕ$r5   c           	      óÊ   — t        || j                  j                  z  | j                  | j                  | j
                  | j                  | j                  | j                  «      S rŒ   )	rˆ   rŽ   ÚTr   r€   r&   r'   r"   r   ©rQ   rT   s     r6   rh   zDots1TopkRouter.__call__–   sO   € Ü"Ø�—‘—‘ÑØ×(Ñ(Ø�J‰JØ�L‰LØ�O‰OØ×&Ñ&Ø×Ñó
ð 	
r5   ©r,   r-   r.   r   rC   rh   rl   rm   s   @r6   rŠ   rŠ   Š   s   ø„ ð	J˜Yõ 	Jö	
r5   rŠ   c                   óP   ‡ — e Zd Z	 ddededefˆ fd„Zdej                  fd„Zˆ xZ	S )ÚDots1MLPr9   r   r   c                 óØ  •— t         ‰| �  «        |€|j                  n|| _        |€|j                  n|| _        t	        j
                  | j                  | j                  |j                  ¬«      | _        t	        j
                  | j                  | j                  |j                  ¬«      | _        t	        j
                  | j                  | j                  |j                  ¬«      | _	        y )Nr;   )
rB   rC   r   r   rG   rH   r)   Ú	gate_projÚup_projÚ	down_proj)rQ   r9   r   r   rS   s       €r6   rC   zDots1MLP.__init__£   s¹   ø€ ô 	‰ÑÔà/:Ð/B˜4×+Ò+ÈˆÔà&7Ð&?ˆD×"Ò"ÐEVð 	Ôô Ÿ™Ø×Ñ˜d×4Ñ4¸4¿=¹=ô
ˆŒô —y‘yØ×Ñ˜d×4Ñ4¸4¿=¹=ô
ˆŒô Ÿ™Ø×"Ñ" D×$4Ñ$4¸4¿=¹=ô
ˆ�r5   rW   c                 ót   — | j                  t        | j                  |«      | j                  |«      «      «      S rŒ   )r™   r
   r—   r˜   r’   s     r6   rh   zDots1MLP.__call__·   s)   € Ø�~‰~œf T§^¡^°AÓ%6¸¿¹ÀQ»ÓHÓIÐIr5   ri   )
r,   r-   r.   r   r1   rC   rj   rk   rh   rl   rm   s   @r6   r•   r•   ¢   s5   ø„ àQUñ
Øð
Ø,/ð
ØKNõ
ð(J˜RŸX™X÷ Jr5   r•   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚDots1MoEr9   c                 ó8  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |j
                  |j                  |j                  «      | _        t        |«      | _
        t        ||j                  |j                  z  ¬«      | _        y )N)r9   r   )rB   rC   r    r   r   r   r   r   ÚexpertsrŠ   Úgater•   Úshared_expertsr�   s     €r6   rC   zDots1MoE.__init__¼   sƒ   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø $× 5Ñ 5ˆÔä Ø×ÑØ×&Ñ&Ø×!Ñ!ó
ˆŒô $ DÓ)ˆŒ	ä&ØØ"×8Ñ8¸4×;PÑ;PÑPô
ˆÕr5   c                 óô   — | j                  |«      \  }}| j                  ||«      }||d   z  j                  d¬«      j                  |j                  «      }| j
                  �|| j                  |«      z   }|S )N).Nrr   rp   )rŸ   rž   ry   ru   Údtyper   r    )rQ   rT   r†   r‚   Úys        r6   rh   zDots1MoE.__call__Î   su   € Ø—y‘y “|‰ˆˆfØ�L‰L˜˜DÓ!ˆØ�˜	Ñ"Ñ"×'Ñ'¨RÐ'Ó0×7Ñ7¸¿¹Ó@ˆØ× Ñ Ð,Ø�D×'Ñ'¨Ó*Ñ*ˆAàˆr5   r“   rm   s   @r6   rœ   rœ   »   s   ø„ ð
˜Yõ 
ö$r5   rœ   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 )
ÚDots1DecoderLayerr9   Ú	layer_idxc                 ób  •— t         ‰| �  «        t        |«      | _        ||j                  k\  rt        |«      | _        nt        |«      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        y ©Nr=   )rB   rC   r8   Ú	self_attnr   rœ   Úmlpr•   rG   rM   r   r   Úinput_layernormÚpost_attention_layernorm©rQ   r9   r¦   rS   s      €r6   rC   zDots1DecoderLayer.__init__Ù   s   ø€ Ü‰ÑÔÜ'¨Ó-ˆŒà˜×2Ñ2Ò2Ü “~ˆD�Hä “~ˆDŒHä!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÕ%r5   rT   rU   rV   rW   c                 óš   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   S rŒ   )r©   r«   rª   r¬   )rQ   rT   rU   rV   ÚrÚhs         r6   rh   zDots1DecoderLayer.__call__ç   sL   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�1‰uˆr5   ri   )r,   r-   r.   r   r1   rC   rj   rk   r   r   rh   rl   rm   s   @r6   r¥   r¥   Ø   s^   ø„ ð
˜Yð 
°3õ 
ð" $(Ø#ñ		à�8‰8ð	ð �r—x‘xÑ ð	ð ˜‰}ð		ð
 
�‰÷	r5   r¥   c                   ó`   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  fd„Zˆ xZS )Ú
Dots1Modelr9   c                 óN  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w r¨   )rB   rC   rG   Ú	Embeddingr   r   Úembed_tokensÚranger   r¥   ÚlayersrM   r   Únormr­   s      €r6   rC   zDots1Model.__init__ô   sƒ   ø€ Ü‰ÑÔÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔô # 4×#9Ñ#9Ô:ó
á:�	ô ˜d IÕ.Ø:ñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò	
s   ÁB"ÚinputsrW   c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rµ   Úlenr·   r   Úzipr¸   )rQ   r¹   rV   r°   rU   ÚlayerÚcs          r6   rh   zDots1Model.__call__ý   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr5   rŒ   )	r,   r-   r.   r   rC   rj   rk   rh   rl   rm   s   @r6   r²   r²   ó   s5   ø„ ðH˜Yõ Hð ñà—‘ðð 
�‰÷	r5   r²   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zd„ Ze	d„ «       Z
ˆ xZS )ÚModelr9   c                 óî   •— t         ‰| �  «        || _        |j                  | _        t	        |«      | _        |j                  s2t        j                  |j                  |j                  d¬«      | _        y y )NFr;   )rB   rC   r9   r   r²   Úmodelr+   rG   rH   r   r   Úlm_headr�   s     €r6   rC   zModel.__init__  sX   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒÜ Ó%ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆD�Lð (r5   r¹   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S rŒ   )rÂ   r9   r+   rµ   Ú	as_linearrÃ   )rQ   r¹   rV   Úouts       r6   rh   zModel.__call__  sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r5   c                 óH  — | j                   j                  r|j                  dd «       t        | j                   j                  «      D ]¥  }d|› �}|| j                   j
                  k\  sŒ"dD ]  \  }}dD ]u  }|› d|› d|› �|v sŒt        | j                   j                  «      D �cg c]  }|j                  |› d|› d|› d|› �«      ‘Œ  }}t        j                  |«      ||› d|› d|› �<   Œw Œ� Œ§ |j                  «       D ��	ci c]  \  }}	d|vsŒ||	“Œ c}	}S c c}w c c}	}w )	Nzlm_head.weightzmodel.layers.))Úw1r—   )Úw2r™   )Úw3r˜   )rŽ   ÚscalesÚbiasesz.mlp.experts.0.Ú.z.mlp.experts.zrotary_emb.inv_freq)
r9   r+   Úpopr¶   r   r   r   rj   ÚstackÚitems)
rQ   ÚweightsÚlÚprefixÚnÚmr�   ÚeÚto_joinÚvs
             r6   ÚsanitizezModel.sanitize$  s=  € Ø�9‰9×(Ò(Ø�K‰KÐ(¨$Ô/ä�t—y‘y×2Ñ2Ö3ˆAØ$ Q CÐ(ˆFØ�D—I‘I×3Ñ3Ó3ó‘D�A�qó
 <˜Ø$˜X _°Q°C°q¸¸Ð<ÀÒGô */¨t¯y©y×/IÑ/IÔ)Jó'á)J Að !(§¡¨v¨h°mÀAÀ3ÀaÈÀsÈ!ÈAÈ3Ð,OÕ PØ)Jð $ð 'ô HJÇxÁxÐPWÓGX˜G v h¨m¸A¸3¸aÀ¸sÐ$CÒDñ <ñð 4ð  ")§¡¤ÔS¡™˜˜AÐ4IÐQRÒ4R��1‘ ÒSÐSùò'ùó Ts   Â%#D
ÄDÄDc                 ó.   — | j                   j                  S rŒ   )rÂ   r·   )rQ   s    r6   r·   zModel.layers:  s   € à�z‰z× Ñ Ð r5   rŒ   )r,   r-   r.   r   rC   rj   rk   rh   rÙ   Úpropertyr·   rl   rm   s   @r6   rÀ   rÀ     sA   ø„ ðT˜Yõ Tð ñ
à—‘ó
òTð, ñ!ó ô!r5   rÀ   )#Údataclassesr   Ú	functoolsr   Útypingr   r   r   r   Úmlx.coreÚcorerj   Úmlx.nnrG   Úactivationsr
   r?   r   r   r   Ú
rope_utilsr   Úswitch_layersr   r   ÚModuler8   Úcompilerˆ   rŠ   r•   rœ   r¥   r²   rÀ   r4   r5   r6   Ú<module>rç      sÏ   ðõ "Ý ß -Ó -å Ý å ß TÑ TÝ 'Ý $ð ô&�ó &ó ð&ô88#�R—Y‘Yô 8#ðv ‡�ñó ðôB
�b—i‘iô 
ô0Jˆr�y‰yô Jô2ˆr�y‰yô ô:˜Ÿ	™	ô ô6�—‘ô ô8-!ˆB�I‰Iõ -!r5   