Ë
    îÿæi|  ã                   ó:  — 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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)é    )Ú	dataclassNé   )Úswiglu)ÚBaseModelArgsÚcreate_attention_maskÚscaled_dot_product_attentionc                   ó    — 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<   dZeed<   dZeed<   dZd„ Zy)Ú	ModelArgsÚ
model_typei   Úhidden_sizeé   Únum_attention_headsé   Únum_hidden_layersé€   Úkv_channelsi    Úmax_position_embeddingsg�íµ ÷Æ°>Úlayer_norm_epsiloni +  Úintermediate_sizeTÚno_biasi€Q Ú
vocab_sizeNc                 ó@   — | j                   €| j                  | _         y y ©N)Únum_key_value_headsr   ©Úselfs    úg/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/mlx_lm/models/qwen.pyÚ__post_init__zModelArgs.__post_init__   s!   € Ø×#Ñ#Ð+Ø'+×'?Ñ'?ˆDÕ$ð ,ó    )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úintr   r   r   r   r   Úfloatr   r   Úboolr   r   r   © r   r   r
   r
      sr   … àƒOØ€K�ÓØ!Ð˜Ó!ØÐ�sÓØ€K�ÓØ#'Ð˜SÓ'Ø $Ð˜Ó$Ø"Ð�sÓ"Ø€GˆTÓØ€J�ÓØÐó@r   r
   c                   ó,   ‡ — e Zd Zdefˆ fd„Zdd„Zˆ xZS )Ú	AttentionÚargsc                 óˆ  •— t         ‰| �  «        |j                  }|j                  | _        || j                  z  }t	        j
                  |d¬«      | _        |j                  | j                  z  }t	        j                  ||dz  d¬«      | _	        t	        j                  |||j                   ¬«      | _        |dz  | _        y )NF)Útraditionalé   T©Úbiasg      à¿)ÚsuperÚ__init__r   r   ÚnnÚRoPEÚ
rotary_embr   ÚLinearÚc_attnr   Úc_projÚscale)r   r+   r   Úhidden_size_per_attention_headÚ	proj_sizeÚ	__class__s        €r   r2   zAttention.__init__    s    ø€ Ü‰ÑÔà×&Ñ&ˆØ#'×#;Ñ#;ˆÔ à)4¸×8PÑ8PÑ)PÐ&äŸ'™'Ð"@ÈeÔTˆŒà×$Ñ$ t×'?Ñ'?Ñ?ˆ	ä—i‘i ¨Y¸©]ÀÔFˆŒÜ—i‘i ¨YÀÇÁÐ=MÔNˆŒà3°TÑ9ˆ�
r   c                 ó&  — | j                  |«      }t        j                  |dd¬«      \  }}}|j                  \  }}	}
|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 )	Nr.   éÿÿÿÿ)Úaxisr   é   r   )Úoffset)Úcacher9   Úmask)r7   ÚmxÚsplitÚshapeÚreshaper   Ú	transposer5   rA   Úupdate_and_fetchr   r9   r8   )r   ÚxrC   rB   ÚqkvÚqÚkÚvÚBÚLÚ_ÚqueriesÚkeysÚvaluesÚoutputs                  r   Ú__call__zAttention.__call__1   sp  € Ø�k‰k˜!‹nˆä—(‘(˜3 ¨Ô+‰ˆˆ1ˆaà—'‘'‰ˆˆ1ˆaà—)‘)˜A˜q $×":Ñ":¸BÓ?×IÑIÈ!ÈQÐPQÐSTÓUˆØ�y‰y˜˜A˜t×7Ñ7¸Ó<×FÑFÀqÈ!ÈQÐPQÓRˆØ—‘˜1˜a ×!9Ñ!9¸2Ó>×HÑHÈÈAÈqÐRSÓTˆàÐØ—o‘o g°e·l±l�oÓCˆGØ—?‘? 4°·±�?Ó=ˆDØ ×1Ñ1°$¸Ó?‰LˆD‘&à—o‘o gÓ.ˆGØ—?‘? 4Ó(ˆDä-Ø�T˜6¨°d·j±jÀtô
ˆð ×!Ñ! ! Q¨¨1Ó-×5Ñ5°a¸¸BÓ?ˆà�{‰{˜6Ó"Ð"r   ©NN©r    r!   r"   r
   r2   rV   Ú__classcell__©r<   s   @r   r*   r*      s   ø„ ð:˜Yõ :÷"#r   r*   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚMLPr+   c                 óœ  •— t         ‰| �  «        t        j                  |j                  |j
                  dz  |j                   ¬«      | _        t        j                  |j                  |j
                  dz  |j                   ¬«      | _        t        j                  |j
                  dz  |j                  |j                   ¬«      | _	        y )Nr@   r/   )
r1   r2   r3   r6   r   r   r   Úw1Úw2r8   ©r   r+   r<   s     €r   r2   zMLP.__init__M   sŸ   ø€ Ü‰ÑÔä—)‘)Ø×Ñ˜d×4Ñ4¸Ñ9ÀDÇLÁLÐ@Pô
ˆŒô —)‘)Ø×Ñ˜d×4Ñ4¸Ñ9ÀDÇLÁLÐ@Pô
ˆŒô —i‘iØ×"Ñ" aÑ'¨×)9Ñ)9ÀDÇLÁLÐ@Pô
ˆ�r   c                 ó|   — | j                  |«      }| j                  |«      }| j                  t        ||«      «      S r   )r^   r_   r8   r   )r   rJ   Úa1Úa2s       r   rV   zMLP.__call__Z   s1   € Ø�W‰W�Q‹ZˆØ�W‰W�Q‹ZˆØ�{‰{œ6 " b›>Ó*Ð*r   rX   rZ   s   @r   r\   r\   L   s   ø„ ð
˜Yõ 
ö+r   r\   c                   ó,   ‡ — e Zd Zdefˆ fd„Zdd„Zˆ xZS )ÚTransformerBlockr+   c                 ó"  •— t         ‰| �  «        t        j                  |j                  |j
                  ¬«      | _        t        |«      | _        t        j                  |j                  |j
                  ¬«      | _	        t        |«      | _        y ©N)Úeps)r1   r2   r3   ÚRMSNormr   r   Úln_1r*   ÚattnÚln_2r\   Úmlpr`   s     €r   r2   zTransformerBlock.__init__a   s`   ø€ Ü‰ÑÔä—J‘J˜t×/Ñ/°T×5LÑ5LÔMˆŒ	Ü˜d“OˆŒ	Ü—J‘J˜t×/Ñ/°T×5LÑ5LÔMˆŒ	Ü�t“9ˆ�r   c                 ó¬   — |}| j                  |«      }| j                  |||¬«      }||z   }| j                  |«      }| j                  |«      }||z   }|S )N)rC   rB   )rj   rk   rl   rm   )r   rJ   rC   rB   Úresiduals        r   rV   zTransformerBlock.__call__i   sZ   € ØˆØ�I‰I�a‹LˆØ�I‰I�a˜d¨%ˆIÓ0ˆØ�x‘<ˆØ�I‰I�hÓˆØ�H‰H�Q‹KˆØ�‰Lˆàˆr   rW   rX   rZ   s   @r   re   re   `   s   ø„ ð˜Yõ ÷	r   re   c                   ó,   ‡ — e Zd Zdefˆ fd„Zdd„Zˆ xZS )Ú	QwenModelr+   c                 óL  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  «      D �cg c]  }t        |«      ‘Œ c}| _
        t        j                  |j
                  |j                  ¬«      | _        y c c}w rg   )r1   r2   r3   Ú	Embeddingr   r   ÚwteÚranger   re   Úhri   r   Úln_f)r   r+   rQ   r<   s      €r   r2   zQwenModel.__init__v   sw   ø€ Ü‰ÑÔÜ—<‘< §¡°×1AÑ1AÓBˆŒÜ27¸×8NÑ8NÔ2OÓPÑ2O¨QÔ" 4Õ(Ð2OÑPˆŒÜ—J‘J˜t×/Ñ/°T×5LÑ5LÔMˆ�	ùò Qs   ÁB!c                 óê   — | j                  |«      }|€d gt        | j                  «      z  }t        ||d   «      }t	        | j                  |«      D ]  \  }} ||||«      }Œ | j                  |«      S )Nr   )rt   Úlenrv   r   Úziprw   )r   ÚinputsrB   rJ   rC   ÚlayerÚcs          r   rV   zQwenModel.__call__|   sp   € Ø�H‰H�VÓˆàˆ=Ø�FœS §¡›[Ñ(ˆEÜ$ Q¨¨a©Ó1ˆä˜DŸF™F EÖ*‰HˆE�1Ù�a˜˜qÓ!‰Að +ð �y‰y˜‹|Ðr   r   rX   rZ   s   @r   rq   rq   u   s   ø„ ðN˜Yõ N÷
r   rq   c                   óp   ‡ — e Zd Zdefˆ fd„Z	 ddej                  dej                  fd„Zed„ «       Z	ˆ xZ
S )ÚModelÚconfigc                 óê   •— t         ‰| �  «        |j                  | _        t        |«      | _        t        j                  |j                  |j                  |j                   ¬«      | _
        || _        y )Nr/   )r1   r2   r   rq   Útransformerr3   r6   r   r   r   Úlm_headr+   )r   r€   r<   s     €r   r2   zModel.__init__Š   s[   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒÜ$ VÓ,ˆÔÜ—y‘yØ×Ñ × 1Ñ 1¸F¿N¹NÐ8Jô
ˆŒð ˆ�	r   rJ   Úreturnc                 óH   — | j                  ||«      }| j                  |«      S r   )r‚   rƒ   )r   rJ   rB   Úys       r   rV   zModel.__call__“   s$   € ð
 ×Ñ˜Q Ó&ˆØ�|‰|˜A‹Ðr   c                 ó.   — | j                   j                  S r   )r‚   rv   r   s    r   ÚlayerszModel.layers›   s   € à×Ñ×!Ñ!Ð!r   r   )r    r!   r"   r
   r2   rD   ÚarrayrV   Úpropertyrˆ   rY   rZ   s   @r   r   r   ‰   sG   ø„ ð˜yõ ð ñà�8‰8ðð 
�‰ó	ð ñ"ó ô"r   r   )Údataclassesr   Úmlx.coreÚcorerD   Úmlx.nnr3   Úactivationsr   Úbaser   r   r   r
   ÚModuler*   r\   re   rq   r   r(   r   r   Ú<module>r’      sˆ   ðõ "å Ý å ß TÑ Tð ô@�ó @ó ð@ô$*#�—	‘	ô *#ôZ+ˆ"�)‰)ô +ô(�r—y‘yô ô*�—	‘	ô ô("ˆB�I‰Iõ "r   