
    )j                     X   d dl mZ d dl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dS )    )	dataclass)AnyDictOptionalUnionN   )swiglu)BaseModelArgscreate_attention_maskscaled_dot_product_attention)initialize_ropec                       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
<   eed<   eed<   eed<   eed<   eed<   eed<   dZe	e
eeeef         f                  ed<   dZeed<   dS )	ModelArgs
model_typehidden_sizenum_hidden_layersintermediate_sizenum_attention_headsrms_norm_eps
vocab_sizelogits_scalingattention_multiplierembedding_multiplierresidual_multipliermax_position_embeddingsnum_key_value_headsattention_biasmlp_bias
rope_thetaNrope_scalingTtie_word_embeddings)__name__
__module____qualname__str__annotations__intfloatboolr    r   r   r   r!        _/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/mlx_lm/models/granite.pyr   r      s        OOOOOO    NNN;?L(4U5#:%6 678??? $$$$$$r+   r   c            	       x     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        x| _        }|j        |z  x| _        }|j        | _	        |j
        }t          j        |||z  |          | _        t          j        |||z  |          | _        t          j        |||z  |          | _        t          j        ||z  ||          | _        t#          | j        |j        d|j        |j                  | _        d S )NbiasF)super__init__r   r   n_headsr   
n_kv_headshead_dimr   scaler   nnLinearq_projk_projv_projo_projr   r   r    r   rope)selfr/   dimr5   r6   r7   r   	__class__s          r,   r4   zAttention.__init__%   s   !%!99w'+'??*#'#3w#>>.
,iWx%7nMMMiZ(%:PPPiZ(%:PPPi( 2CnMMM#MO(
 
			r+   Nxmaskcachereturnc                 |   |j         \  }}}|                     |          |                     |          |                     |          }	}}|                    ||| j        d                              dddd          }|                    ||| j        d                              dddd          }|	                    ||| j        d                              dddd          }	|R|                     ||j	                  }|                     ||j	                  }|
                    ||	          \  }}	n*|                     |          }|                     |          }t          |||	|| j        |          }
|
                    dddd                              ||d          }
|                     |
          S )Nr      r      )offset)rE   r8   rD   )shaper;   r<   r=   reshaper5   	transposer6   r?   rK   update_and_fetchr   r8   r>   )r@   rC   rD   rE   BLDquerieskeysvaluesoutputs              r,   __call__zAttention.__call__=   s    '1a $AAAv //!Qb99CCAq!QOO||Aq$/266@@Aq!LL1dor::DDQ1aPPiii==G99T%,977D 11$??LD&&ii((G99T??D-T6djt
 
 
 !!!Q1--55aB??{{6"""r+   NNr"   r#   r$   r   r4   mxarrayr   r   rW   __classcell__rB   s   @r,   r.   r.   $   s        
Y 
 
 
 
 
 
6 $(#	# #8# rx # }	#
 
# # # # # # # #r+   r.   c                   :     e Zd Zdef fdZdej        fdZ xZS )MLPr/   c                 @   t                                                       |j        }|j        }t	          |d          r|j        }nd}t          j        |||          | _        t          j        |||          | _	        t          j        |||          | _
        d S )Nr   Fr1   )r3   r4   r   r   hasattrr   r9   r:   	gate_proj	down_projup_proj)r@   r/   rA   
hidden_dimr   rB   s        r,   r4   zMLP.__init__]   s    +
4$$ 	}HHH3
BBB:sBBByjx@@@r+   rF   c                     |                      t          |                     |          |                     |                              S N)rc   r	   rb   rd   )r@   rC   s     r,   rW   zMLP.__call__k   s4    ~~fT^^A%6%6QHHIIIr+   	r"   r#   r$   r   r4   rZ   r[   rW   r\   r]   s   @r,   r_   r_   \   sq        AY A A A A A AJRX J J J J J J J Jr+   r_   c            	       x     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   t                                                       |j        | _        |j        | _        t	          |          | _        t          |          | _        t          j	        |j        |j
                  | _        t          j	        |j        |j
                  | _        |j        | _        d S )Neps)r3   r4   r   r   r.   	self_attnr_   mlpr9   RMSNormr   input_layernormpost_attention_layernormr   r@   r/   rB   s     r,   r4   zTransformerBlock.__init__p   s    #'#; +"4t99!z$*:@QRRR(*
$"3)
 )
 )
% $(#;   r+   NrC   rD   rE   rF   c                     |                      |                     |          ||          }||| j        z  z   }|                     |                     |                    }||| j        z  z   }|S rg   )rn   rq   r   ro   rr   )r@   rC   rD   rE   rhouts          r,   rW   zTransformerBlock.__call__|   so     NN4//22D%@@D,,,HHT2215566!d...
r+   rX   rY   r]   s   @r,   rj   rj   o   s        
<Y 
< 
< 
< 
< 
< 
< $(#	
 
8
 rx 
 }	

 

 
 
 
 
 
 
 
r+   rj   c                   >     e Zd Zdef fdZ	 ddej        fdZ xZS )GraniteModelr/   c                    t                                                       | _        j        | _        j        | _        | j        dk    sJ t          j        j        j                  | _        fdt          j                  D             | _
        t          j        j        j                  | _        j        | _        d S )Nr   c                 0    g | ]}t                     S ))r/   )rj   ).0_r/   s     r,   
<listcomp>z)GraniteModel.__init__.<locals>.<listcomp>   s2     
 
 
,-$'''
 
 
r+   rl   )r3   r4   r/   r   r   r9   	Embeddingr   embed_tokensrangelayersrp   r   normr   rs   s    `r,   r4   zGraniteModel.__init__   s    	/!%!7""""L$:JKK
 
 
 
16t7M1N1N
 
 
 Jt/T5FGGG	$($=!!!r+   Ninputsc                    |                      |          | j        z  }|d gt          | j                  z  }t	          ||d                   }t          | j        |          D ]\  }} ||||          }|                     |          S )Nr   )rE   )r   r   lenr   r   zipr   )r@   r   rE   rv   rD   layercs          r,   rW   zGraniteModel.__call__   s    
 f%%(AA=FS---E$Qa11DK// 	( 	(HE1aQ'''AAyy||r+   rg   rh   r]   s   @r,   ry   ry      sl        >Y > > > > > >          r+   ry   c                   T     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        s&t          j        |j	        |j
        d          | _        |j        | _        d S )NFr1   )r3   r4   r/   r   ry   modelr!   r9   r:   r   r   lm_headr   rs   s     r,   r4   zModel.__init__   sr    	/!$''
' 	T9T%5tUSSSDL"1r+   Nr   c                     |                      ||          }| j        j        r | j         j                            |          }n|                     |          }|| j        z  S rg   )r   r/   r!   r   	as_linearr   r   )r@   r   rE   rw   s       r,   rW   zModel.__call__   s]    
 jj''9( 	$*)33C88CC,,s##CT(((r+   c                     | j         j        S rg   )r   r   )r@   s    r,   r   zModel.layers   s    z  r+   rg   )r"   r#   r$   r   r4   rZ   r[   rW   propertyr   r\   r]   s   @r,   r   r      s        2Y 2 2 2 2 2 2 
) 
)
) 
) 
) 
) ! ! X! ! ! ! !r+   r   )dataclassesr   typingr   r   r   r   mlx.corecorerZ   mlx.nnr9   activationsr	   baser
   r   r   
rope_utilsr   r   Moduler.   r_   rj   ry   r   r*   r+   r,   <module>r      s   " ! ! ! ! ! - - - - - - - - - - - -                   T T T T T T T T T T ' ' ' ' ' ' % % % % % % % %*5# 5# 5# 5# 5#	 5# 5# 5#pJ J J J J") J J J&    ry   4    29   @! ! ! ! !BI ! ! ! ! !r+   