
    qiTG                     j   U d dl Zd dlZd dlZ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 ddlmZ d	d
lmZ  ej(                  e      Z	 d dlmZ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$ dZ%ejL                  jO                  dd      jQ                         Z)dZ*e)ev Z+de,fdZde,fdZ#d edd      id edd      iejZ                   edd      iejZ                   edd      iejZ                   ed d!      iejZ                   ed"d!      iejZ                   edd      id#d ed$d%      iej\                   ed&d'      ejZ                   ed&d'      iejZ                   ed(d'      iejZ                   ed&d'      iejZ                   ed&d)      id*dejZ                  ej^                  z   ed+d,d	-      iidejZ                  ej^                  z   ed+d.d	-      iidejZ                  ej^                  z   ed+d/d	-      iidejZ                  ej^                  z   ed+d0d	-      iidejZ                  ej^                  z   ed+d1d	-      iidejZ                  ej^                  z   ed+d2d	-      iid3Z0e1e,e1ee,z  ee1eef   z  f   f   e2d4<   e!0ejZ                   e!d5d67      iejZ                   e!d5d67      id8e0d9<   d: Z3dYd;Z4dCd	dDdEd	dDdEd	dDdFZ5e1e,e1e,e,f   f   e2dG<   i Z6e1e,e	dz  f   e2dH<   dIe,dz  dJe7fdKZ8	 dZdIe,dLedz  dMe7dJe	dz  fdNZ9e6fdOe,dPe1e,e	dz  f   fdQZ:	 	 	 d[dOe,dRe,dz  dSe;e,z  dz  dMe7dJe	f
dTZdUe<e   ez  fdVZ=da>edW        Z?g dXZ@y# e"$ r dZ!Y w xY w# e"$ r dZ%Y w xY w# e"$ r  dZ*dZ+d< Zd= Z# G d> d?      Zd@ ZdA ZdB Z4Y w xY w)\    N)Callable)contextmanager)
ModuleType)version   )ENV_VARS_TRUE_VALUESlogging)is_kernels_available   )flash_attention_forward)DeviceLayerRepositoryModeregister_kernel_mappingreplace_kernel_forward_from_hub)
get_kernel)use_kernel_forward_from_hub)FuncRepository)use_kernel_func_from_hubTFUSE_HUB_KERNELSYES
layer_namec                 b    t         rt        |       S t        j                  dt                d S )NFkernels hub usage is disabled through the environment USE_HUB_KERNELS=c                     | S N clss    W/opt/pipecat/venv/lib/python3.12/site-packages/transformers/integrations/hub_kernels.py<lambda>z-use_kernel_forward_from_hub.<locals>.<lambda>F   s    s     )_kernels_enabled$_kernels_use_kernel_forward_from_hubloggerwarning_once_TRANSFORMERS_USE_HUB_KERNELS)r   s    r    r   r   ?   s2    7
CCXYvXwx #"r"   	func_namec                     t         rt        rt        |       S t        st        j	                  d       d S t        j	                  dt
                d S )Nzwuse_kernel_func_from_hub is not available in the installed kernels version. Please upgrade kernels to use this feature.r   c                     | S r   r   funcs    r    r!   z*use_kernel_func_from_hub.<locals>.<lambda>U   s     r"   )r#   _has_use_kernel_func_from_hub!_kernels_use_kernel_func_from_hubr%   r&   r'   )r(   s    r    r   r   H   sV     =4Y??0##B %$ ##\]z\{| %$r"   cudaz!kernels-community/deformable-detrMultiScaleDeformableAttention)repo_idr   zkernels-community/moeLlama4TextMoezkernels-community/liger_kernelsLigerRMSNormzkernels-community/rmsnormRMSNormzkernels-community/mlx_rmsnorm)r/   rocmxpumpsnpuzmedmekk/triton-llama-mlpTritonLlamaMLPzkernels-community/megablocksMegaBlocksMoeMLPzahadnagy/megablocksCPUMegaBlocksMoeMLP)r/   r5   r6   cpuzkernels-community/activationFastGELU)r1   r   r   	QuickGELUNewGELUSiluGeluGeluTanh)r0   r2   r4   MLPr:   r=   r>   r?   SiLUGeLUrB   _KERNEL_MAPPINGzkernels-community/rotaryapply_rotary_transformers)r1   r(   )r6   r/   rotary_pos_embc                 T    | v xs" t        fd| j                         D              S )Nc              3   Z   K   | ]"  }t        |t              xr t        |       $ y wr   )
isinstancedicthas_key).0vkeys     r    	<genexpr>zhas_key.<locals>.<genexpr>   s&     [1z!T2Fwq#F[s   (+)anyvalues)drP   s    `r    rM   rM      s'    ax[3[PQPXPXPZ[[[r"   c                 p    | t         } t        | d      rt        d      st        d      t	        |        y )Nr6   z0.10.2)MIN_VERSIONzfkernels uses an incompatible version. Please install the latest version with `pip install -U kernels`.)rF   rM   r
   ImportErrorr   )mappings    r    $register_kernel_mapping_transformersrY      s8    ?%G7E"+?H+Ux  	 (r"   c                      d }|S )Nc                     | S r   r   r   s    r    	decoratorz.use_kernel_forward_from_hub.<locals>.decorator   s    Jr"   r   argskwargsr\   s      r    r   r      s    	 r"   c                      d }|S )Nc                     | S r   r   r+   s    r    r\   z+use_kernel_func_from_hub.<locals>.decorator  s    Kr"   r   r]   s      r    r   r     s    	 r"   c                       e Zd Zd Zy)r   c                     t        d      )NzNLayerRepository requires `kernels` to be installed. Run `pip install kernels`.RuntimeError)selfr^   r_   s      r    __init__zLayerRepository.__init__
  s    oppr"   N)__name__
__module____qualname__rg   r   r"   r    r   r   	  s    	qr"   r   c                      t        d      )Nz^replace_kernel_forward_from_hub requires `kernels` to be installed. Run `pip install kernels`.rd   r^   r_   s     r    r   r     s    l
 	
r"   c                      t        d      )NzVregister_kernel_mapping requires `kernels` to be installed. Run `pip install kernels`.rd   rl   s     r    r   r     s    sttr"   c                      t        d      )Nzcregister_kernel_mapping_transformers requires `kernels` to be installed. Run `pip install kernels`.rd   rl   s     r    rY   rY     s    q
 	
r"   zkernels-community/causal-conv1d)r1   r   zkernels-community/mamba-ssm)zcausal-conv1dz	mamba-ssmzfalcon_mamba-ssm_HUB_KERNEL_MAPPING_KERNEL_MODULE_MAPPINGattn_implementationreturnc                 >    | duxr t        j                  d|       duS )zJCheck whether `attn_implementation` matches a kernel pattern from the hub.Nz'^[^/:]+/[^/:]+(?:@[^/:]+)?(?::[^/:]+)?$)research)rq   s    r    	is_kernelrv   $  s-     	4' 	cII@BUV^bbr"   attention_wrapperallow_all_kernelsc                 t   ddl m} ddlm} d| v r| j	                  d      d   n| }t        |      syt        st        d      d|v r%|j	                  d      \  }}|j                         }n|}d}|j                         }|j                  d	      \  }}}	|j                         }|	r|	j                         nd}		 t        ||	|
      }
t        |
d      r|t        }|}n|t        |
|      }|j!                  |        |j!                  | |d          |
S # t        $ r}t        d| d| d      d}~ww xY w)a  
    Load and register the kernel associated to `attn_implementation`.

    Args:
        attn_implementation: A string, usually a kernel repo like "kernels-community/flash-mla".
        attn_wrapper: a callable for the wrapper around the attention implementation. In `transformers` we
            have a wrapper around the `flash_attn_var_len` call, and the same goes for `sdpa` and `eager`.
            They just prepare the arguments properly. This is mostly used for continious batching, where we
            want the `paged` wrapper, which calls the paged cache.
        allow_all_kernels (`bool`, optional):
            Whether to load kernels from unverified hub repos, if it is a custom kernel outside of the `kernels-community`
            hub repository.
    r   )ALL_MASK_ATTENTION_FUNCTIONS)ALL_ATTENTION_FUNCTIONS|r   N`kernels` is either not installed or uses an incompatible version. Please install the latest version with `pip install -U kernels`.:@)revisionrx   z-An error occurred while trying to load from 'z': .flash_attn_varlen_funcflash_attention_2)masking_utilsrz   modeling_utilsr{   splitrv   _kernels_availablerW   strip	partitionr   	Exception
ValueErrorhasattrr   getattrregister)rq   rw   rx   rz   r{   actual_attn_namer1   kernel_name_revkernelekernel_functions                r    load_and_register_attn_kernelr   ,  si     =8<?CV<V*005a8\o%&O
 	
 /55c:!'')"mmoG'',OGQmmoG#))+$C[GcEVW v/0$ 7+		 !&+6 $$%8/J ))*=?[\o?pqM  [H	QTUVTWWXYZZ[s   ;D 	D7 D22D7r   rX   c                    | |v rt        ||    t              r||    S | t        vrt        j	                  d|  d       d || <   y t
        rW	 t        |    d   }t        |    j                  dd       }t        |    j                  dd       }t        |||      }||| <   ||    S dd l
}| j                  dd	      }d
| d}	  |j                  dt              }	t        |	|d       }
t!        |
      r" |
       r	  |j                  |       }||| <   |S d || <   ||    S # t        $ r d || <   Y ||    S t        $ r d || <   Y ||    S w xY w# t        $ r d }
Y ow xY w# t        $ r d || <   Y ||    S w xY w)NzKernel z! not found in _HUB_KERNEL_MAPPINGr1   r   r   r   r   r   -r   is_
_availablez..utils.import_utils)rK   r   ro   r%   r&   r   getr   FileNotFoundErrorAssertionError	importlibreplaceimport_module__package__r   r   callable)r   rX   r1   r   r   r   r   new_kernel_namer(   	utils_modis_kernel_availablemodules               r    lazy_load_kernelr   i  s   g*W[-A:"N{##--gk]2STU#
	()+6yAG*;7;;JMH)+6::9dKG(GLF#)GK > ;- 	%--c37/**5		'/	//0FTI"))Y"E '(-@-B,000O3DF'-$ $(GK ;= ! 	(#'GK : ;9  	(#'GK 4 ;9	(  	'"&	'  ,'+$ ;,s=   AD >$E 5E E-E EEEE*)E*r   r   c                 V   ddl m} t        st        d      | j	                  d      d   }|dk7  r|st        d      d|| d	}t        j                  j                  d
      }t        j                  |      t        j                  d      k\  rt        | |||      S t        | ||      S )Nr   )__version__r}   /r   zkernels-communityziYou need to specify `allow_all_kernels=True` to use kernels outside of the `kernels-community` repositorytransformers)	frameworkr   r1   kernelsz0.10.4)r   r   
user_agentr   ) r   r   rW   r   r   r   metadatar   pkg_versionparseget_kernel_hub)r   r   r   rx   r   repo_parentr   kernels_versions           r    r   r     s     -
 	

 ##C(+K))2Cw
 	
  .+R]^J((00;O)[->->x-HHkHgZdeekHgNNr"   module_namesc                 8     t         t              r g  fd}|S )a  
    This decorator attaches the target function as an attribute of the module.
    The function must already be decorated with @use_kernel_func_from_hub
    this decorator then wraps it as an nn.Module internally.
    When kernelize is later applied to the full model, the function can be accessed as a regular module attribute and kernelized just like any other layer.
    The kernelization is performed in place, modifying the module directly.
    c                 <    | j                   fd}|| _         | S )Nc                 F     | g|i | D ]  }t        | d|        y )N	rotary_fn)setattr)rf   r^   r_   fnr   	orig_inits       r    new_initz8use_kernelized_func.<locals>.decorator.<locals>.new_init  s0    d,T,V," /k2./r"   )rg   )r   r   r   r   s     @r    r\   z&use_kernelized_func.<locals>.decorator  s    LL		/  
r"   )rK   r   )r   r\   s   ` r    use_kernelized_funcr     s#     ,)$~
 r"   c               #   ,   K   	 da d da y# da w xY ww)z
    Context manager used to adjust the value of the global `ALLOW_HUB_KERNELS`. This is needed, as this argument
    cannot be forwarded directly to the `__init__` of the models, where we set the attention implementation.
    TNF)ALLOW_ALL_KERNELSr   r"   r    allow_all_hub_kernelsr     s"     "  "Es    )	r   r   r   r   rY   r   r   r   r   r   )NF)NNF)Aimportlib.metadatar   osrt   collections.abcr   
contextlibr   typesr   	packagingr   r   utilsr   r	   utils.import_utilsr
   flash_attentionr   
get_loggerrh   r%   r   r   r   r   r   r   r   r   r   r$   r   rW   r   r.   r-   environr   upperr'   r   r#   str	INFERENCETRAININGTORCH_COMPILErF   rL   __annotations__rM   rY   ro   rp   boolrv   r   r   intlistr   r   r   __all__r   r"   r    <module>r      s    	 	 $ %  , 1 5 4 
		H	%z
 
*
.Y(,% %'JJNN3De$L$R$R$T!48LL# #%C %" O;:*
 O/*
 =-! =-! 7(! ;(! =-!5 
D O2+
 :1  :1!	 11! :1! :4!/
> !3!33_:)6
 !3!33_:*6
 !3!33_:(6
 !3!33_:vWX6
 !3!33_:vWX6
 !3!33_:z[\6
wBeOT#tFSL/DI^D_2_$_``a BJ ! 6B]! 6B]!-
()\)^ "CqQ:qI$AaP2 T#tCH~-.  8: S*t"334 93: $  di::19D:\`:$:z Pf , # , S*t:K5K0L , b   $#	OODjO 3YO 	O
 O:d8nx&? 6   " " 
i    .(-%.~  !
q q

u
=!
sU   N (M1 /M? 7I&N 1M<8N ;M<<N ?N
N 	N

N "N21N2