Ë
    îÿæiD  ã                   óD  — d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 e G d„ d«      «       Z	 	 	 	 ddeded	ee   d
eej                     deej                     f
d„Z	 dd	ee   defd„Zdd„Z	 	 ddej                  deej                  ej                  ej                  f   deej                  ej                  ej                  f   dedeej                     dededej                  fd„Z	 ddedeej                     deej                     dej                  fd„Zy)é    N)Ú	dataclass)ÚAnyÚOptional)Útree_mapc                   ó   — e Zd Zed„ «       Zy)ÚBaseModelArgsc                 ó¤   —  | 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       úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/base.pyÚ	from_dictzBaseModelArgs.from_dict   s]   € áñ 
ð #ŸL™LœNôá*‘D�A�qØœ×)Ñ)¨#Ó.×9Ñ9Ñ9ð �1‘Ø*òñ
ð 	
ùós   ˜.AN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r
   ó    r   r   r      s   „ àñ
ó ñ
r   r   ÚNÚoffsetÚwindow_sizeÚright_paddingÚleft_paddingc                 ó4  — t        j                  || z   «      }|rt        j                  ||| z   «      n|}|d d …d f   }|d    }||k\  }|�||||z   k  z  }|�"||t        j                  || z   |z
  d«      k  z  }|�|t        j                  |d«      |k  z  }|S )N)é   é   é   )ÚmxÚarangeÚexpand_dims)r   r   r   r   r   ÚrindsÚlindsÚmasks           r   Úcreate_causal_maskr)      sµ   € ô �I‰I�f˜q‘jÓ!€EÙ-3ŒB�I‰I�f˜f q™jÔ)¸€EØ’!�T�'‰N€EØ�$‰K€EØ�E‰>€DØÐØ�u˜u {Ñ2Ñ2Ñ3ˆØÐ Ø�uœrŸ~™~¨v¸©z¸]Ñ.JÈIÓVÑVÑWˆØÐØ”r—~‘~ l°IÓ>À%ÑGÑHˆØ€Kr   Úreturn_arrayc                 óž   — | j                   d   }|r t        |d«      r|j                  |||¬«      S |dk(  ry |s|r||kD  rt        ||¬«      S y)Nr    Ú	make_mask)r*   r   )r   Úcausal)ÚshapeÚhasattrr,   r)   )ÚhÚcacher   r*   r   s        r   Úcreate_attention_maskr2   -   sW   € ð 	
�‰�‰
€AÙ”˜ Ô,Ø�‰˜q¨|ÈˆÓUÐUØˆA‚vØÙ™¨¨KªÜ! !°Ô=Ð=Ør   c                 ó\   — |r*t        |d«      r|j                  | j                  d   «      S y )Nr,   r    )r/   r,   r.   )r0   r1   s     r   Úcreate_ssm_maskr4   :   s(   € Ù”˜ Ô,Ø�‰˜qŸw™w q™zÓ*Ð*Ør   ÚqueriesÚq_keysÚq_valuesÚscaler(   Ú
group_sizeÚbitsÚreturnc                 ó2  — | j                   \  }}}	}
|d   j                   d   }||z  }| |z  } |dkD  r5t        j                  | ||||	|
f«      } t        d„ |«      }t        d„ |«      }t        j                  | g|¢­d||dœŽ}|�Àt        |t        «      rO|j                   dd  \  }}t        j                  ||z
  |«      }t        j                  |«      }|d d …d f   |d    k\  }|j                  t        j                  k(  r?t        j                  ||t        j                  |j                  «      j                  «      }n||z  }t        j                  |d	d¬
«      }t        j                  |g|¢­d||dœŽ}|dkD  rt        j                  ||||	|
f«      }|S )Nr   éýÿÿÿr    c                 ó0   — t        j                  | d¬«      S ©Nr=   )Úaxis©r#   r%   ©Úxs    r   Ú<lambda>z8quantized_scaled_dot_product_attention.<locals>.<lambda>Q   s   € ¤B§N¡N°1¸2Õ$>r   c                 ó0   — t        j                  | d¬«      S r?   rA   rB   s    r   rD   z8quantized_scaled_dot_product_attention.<locals>.<lambda>R   s   € ¤b§n¡n°Q¸RÕ&@r   T)Ú	transposer9   r:   éþÿÿÿéÿÿÿÿ)r@   ÚpreciseF)r.   r#   Úreshaper   Úquantized_matmulÚ
isinstanceÚstrr$   ÚdtypeÚbool_ÚwhereÚfinfoÚminÚsoftmax)r5   r6   r7   r8   r(   r9   r:   ÚBÚ	n_q_headsÚLÚDÚ
n_kv_headsÚ	n_repeatsÚscoresÚqLÚkLÚ	q_indicesÚ	k_indicesÚouts                      r   Ú&quantized_scaled_dot_product_attentionr`   @   s›  € ð !Ÿ™Ñ€A€y�!�QØ˜‘—‘ Ñ$€JØ˜ZÑ'€IàˆuÑ€Gà�1‚}Ü—*‘*˜W q¨*°iÀÀAÐ&FÓGˆÜÑ>ÀÓGˆÜÑ@À(ÓKˆä× Ñ ØðØñØ$(°ZÀdò€Fð ÐÜ�dœCÔ Ø—\‘\ " #Ð&‰FˆB�ÜŸ	™	 " r¡'¨2Ó.ˆIÜŸ	™	 "›ˆIØšQ ˜WÑ%¨°4©Ñ8ˆDØ�:‰:œŸ™Ò!Ü—X‘X˜d F¬B¯H©H°V·\±\Ó,B×,FÑ,FÓG‰Fà�d‰NˆFÜ�Z‰Z˜ R°Ô6€FÜ
×
Ñ
ØðØñØ%*°zÈò€Cð �1‚}Ü�j‰j˜˜q )¨Q°Ð2Ó3ˆà€Jr   Úsinksc           	      óÊ   — t        |d«      r3|�t        d«      ‚t        | |||||j                  |j                  ¬«      S t
        j                  j                  | |||||¬«      S )Nr:   z0Quantized SDPA does not support attention sinks.)r8   r(   r9   r:   )r8   r(   ra   )r/   Ú
ValueErrorr`   r9   r:   r#   ÚfastÚscaled_dot_product_attention)r5   ÚkeysÚvaluesr1   r8   r(   ra   s          r   re   re   l   s|   € ô ˆu�fÔØÐÜÐOÓPÐPÜ5ØØØØØØ×'Ñ'Ø—‘ô
ð 	
ô �w‰w×3Ñ3ØØØØØØð 4ó 
ð 	
r   )r   NNN)NNF)N)é@   é   )r   Údataclassesr   Útypingr   r   Úmlx.coreÚcorer#   Ú	mlx.utilsr   r   ÚintÚarrayr)   Úboolr2   r4   ÚtupleÚfloatr`   re   r
   r   r   Ú<module>rt      sŽ  ðó Ý !ß  å Ý ð ÷	
ð 	
ó ð	
ð Ø!%Ø(,Ø'+ñØ
ðàðð ˜#‘ðð ˜BŸH™HÑ%ð	ð
 ˜2Ÿ8™8Ñ$óð, LQñ
Ø (¨¡ð
ØDHó
óð Øñ)Ø�X‰Xð)à�"—(‘(˜BŸH™H b§h¡hÐ.Ñ/ð)ð �B—H‘H˜bŸh™h¨¯©Ð0Ñ1ð)ð ð	)ð
 �2—8‘8Ñ
ð)ð ð)ð ð)ð ‡X�Xó)ðf !%ñ
ð
 ð
ð �2—8‘8Ñ
ð
ð �B—H‘HÑð
ð ‡X�Xô
r   