Ë
    îÿæ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 e G d„ de«      «       Z ee
j$                  d	¬
«      d„ «       Z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y)é    N)Ú	dataclass)Úpartial)ÚAnyÚOptionalé   )ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   óð   — 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d<   eed	<   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Ú
model_typeÚhidden_sizeÚdense_attention_every_n_layersÚff_intermediate_sizeÚgegelu_limitÚnum_hidden_layersÚnum_attention_headsÚlayer_norm_epsilonÚ
vocab_sizeÚnum_key_value_headsç      ð?Úmup_attn_multiplierTÚmup_use_scalingg      $@Úmup_embedding_multiplierg       @Úmup_width_multiplieri@B Úrope_embedding_baseÚrope_position_scaleé@   Úblocksparse_block_sizeé   Úblocksparse_num_local_blocksé   Úblocksparse_vert_strideN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚintÚfloatr   r   Úboolr   r   r   r   r   r!   r#   © ó    úl/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/phi3small.pyr   r      sž   … àƒOØÓØ$'Ó'ØÓØÓØÓØÓØÓØƒOØÓØ!$Ð˜Ó$Ø €O�TÓ Ø&*Ð˜eÓ*Ø"%Ð˜%Ó%Ø!(Ð˜Ó(Ø!$Ð˜Ó$Ø"$Ð˜CÓ$Ø(*Ð  #Ó*Ø#$Ð˜SÔ$r-   r   T)Ú	shapelessc           	      óJ  — t        j                  t        j                  | «      | t        j                  | d |¬«      «      } t        j                  t        j                  |«      |t        j                  || |¬«      «      }| t        j                  d| z  «      z  }||dz   z  S )N)Úa_minÚa_maxg¬Zd;û?r   )ÚmxÚwhereÚisinfÚclipÚsigmoid)Úa_geluÚa_linearÚlimitÚout_gelus       r.   Úgegelu_implr<   %   sˆ   € ä�X‰XÜ
�‰�ÓØÜ
�‰�˜d¨%Ô0ó€Fô
 �x‰xÜ
�‰�ÓØÜ
�‰�  ¨eÔ4ó€Hð
 œŸ
™
 5¨6¡>Ó2Ñ2€HØ�x #‘~Ñ&Ð&r-   c                 óD   — | dd d d…f   | ddd d…f   }}t        |||«      S )N.é   r   )r<   )Úxr:   r8   r9   s       r.   Úgegelur@   5   s4   € Ø˜™c ˜c˜‘{ A c¨1¨4¨a¨4 i¡LˆH€FÜ�v˜x¨Ó/Ð/r-   c            	       ó–   ‡ — e Zd Zdefˆ fd„Zd„ Z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
                  x| _        }||z  | _        |j                  |z  x| _        }t        j                  || j                  d| j                  z  z   |z  «      | _        t        j                  ||«      | _        |j                  r||j                  z  }nt        j                   |«      }d|z  | _        t        j$                  |d|j&                  |j(                  ¬«      | _        ||j,                  z  dk(  rad| _        |j0                  | _        | j0                  dvrt3        d| j0                  › �«      ‚|j4                  | _        |j6                  | _        y d| _        y )	Nr>   r   F)ÚtraditionalÚbaseÚscaler   T)é    r   zUnsupported block size )ÚsuperÚ__init__r   r   Ún_headsr   Ú
n_kv_headsÚ
n_q_per_kvÚhead_dimÚnnÚLinearÚquery_key_valueÚdenser   r   ÚmathÚsqrtrG   ÚRoPEr   r   Úroper   Úblock_sparser   Ú
ValueErrorr!   r#   )	ÚselfrC   Ú	layer_idxÚdimrK   rL   rN   Únorm_factorÚ	__class__s	           €r.   rJ   zAttention.__init__;   sy  ø€ Ü‰ÑÔà×ÑˆØ!%×!9Ñ!9Ð9ˆŒ�wØ'+×'?Ñ'?Ð?ˆŒ˜*Ø! ZÑ/ˆŒà#'×#3Ñ#3°wÑ#>Ð>ˆŒ˜ä!Ÿy™yØ�$—,‘,  T§_¡_Ñ!4Ñ4¸Ñ@ó 
ˆÔô —Y‘Y˜s CÓ(ˆŒ
à×ÒØ" T×%=Ñ%=Ñ=‰KäŸ)™) HÓ-ˆKØ˜;Ñ&ˆŒ
ä—G‘GØØØ×)Ñ)Ø×*Ñ*ô	
ˆŒ	ð �t×:Ñ:Ñ:¸aÒ?Ø $ˆDÔØ*.×*EÑ*EˆDÔ'Ø×*Ñ*°(Ñ:Ü Ø-¨d×.IÑ.IÐ-JÐKóð ð 15×0QÑ0QˆDÔ-Ø+/×+GÑ+GˆDÕ(à %ˆDÕr-   c                 ó¤  — | j                   }| j                  }| j                  }| j                  }||z   dz
  |z  }||z   dz
  |z  }t	        j
                  ||z
  |«      d d d …d f   }	t	        j
                  |«      d   }
t	        j
                  |«      d d d …f   t	        j
                  d|dz   «      d d …d f   z   |z  }|dk(  d d …d d d …f   }|	|
k\  |	|
z
  |k  |z  z  } |j                  | j                  | j                  g|j                  dd  ¢­Ž }t	        j                  t	        j                  ||d¬«      |d¬«      }||d| d …d |…f   fS )Nr   ©NNr   éþÿÿÿéÿÿÿÿ)Úaxis.)r#   r!   r   rK   r3   ÚarangeÚreshaperL   rM   ÚshapeÚrepeat)rY   Úq_lenÚkv_lenÚvert_strideÚlocal_blocksÚ
block_sizerK   Ú	kv_blocksÚq_blocksÚq_posÚk_posÚmask_vert_stridedÚ
block_maskÚ
dense_masks                 r.   Ú_block_sparse_maskzAttention._block_sparse_maskc   sy  € Ø×2Ñ2ˆØ×8Ñ8ˆØ×0Ñ0ˆ
Ø—,‘,ˆà˜jÑ(¨1Ñ,°Ñ;ˆ	Ø˜JÑ&¨Ñ*¨zÑ9ˆÜ—	‘	˜) hÑ.°	Ó:¸4ÂÀD¸=ÑIˆÜ—	‘	˜)Ó$ ZÑ0ˆô �I‰I�iÓ  ¢q Ñ)¬B¯I©I°a¸À1¹Ó,EÂaÈÀgÑ,NÑNØñÐð /°!Ñ3²Q¸ºa°ZÑ@Ðà˜u‘nØ�U‰]˜\Ñ)Ð->Ñ>ñ
ˆ
ð (�Z×'Ñ'Ø�O‰O˜TŸ_™_ð
Ø/9×/?Ñ/?ÀÀÐ/Dò
ˆ
ô —Y‘YÜ�I‰I�j *°2Ô6¸
Èô
ˆ
ð ˜: c¨E¨6©7°G°V°GÐ&;Ñ<Ð<Ð<r-   c           
      óÆ  — ||z  }|j                   d   }|j                   d   }t        j                  ||| j                  | j                  |df«      }t        j
                  |d«      }t        j
                  |d«      }| j                  ||j                   d   «      \  }}	|t        j                  |dd«      z  }
|�|
|z   }
|
t        j                  |	t        j                  d|
j                  «      t        j                  t        d«       |
j                  «      «      z   }
t        j                  |
dd¬«      }
|
|z  }t        j                  ||| j                  |df«      S )Nr   r>   ra   r`   ÚinfT)rb   Úprecise)re   r3   rd   rL   rM   Úexpand_dimsrs   Úswapaxesr4   ÚarrayÚdtyper*   ÚsoftmaxrK   )rY   ÚqueriesÚkeysÚvaluesrG   ÚmaskÚBÚLrq   rr   ÚscoresÚoutputs               r.   Ú_block_sparse_attentionz!Attention._block_sparse_attention~   s0  € Ø˜'‘/ˆØ�M‰M˜!ÑˆØ�M‰M˜!ÑˆÜ—*‘*˜W q¨$¯/©/¸4¿?¹?ÈAÈrÐ&RÓSˆÜ�~‰~˜d AÓ&ˆÜ—‘ ¨Ó*ˆð "&×!8Ñ!8¸¸D¿J¹JÀr¹NÓ!KÑˆ
�JØœ2Ÿ;™; t¨R°Ó4Ñ4ˆð ÐØ˜d‘]ˆFØœ"Ÿ(™(ØœŸ™  F§L¡LÓ1´2·8±8¼UÀ5»\¸MÈ6Ï<É<Ó3Xó
ñ 
ˆô —‘˜F¨°TÔ:ˆà˜&‘ˆô
 �z‰z˜& 1 d§l¡l°A°rÐ":Ó;Ð;r-   r?   r   ÚcacheÚreturnc                 óX  — |j                   \  }}}| j                  |«      }|j                  ||d| j                  dz   | j                  «      }|dd d…d d …f   j                  dd«      }|ddd d …f   }	|ddd d …f   }
|j                  dddd«      }|	j                  dddd«      }	|
j                  dddd«      }
|�P| j                  ||j                  ¬	«      }| j                  |	|j                  ¬	«      }	|j                  |	|
«      \  }	}
n"| j                  |«      }| j                  |	«      }	| j                  r!| j                  ||	|
| j                  |¬
«      }nt        ||	|
|| j                  |¬«      }|j                  dddd«      j                  ||d«      }| j                  |«      S )Nra   r>   .r`   éýÿÿÿr   r   é   )Úoffset)rG   r   )r…   rG   r   )re   rQ   rd   rM   rN   ÚflattenÚ	transposerV   rŠ   Úupdate_and_fetchrW   r„   rG   r
   rR   )rY   r?   r   r…   r€   r�   ÚDÚqkvr|   r}   r~   rƒ   s               r.   Ú__call__zAttention.__call__Ÿ   sª  € ð —'‘'‰ˆˆ1ˆaà×"Ñ" 1Ó%ˆØ�k‰k˜!˜Q  D§O¡O°aÑ$7¸¿¹ÓGˆØ�c˜3˜B˜3¢�kÑ"×*Ñ*¨2¨rÓ2ˆØ�3˜šA�:‰ˆØ�S˜"ša�Z‘ˆð ×#Ñ# A q¨!¨QÓ/ˆØ�~‰~˜a  A qÓ)ˆØ×!Ñ! ! Q¨¨1Ó-ˆàÐØ—i‘i °·±�iÓ=ˆGØ—9‘9˜T¨%¯,©,�9Ó7ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—i‘i Ó(ˆGØ—9‘9˜T“?ˆDà×ÒØ×1Ñ1Ø˜˜v¨T¯Z©Z¸dð 2ó ‰Fô 2Ø˜˜v¨U¸$¿*¹*È4ôˆFð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆØ�z‰z˜&Ó!Ð!r-   r_   )r$   r%   r&   r   rJ   rs   r„   r3   ry   r   r   r�   Ú__classcell__©r]   s   @r.   rB   rB   :   sc   ø„ ð&&˜Yõ &&òP=ò6<ðH $(Ø#ñ	$"à�8‰8ð$"ð �r—x‘xÑ ð$"ð ˜‰}ð	$"ð
 
�‰÷$"r-   rB   c                   ó>   ‡ — e Zd Zˆ fd„Zdej
                  fd„Zˆ xZS )ÚMLPc                 óæ   •— t         ‰| �  «        |j                  }|j                  }|j                  | _        t        j                  |d|z  «      | _        t        j                  ||«      | _        y )Nr>   )	rI   rJ   r   r   r   rO   rP   Úup_projÚ	down_proj)rY   rC   r[   Ú
hidden_dimr]   s       €r.   rJ   zMLP.__init__Ç   sZ   ø€ Ü‰ÑÔØ×ÑˆØ×.Ñ.ˆ
Ø ×-Ñ-ˆÔÜ—y‘y  a¨*¡nÓ5ˆŒÜŸ™ :¨sÓ3ˆ�r-   r†   c                 ón   — | j                  |«      }| j                  t        || j                  «      «      S ©N)r–   r—   r@   r   )rY   r?   s     r.   r�   zMLP.__call__Ï   s+   € Ø�L‰L˜‹OˆØ�~‰~œf Q¨×(9Ñ(9Ó:Ó;Ð;r-   )r$   r%   r&   rJ   r3   ry   r�   r‘   r’   s   @r.   r”   r”   Æ   s   ø„ ô4ð<˜RŸX™X÷ <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 )	ÚTransformerBlockrC   c                 óv  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        ||«      | _        t        |«      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  |j                  ¬«      | _        || _        y )N©Úeps)rI   rJ   r   r   rB   Ú	self_attnr”   ÚmlprO   Ú	LayerNormr   Úinput_layernormÚpost_attention_layernormrC   )rY   rC   rZ   r]   s      €r.   rJ   zTransformerBlock.__init__Õ   s“   ø€ Ü‰ÑÔØ#'×#;Ñ#;ˆÔ Ø×+Ñ+ˆÔÜ" 4¨Ó3ˆŒÜ�t“9ˆŒÜ!Ÿ|™|Ø×Ñ $×"9Ñ"9ô 
ˆÔô )+¯©Ø×ÑØ×'Ñ'ô)
ˆÔ%ð ˆ�	r-   r?   r   r…   r†   c                 óž   — | j                  | j                  |«      ||«      }||z   }| j                  | j                  |«      «      }||z   }|S rš   )r    r£   r¡   r¤   )rY   r?   r   r…   ÚrÚhÚouts          r.   r�   zTransformerBlock.__call__ä   sQ   € ð �N‰N˜4×/Ñ/°Ó2°D¸%Ó@ˆØ�‰EˆØ�H‰H�T×2Ñ2°1Ó5Ó6ˆØ�!‰eˆØˆ
r-   r_   )r$   r%   r&   r   rJ   r3   ry   r   r   r�   r‘   r’   s   @r.   rœ   rœ   Ô   sW   ø„ ð˜Yõ ð$ $(Ø#ñ	
à�8‰8ð
ð �r—x‘xÑ ð
ð ˜‰}ð	
ð
 
�‰÷
r-   rœ   c                   óH   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zˆ xZS )Ú	Phi3ModelrC   c                 óæ  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        | j                  dkD  sJ ‚|j
                  | _        t        j                  |j                  |j                  «      | _	        t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}| _        t        j                  |j                  |j                  ¬«      | _        y c c}w )Nr   )rC   rZ   rž   )rI   rJ   rC   r   r   r   rO   Ú	Embeddingr   Úembed_tokensÚrangerœ   Úlayersr¢   r   Úfinal_layernorm)rY   rC   Úlr]   s      €r.   rJ   zPhi3Model.__init__ò   sÇ   ø€ Ü‰ÑÔØˆŒ	ØŸ/™/ˆŒØ!%×!7Ñ!7ˆÔØ�‰ Ò"Ð"Ð"Ø(,×(EÑ(EˆÔ%ÜŸL™L¨¯©¸$×:JÑ:JÓKˆÔô ˜4×1Ñ1Ô2ó
á2�ô  $°!Ö4Ø2ñ
ˆŒô  "Ÿ|™|Ø×Ñ $×"9Ñ"9ô 
ˆÕùò	
s   Â!C.Úinputsc                 ó$  — | j                  |«      }| j                  r| j                  |z  }|€d gt        | j                  «      z  }t	        ||d   d¬«      }t        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   T)Úreturn_array)r­   r   Úlenr¯   r	   Úzipr°   )rY   r²   r…   r§   r   ÚlayerÚcs          r.   r�   zPhi3Model.__call__  s“   € ð
 ×Ñ˜fÓ%ˆØ×(Ò(Ø×-Ñ-°Ñ1ˆAàˆ=Ø�FœS §¡Ó-Ñ-ˆEä$ Q¨¨a©¸tÔDˆä˜DŸK™K¨Ö/‰HˆE�1Ù�a˜˜qÓ!‰Að 0ð ×#Ñ# AÓ&Ð&r-   rš   )	r$   r%   r&   r   rJ   r3   ry   r�   r‘   r’   s   @r.   rª   rª   ñ   s%   ø„ ð
˜Yõ 
ð& ñ'à—‘÷'r-   rª   c                   ó^   ‡ — e Zd Zdefˆ fd„Z	 ddej                  fd„Zed„ «       Z	d„ Z
ˆ xZS )ÚModelrC   c           	      óø   •— t         ‰| �  «        |j                  | _        t        |«      | _        || _        |j                  | _        t        j                  g d¢t        t        dd«      «      z   «      | _        y )N)i ‡ i¢‡ i£‡ i¤‡ i¨‡ i©‡ i«‡ i ˆ )rI   rJ   r   rª   ÚmodelrC   r   r3   ry   Úlistr®   Ú_dummy_tokenizer_ids)rY   rC   r]   s     €r.   rJ   zModel.__init__  sa   ø€ Ü‰ÑÔØŸ/™/ˆŒÜ˜t“_ˆŒ
ØˆŒ	Ø$(×$=Ñ$=ˆÔ!Ü$&§H¡HÚ<Ü”5˜ Ó(Ó)ñ*ó%
ˆÕ!r-   r²   c                 óÜ   — | j                  ||«      }| j                   j                  j                  |«      }| j                  r|| j                  z  }t	        d«       || j
                  <   |S )Nru   )r¼   r­   Ú	as_linearr   r*   r¾   )rY   r²   r…   r¨   s       r.   r�   zModel.__call__"  sb   € ð
 �j‰j˜ Ó'ˆØ�j‰j×%Ñ%×/Ñ/°Ó4ˆØ×$Ò$Ø˜×1Ñ1Ñ1ˆCÜ*/°«,¨ˆˆD×%Ñ%Ñ&Øˆ
r-   c                 ó.   — | j                   j                  S rš   )r¼   r¯   )rY   s    r.   r¯   zModel.layers.  s   € à�z‰z× Ñ Ð r-   c                 ó`   — |j                  «       D ��ci c]  \  }}d|vsŒ||“Œ c}}S c c}}w )Nzself_attn.rotary_emb.inv_freq)Úitems)rY   ÚweightsÚkÚvs       r.   ÚsanitizezModel.sanitize2  s<   € ð %Ÿ]™]œ_ô
Ù,‘T�Q˜Ð0OÐWXÒ0XˆAˆq‰D˜_ò
ð 	
ùó 
s   ”*¡*rš   )r$   r%   r&   r   rJ   r3   ry   r�   Úpropertyr¯   rÇ   r‘   r’   s   @r.   rº   rº     s>   ø„ ð	
˜Yõ 	
ð ñ
à—‘ó
ð ñ!ó ð!ö
r-   rº   )rS   Údataclassesr   Ú	functoolsr   Útypingr   r   Úmlx.coreÚcorer3   Úmlx.nnrO   rF   r   r	   r
   r   Úcompiler<   r@   ÚModulerB   r”   rœ   rª   rº   r,   r-   r.   Ú<module>rÑ      s²   ðó Ý !Ý ß  å Ý ç TÑ Tð ô%�ó %ó ð%ñ, 	ˆ�‰˜tÔ$ñ'ó %ð'ò0ô
I"�—	‘	ô I"ôX<ˆ"�)‰)ô <ô�r—y‘yô ô:"'�—	‘	ô "'ôJ 
ˆB�I‰Iõ  
r-   