o
    پi
                     @   s   d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	 e
eZde	jdeeeef  ddfddZdee dee fd	d
ZdS )    N)AnyCallableListOptionalmodel
hook_specsreturnc                    s8  t |  }|D ]}|dd}|dg }|s"td| d q|d}|s3td| d q|dp9i }t|}|rD||nd	}	|	d	u rWtd
| d| d qg }
| D ]\ }t fdd|D rs|
 |f q]|
std| d|  q|
D ]\}}|	|	}t
d| d|  qqd	S )z{
    hook_specs is a list of dicts from server_args.forward_hooks.
    Attaches forward hooks to the matching modules.
    name target_moduleszHook spec 'z#' has no 'target_modules', skippinghook_factoryz!' has no 'hook_factory', skippingconfigNzHook factory 'z' for spec 'z)' returned None, not registering any hookc                 3   s    | ]	}t   |V  qd S )N)fnmatch).0patternr	    Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/model_executor/hook_manager.py	<genexpr>,   s    z)register_forward_hooks.<locals>.<genexpr>zNo modules matched hook spec 'z' patterns=zRegistered forward hook 'z' on )dictnamed_modulesgetloggerwarningresolve_callableitemsanyappendregister_forward_hookinfo)r   r   name_to_modulespec	spec_nametarget_patternshook_factory_pathr   r   hookmatchedmodulemodule_name_r   r   r   register_forward_hooks   sH   

r*   pathc                 C   s   | d u rd S d| v r|  dd\}}n|  d}t|dk r&td|  d|^ }}d|}t|}zt||W S  tyV } ztd| d| d	|  d
|d }~ww )N:   .   zInvalid hook callable path 'zE'. Expected 'module.submodule:factory' or 'module.submodule.factory'.zModule 'z' has no attribute 'z' (from hook path 'z'))splitlen
ValueErrorjoin	importlibimport_modulegetattrAttributeError)r+   r(   fn_nameparts	mod_partsr'   er   r   r   r   ;   s0   




r   )r   r4   loggingtypingr   r   r   r   torch.nnnn	getLogger__name__r   Moduler   strr*   r   r   r   r   r   <module>   s    
$0