Ë
    îÿæiu  ã                   óf  — d dl mZ d dlmZmZ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 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ÚDictÚListÚOptionalÚTupleÚUnionNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attention)ÚSuScaledRoPEc                   óð   — 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<   dZee   ed	<   d
Z	eed<   dZ
eed<   dZeeeeeee   f   f      ed<   dZeed<   dZeed<   dZeed<   dZeed<   d„ Zy)Ú	ModelArgsÚ
model_typeÚhidden_sizeÚnum_hidden_layersÚintermediate_sizeÚnum_attention_headsÚrms_norm_epsÚ
vocab_sizeNÚnum_key_value_headsi'  Ú
rope_thetaFÚrope_traditionalÚrope_scalingç      ð?Úpartial_rotary_factori   Úmax_position_embeddingsi   Ú original_max_position_embeddingsÚtie_word_embeddingsc                 óî   ‡ — ‰ j                   €‰ j                  ‰ _         ‰ j                  rKddh}t        ˆ fd„|D «       «      st	        d|› �«      ‚‰ j                  d   dvrt        d«       d ‰ _        y y y )NÚlong_factorÚtypec              3   ó:   •K  — | ]  }|‰j                   v –— Œ y ­w©N)r   )Ú.0ÚkeyÚselfs     €úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/phi3.pyÚ	<genexpr>z*ModelArgs.__post_init__.<locals>.<genexpr>&   s   øè ø€ ÐI¹=°C�s˜d×/Ñ/Ô/¹=ùs   ƒzrope_scaling must contain keys )ÚlongropeÚsuÚlinearzt[WARNING] rope_scaling 'type' currently only supports 'linear', 'su', and 'longrope'; setting rope scaling to false.)r   r   r   ÚallÚ
ValueErrorÚprint)r)   Úrequired_keyss   ` r*   Ú__post_init__zModelArgs.__post_init__    sˆ   ø€ Ø×#Ñ#Ð+Ø'+×'?Ñ'?ˆDÔ$à×ÒØ*¨FÐ3ˆMÜÓI¹=ÓIÔIÜ Ð#BÀ=À/Ð!RÓSÐSà× Ñ  Ñ(Ð0LÑLÜð Kôð %)�Õ!ð	 Mð ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   r   r   Úboolr   r   r	   r   r   r   r    r!   r3   © r4   r*   r   r      s¦   … àƒOØÓØÓØÓØÓØÓØƒOØ)-Ð˜ #™Ó-Ø€J�ÓØ"Ð�dÓ"ØCG€L�(˜4  U¨5°$°u±+Ð+=Ñ%>Ð >Ñ?Ñ@ÓGØ#&Ð˜5Ó&Ø#)Ð˜SÓ)Ø,0Ð$ cÓ0Ø %Ð˜Ó%ó)r4   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 )	Ú	AttentionÚargsc           	      ó¨  •— t         ‰	| �  «        |j                  }|j                  x| _        }|j
                  €J ‚|j
                  x| _        }|j                  | _        |j                  |z  x| _        }|dz  | _	        ||z  d||z  z  z   }t        j                  ||d¬«      | _        t        j                  ||z  |d¬«      | _        t        ||j                  z  «      }|j                   r`|j                   d   dv rOt#        ||j$                  |j&                  |j(                  |j                   d   |j                   d   ¬	«      | _        y d
}|j                   rC|j                   d   dk(  r1t-        |j                   d   t.        «      sJ ‚d|j                   d   z  }t        j0                  ||j2                  |j$                  |¬«      | _        y )Ng      à¿é   F©Úbiasr$   )r,   r-   Úshort_factorr#   )Úbaser   r    rE   r#   r   r.   Úfactorr
   )ÚtraditionalrF   Úscale)ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsr   Úhead_dimrI   ÚnnÚLinearÚqkv_projÚo_projr:   r   r   r   r   r   r    ÚropeÚ
isinstancer;   ÚRoPEr   )
r)   r@   ÚdimrL   rM   rN   Úop_sizeÚrope_dimÚ
rope_scaleÚ	__class__s
            €r*   rK   zAttention.__init__1   s²  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ×'Ñ'Ð3Ð3Ð3Ø'+×'?Ñ'?Ð?ˆŒ˜*Ø!%×!7Ñ!7ˆÔà#'×#3Ñ#3°wÑ#>Ð>ˆŒ˜Ø˜t‘^ˆŒ
à˜HÑ$ q¨J¸Ñ,AÑ'BÑBˆÜŸ	™	 # w°UÔ;ˆŒÜ—i‘i ¨(Ñ 2°C¸eÔDˆŒä�x $×"<Ñ"<Ñ<Ó=ˆØ×Ò ×!2Ñ!2°6Ñ!:Ð>PÑ!PÜ$ØØ—_‘_Ø(,×(DÑ(DØ15×1VÑ1VØ!×.Ñ.¨~Ñ>Ø ×-Ñ-¨mÑ<ôˆD�Ið ˆJØ× Ò  T×%6Ñ%6°vÑ%>À(Ò%JÜ! $×"3Ñ"3°HÑ"=¼uÔEÐEÐEØ ×!2Ñ!2°8Ñ!<Ñ<�
ÜŸ™ØØ ×1Ñ1Ø—_‘_Ø ô	ˆD�Ir4   ÚxÚmaskÚcacheÚreturnc                 ó�  — |j                   \  }}}| j                  |«      }| j                  | j                  z  }t	        j
                  |||| j                  | j                  z  z   gd¬«      \  }	}
}|	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éÿÿÿÿ©Úaxisr   rB   r
   é   )Úoffset)r]   rI   r\   )ÚshaperQ   rL   rN   ÚmxÚsplitrM   ÚreshapeÚ	transposerS   rd   Úupdate_and_fetchr   rI   rR   )r)   r[   r\   r]   ÚBÚLÚDÚqkvÚ	query_posÚqueriesÚkeysÚvaluesÚoutputs                r*   Ú__call__zAttention.__call__W   s˜  € ð —'‘'‰ˆˆ1ˆaà�m‰m˜AÓˆØ—L‘L 4§=¡=Ñ0ˆ	Ü "§¡Ø�)˜Y¨¯©¸4¿=¹=Ñ)HÑHÐIÐPRô!
Ñˆ��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Ó"Ð"r4   ©NN©r5   r6   r7   r   rK   rf   Úarrayr   r   rt   Ú__classcell__©rZ   s   @r*   r?   r?   0   sX   ø„ ð$˜Yõ $ðR $(Ø#ñ	#à�8‰8ð#ð �r—x‘xÑ ð#ð ˜‰}ð	#ð
 
�‰÷#r4   r?   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚMLPc                 óœ   •— t         ‰| �  «        t        j                  |d|z  d¬«      | _        t        j                  ||d¬«      | _        y )NrB   FrC   )rJ   rK   rO   rP   Úgate_up_projÚ	down_proj)r)   rV   Ú
hidden_dimrZ   s      €r*   rK   zMLP.__init__z   s;   ø€ Ü‰ÑÔÜŸI™I c¨1¨z©>ÀÔFˆÔÜŸ™ :¨s¸Ô?ˆ�r4   r^   c                 ó�   — | j                  |«      }t        j                  |dd¬«      \  }}| j                  t	        ||«      «      S )NrB   r`   ra   )r}   rf   rg   r~   r   )r)   r[   Úgates      r*   rt   zMLP.__call__   s=   € Ø×Ñ˜aÓ ˆÜ—(‘(˜1˜a bÔ)‰ˆˆaØ�~‰~œf T¨1›oÓ.Ð.r4   )r5   r6   r7   rK   rf   rw   rt   rx   ry   s   @r*   r{   r{   y   s   ø„ ô@ð
/˜RŸX™X÷ /r4   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 )	ÚTransformerBlockr@   c                 óž  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)rJ   rK   r   r   r?   Ú	self_attnr{   r   ÚmlprO   ÚRMSNormr   Úinput_layernormÚpost_attention_layernormr@   ©r)   r@   rZ   s     €r*   rK   zTransformerBlock.__init__†   s™   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4›ˆŒÜ�t×'Ñ'¨×)?Ñ)?Ó@ˆŒÜ!Ÿz™z¨$×*:Ñ*:À×@QÑ@QÔRˆÔÜ(*¯
©
Ø×Ñ $×"3Ñ"3ô)
ˆÔ%ð ˆ�	r4   r[   r\   r]   r^   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S r&   )r‡   rŠ   rˆ   r‹   )r)   r[   r\   r]   ÚrÚhÚouts          r*   rt   zTransformerBlock.__call__’   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r4   ru   rv   ry   s   @r*   rƒ   rƒ   …   sW   ø„ ð
˜Yõ 
ð $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r4   rƒ   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú	Phi3Modelr@   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   )r@   r…   )rJ   rK   r@   r   r   rO   Ú	Embeddingr   Úembed_tokensÚrangerƒ   Úlayersr‰   r   Únorm)r)   r@   Ú_rZ   s      €r*   rK   zPhi3Model.__init__    s¯   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔä16°t×7MÑ7MÔ1Nó
Ù1N¨AÔ $Ö'Ð1Nñ
ˆŒô —J‘J˜t×/Ñ/°T×5FÑ5FÔGˆ�	ùò
s   ÂCÚinputsc                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )r•   Úlenr—   r   Úzipr˜   )r)   rš   r]   r�   r\   ÚlayerÚcs          r*   rt   zPhi3Model.__call__¬   su   € ð
 ×Ñ˜fÓ%ˆàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©Ó1ˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð �y‰y˜‹|Ðr4   r&   )	r5   r6   r7   r   rK   rf   rw   rt   rx   ry   s   @r*   r’   r’   Ÿ   s'   ø„ ð
H˜Yõ 
Hð ñà—‘÷r4   r’   c                   óX   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelr@   c                 óì   •— t         ‰| �  «        |j                  | _        t        |«      | _        |j
                  s1t        j                  |j                  |j                  d¬«      | _
        || _        y )NFrC   )rJ   rK   r   r’   Úmodelr!   rO   rP   r   r   Úlm_headr@   rŒ   s     €r*   rK   zModel.__init__¿   sR   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ˜t“_ˆŒ
Ø×'Ò'ÜŸ9™9 T×%5Ñ%5°t·±ÈUÔSˆDŒLØˆ�	r4   rš   c                 óÆ   — | j                  ||«      }| j                  j                  r'| j                   j                  j	                  |«      }|S | j                  |«      }|S r&   )r£   r@   r!   r•   Ú	as_linearr¤   )r)   rš   r]   r�   s       r*   rt   zModel.__call__Ç   sW   € ð
 �j‰j˜ Ó'ˆØ�9‰9×(Ò(Ø—*‘*×)Ñ)×3Ñ3°CÓ8ˆCð ˆ
ð —,‘,˜sÓ#ˆCØˆ
r4   c                 ó.   — | j                   j                  S r&   )r£   r—   )r)   s    r*   r—   zModel.layersÓ   s   € à�z‰z× Ñ Ð r4   r&   )r5   r6   r7   r   rK   rf   rw   rt   Úpropertyr—   rx   ry   s   @r*   r¡   r¡   ¾   s9   ø„ ð˜Yõ ð ñ
à—‘ó
ð ñ!ó ô!r4   r¡   )Údataclassesr   Útypingr   r   r   r   r   r	   Úmlx.coreÚcorerf   Úmlx.nnrO   Úactivationsr   rF   r   r   r   Ú
rope_utilsr   r   ÚModuler?   r{   rƒ   r’   r¡   r=   r4   r*   Ú<module>r±      s‘   ðõ "ß :× :å Ý å ß TÑ TÝ $ð ô)�ó )ó ð)ôBF#�—	‘	ô F#ôR	/ˆ"�)‰)ô 	/ô�r—y‘yô ô4�—	‘	ô ô>!ˆB�I‰Iõ !r4   