
    (HJjD                     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       \/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/models/base.py	from_dictzBaseModelArgs.from_dict   s]     
 #LLN*DAq))#.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     IIfqj!E-3BIIffqj)E!T'NE$KEE>Duu{223 ur~~vz].JIVVWr~~lI>%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Av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(    ,qwwqz**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    BNN12$>r   c                 0    t        j                  | d      S r?   rA   rB   s    r   rD   z8quantized_scaled_dot_product_attention.<locals>.<lambda>R   s    bnnQR&@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    !Ay!Q$JZ'IuG1}**Wq*iA&FG>G@(K  $(ZdF dC \\"#&FB		"r'2.I		"IQW%48D::!XXdFBHHV\\,B,F,FGFdNFZZR6F


%*zC 1}jj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|     ufOPP5''
 	
 ww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    !     	
 	
 	
 !%(,'+
 # BHH%	
 288$, LQ
 (
DH
 )XX)"((BHHbhh./) BHHbhh01) 	)
 288
) ) ) XX)f !%

 
 288

 BHH
 XX
r   