Ë
    îÿæiï  ã                   ó¤  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 ddlmZmZ ddlmZ e G d„ d«      «       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 G d„ de
j"                  «      Zy)é    N)Ú	dataclass)ÚTupleé   )Úcreate_attention_maskÚscaled_dot_product_attention)Ú	SwitchMLPc                   óŠ   — e Zd ZU 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<   ed„ «       Zy)Ú	ModelArgsÚ
model_typei È  Ú	num_vocabi 
  Ú	model_dimé    Ú	num_headsÚ
num_layersÚ
rotary_dimé   Únum_experts_per_toké   Únum_local_expertsc                 ó¤   —  | di |j                  «       D ��ci c])  \  }}|t        j                  | «      j                  v r||“Œ+ c}}¤ŽS c c}}w )N© )ÚitemsÚinspectÚ	signatureÚ
parameters)ÚclsÚparamsÚkÚvs       úk/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/phixtral.pyÚ	from_dictzModelArgs.from_dict   s]   € áñ 
ð #ŸL™LœNôá*‘D�A�qØœ×)Ñ)¨#Ó.×9Ñ9Ñ9ð �1‘Ø*òñ
ð 	
ùós   ˜.AN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr   r   r   r   r   r   Úclassmethodr!   r   ó    r    r
   r
      sa   … àƒOØ€IˆsÓØ€IˆsÓØ€IˆsÓØ€J�ÓØ€J�ÓØ Ð˜Ó ØÐ�sÓàñ
ó ñ
r)   r
   c                   ó4   ‡ — e Zd Zdededefˆ fd„Zdd„Zˆ xZS )ÚRoPEAttentionÚdimsr   r   c                 óÚ   •— t         ‰| �  «        || _        t        j                  |d¬«      | _        t        j                  |d|z  «      | _        t        j                  ||«      | _        y )NF)Útraditionalé   )	ÚsuperÚ__init__r   ÚnnÚRoPEÚropeÚLinearÚWqkvÚout_proj)Úselfr,   r   r   Ú	__class__s       €r    r1   zRoPEAttention.__init__&   sO   ø€ Ü‰ÑÔà"ˆŒä—G‘G˜J°EÔ:ˆŒ	Ü—I‘I˜d A¨¡HÓ-ˆŒ	ÜŸ	™	 $¨Ó-ˆ�r)   c                 óÞ  — | j                  |«      }t        j                  |dd¬«      \  }}}| j                  }|j                  \  }	}
}|j                  |	|
|d«      j                  dddd«      }|j                  |	|
|d«      j                  dddd«      }|j                  |	|
|d«      j                  dddd«      }|�P| j                  ||j                  ¬«      }| j                  ||j                  ¬«      }|j                  ||«      \  }}n"| j                  |«      }| j                  |«      }|j                  t        j                  «      }t        j                  d|j                  d   z  «      }t        |j                  t        j                  «      |||||¬«      j                  |j                  «      }|j!                  dd«      j                  |	|
d«      }| j#                  |«      S )	Nr/   éÿÿÿÿ©Úaxisr   r   r   )Úoffset)ÚcacheÚscaleÚmask)r6   ÚmxÚsplitr   ÚshapeÚreshapeÚ	transposer4   r>   Úupdate_and_fetchÚastypeÚfloat32ÚmathÚsqrtr   ÚdtypeÚmoveaxisr7   )r8   ÚxrA   r?   ÚqkvÚqueriesÚkeysÚvaluesr   ÚBÚLÚDr@   Úoutputs                 r    Ú__call__zRoPEAttention.__call__/   s´  € Ø�i‰i˜‹lˆÜ "§¡¨¨a°bÔ 9Ñˆ��vð —N‘Nˆ	Ø—-‘-‰ˆˆ1ˆað —/‘/ ! Q¨	°2Ó6×@Ñ@ÀÀAÀqÈ!ÓLˆØ�|‰|˜A˜q )¨RÓ0×:Ñ:¸1¸aÀÀAÓFˆØ—‘  1 i°Ó4×>Ñ>¸qÀ!ÀQÈÓJˆð ÐØ—i‘i °·±�iÓ=ˆGØ—9‘9˜T¨%¯,©,�9Ó7ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—i‘i Ó(ˆGØ—9‘9˜T“?ˆDà—.‘.¤§¡Ó,ˆô —	‘	˜!˜gŸm™m¨BÑ/Ñ/Ó0ˆä-Ø�N‰Nœ2Ÿ:™:Ó&ØØØØØô
÷ ‰&�—‘Ó
ð 	ð —‘  AÓ&×.Ñ.¨q°!°RÓ8ˆà�}‰}˜VÓ$Ð$r)   ©NN)r"   r#   r$   r'   r1   rW   Ú__classcell__©r9   s   @r    r+   r+   %   s"   ø„ ð.˜Sð .¨Sð .¸cõ .÷%%r)   r+   c                   ód   ‡ — e Zd Zdededefˆ fd„Zdej                  dej                  fd„Zˆ xZ	S )ÚMOEÚargsÚdimÚ
hidden_dimc                 óH  •— t         ‰| �  «        || _        || _        |j                  | _        |j                  | _        t        | j                  | j                  | j
                  d¬«      | _        t        j                  |j                  | j
                  d¬«      | _        y )NT)ÚbiasF)r0   r1   r^   r_   r   Únum_expertsr   r   Ú
switch_mlpr2   r5   r   Úgate)r8   r]   r^   r_   r9   s       €r    r1   zMOE.__init__X   s{   ø€ Ü‰ÑÔØˆŒØ$ˆŒØ×1Ñ1ˆÔØ#'×#;Ñ#;ˆÔ Ü#Ø�H‰H�d—o‘o t×'7Ñ'7¸dô
ˆŒô —I‘I˜dŸn™n¨d×.>Ñ.>ÀUÔKˆ�	r)   rN   Úreturnc                 ó`  — | j                  |«      }| j                  }t        j                  t        j                  | |dz
  d¬«      «      dd |…f   }t        j
                  ||d¬«      }t        j                  |dd¬«      }| j                  ||«      }||d   z  j                  d	¬«      }|S )
Nr   r;   )Úkthr=   .r<   T)r=   Úprecise).Néþÿÿÿ)	rd   r   rB   Ústop_gradientÚargpartitionÚtake_along_axisÚsoftmaxrc   Úsum)r8   rN   Úgatesr   ÚindsÚscoresÚys          r    rW   zMOE.__call__c   s¥   € Ø—	‘	˜!“ˆà×$Ñ$ˆÜ×Ñ¤§¡°°¸AÀ¹EÈÔ KÓLÈSÐRTÐSTÐRTÈWÑUˆÜ×#Ñ# E¨4°bÔ9ˆÜ—‘˜F¨°TÔ:ˆà�O‰O˜A˜tÓ$ˆØ�˜	Ñ"Ñ"×'Ñ'¨RÐ'Ó0ˆàˆr)   )
r"   r#   r$   r
   r'   r1   rB   ÚarrayrW   rY   rZ   s   @r    r\   r\   W   s<   ø„ ð	L˜Yð 	L¨Sð 	L¸cõ 	Lð˜"Ÿ(™(ð  r§x¡x÷ r)   r\   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚParallelBlockÚconfigc                 óè   •— t         ‰| �  «        |j                  }|dz  }t        ||j                  |j
                  «      | _        t        j                  |«      | _	        t        |||«      | _        y )Nr   )r0   r1   r   r+   r   r   Úmixerr2   Ú	LayerNormÚlnr\   Úmoe)r8   rv   r,   Úmlp_dimsr9   s       €r    r1   zParallelBlock.__init__r   s^   ø€ Ü‰ÑÔØ×ÑˆØ˜!‘8ˆÜ" 4¨×)9Ñ)9¸6×;LÑ;LÓMˆŒ
Ü—,‘,˜tÓ$ˆŒÜ�v˜t XÓ.ˆ�r)   c                 ó|   — | j                  |«      }| j                  |||«      }| j                  |«      }||z   |z   S ©N)rz   rx   r{   )r8   rN   rA   r?   ÚhÚattn_hÚff_hs          r    rW   zParallelBlock.__call__z   s=   € Ø�G‰G�A‹JˆØ—‘˜A˜t UÓ+ˆØ�x‰x˜‹{ˆØ˜‰}˜qÑ Ð r)   ©r"   r#   r$   r
   r1   rW   rY   rZ   s   @r    ru   ru   q   s   ø„ ð/˜yõ /ö!r)   ru   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚTransformerDecoderrv   c                 ó®   •— t         ‰| �  «        t        |«      | _        t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}| _        y c c}w r~   )r0   r1   ÚEmbdÚembdÚranger   ru   r   )r8   rv   Úir9   s      €r    r1   zTransformerDecoder.__init__‚   sD   ø€ Ü‰ÑÔÜ˜“LˆŒ	Ü16°v×7HÑ7HÔ1IÓJÑ1I¨A”- Õ'Ð1IÑJˆ�ùÒJs   ·Ac                 ó®   — | j                  |«      }|€d gt        | j                  «      z  }t        | j                  |«      D ]  \  }} ||||«      }Œ |S r~   )r‡   Úlenr   Úzip)r8   rN   rA   r?   ÚlayerÚcs         r    rW   zTransformerDecoder.__call__‡   sT   € Ø�I‰I�a‹LˆØˆ=Ø�FœS §¡›[Ñ(ˆEä˜DŸF™F EÖ*‰HˆE�1Ù�a˜˜qÓ!‰Að +àˆr)   r‚   rZ   s   @r    r„   r„   �   s   ø„ ðK˜yõ Kö
r)   r„   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )r†   rv   c                 ó€   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        y r~   )r0   r1   r2   Ú	Embeddingr   r   Úwte©r8   rv   r9   s     €r    r1   zEmbd.__init__’   s,   ø€ Ü‰ÑÔÜ—<‘< × 0Ñ 0°&×2BÑ2BÓCˆ�r)   c                 ó$   — | j                  |«      S r~   )r’   )r8   rN   s     r    rW   zEmbd.__call__–   s   € Ø�x‰x˜‹{Ðr)   r‚   rZ   s   @r    r†   r†   ‘   s   ø„ ðD˜yõ Dör)   r†   c                   ó.   ‡ — e Zd Zdeddfˆ fd„Zd„ Zˆ xZS )Ú
OutputHeadrv   re   Nc                 óÈ   •— t         ‰| �  «        t        j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        y r~   )	r0   r1   r2   ry   r   rz   r5   r   Úlinearr“   s     €r    r1   zOutputHead.__init__›   sB   ø€ Ü‰ÑÔÜ—,‘,˜v×/Ñ/Ó0ˆŒÜ—i‘i × 0Ñ 0°&×2BÑ2BÓCˆ�r)   c                 óB   — | j                  | j                  |«      «      S r~   )r˜   rz   )r8   Úinputss     r    rW   zOutputHead.__call__    s   € Ø�{‰{˜4Ÿ7™7 6›?Ó+Ð+r)   r‚   rZ   s   @r    r–   r–   š   s   ø„ ðD˜yð D¨Tõ Dö
,r)   r–   c                   ó�   ‡ — e Zd Zdefˆ fd„Z	 	 d	dej                  dej                  dej                  fd„Zd„ Ze	d„ «       Z
ˆ xZS )
ÚModelrv   c                 ó’   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |«      | _        || _        y r~   )r0   r1   r   r„   Útransformerr–   Úlm_headr]   r“   s     €r    r1   zModel.__init__¥   s;   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ-¨fÓ5ˆÔÜ! &Ó)ˆŒØˆ�	r)   rN   rA   re   c                 óf   — |€t        ||«      }| j                  |||«      }| j                  |«      S r~   )r   rž   rŸ   )r8   rN   rA   r?   rr   s        r    rW   zModel.__call__¬   s7   € ð ˆ<Ü(¨¨EÓ2ˆDà×Ñ˜Q  eÓ,ˆØ�|‰|˜A‹Ðr)   c                 óp  — d|vr|S t        | j                  j                  «      D ]ˆ  }d|› �}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 Œ~ ŒŠ |S c c}w )	Nz$transformer.h.0.moe.mlp.0.fc1.weightztransformer.h.)Úfc1Úfc2)ÚweightÚscalesÚbiasesra   z.moe.mlp.0.Ú.z	.moe.mlp.z.moe.switch_mlp.)rˆ   r]   r   r   ÚpoprB   Ústack)r8   ÚweightsÚlÚprefixÚnr   ÚeÚto_joins           r    ÚsanitizezModel.sanitize¹   sè   € Ø1¸Ñ@ØˆNÜ�t—y‘y×+Ñ+Ö,ˆAØ% a SÐ)ˆFÛ#�Û?�AØ ˜ ¨Q¨C¨q°°Ð4¸Ò?ô &+¨4¯9©9×+FÑ+FÔ%Gó#á%G ð $ŸK™K¨6¨(°)¸A¸3¸aÀ¸sÀ!ÀAÀ3Ð(GÕHØ%Gð  ð #ô GIÇhÁhÈwÓFW˜ 6 (Ð*:¸1¸#¸Q¸q¸cÐ BÒCñ @ñ $ð -ð ˆùò#s   Á&#B3
c                 ó.   — | j                   j                  S r~   )rž   r   )r8   s    r    ÚlayerszModel.layersÈ   s   € à×Ñ×!Ñ!Ð!r)   rX   )r"   r#   r$   r
   r1   rB   rs   rW   r°   Úpropertyr²   rY   rZ   s   @r    rœ   rœ   ¤   s]   ø„ ð˜yõ ð Øñ	à�8‰8ðð �h‰hðð
 
�‰óòð ñ"ó ô"r)   rœ   )r   rJ   Údataclassesr   Útypingr   Úmlx.coreÚcorerB   Úmlx.nnr2   Úbaser   r   Úswitch_layersr   r
   ÚModuler+   r\   ru   r„   r†   r–   rœ   r   r)   r    Ú<module>r¼      s©   ðó Û Ý !Ý å Ý ç EÝ $ð ÷
ð 
ó ð
ô*/%�B—I‘Iô /%ôdˆ"�)‰)ô ô4!�B—I‘Iô !ô ˜Ÿ™ô ô ˆ2�9‰9ô ô,�—‘ô ,ô&"ˆB�I‰Iõ &"r)   