o
    -i                     @   sJ   d dl Z d dlmZ d dlmZ d dlmZmZmZ dedefddZ	dS )	    N)Callable)wraps)get_kv_transfer_grouphas_kv_transfer_groupis_v1_kv_transfer_groupfuncreturnc              
      s|   ddl m t }t|j }z|dW n ty/ } z
t	d j
 d|d}~ww t  fdd}|S )	zDecorator that handles KV layer transfer prior and after execution of
    an attention layer, if enabled. Otherwise, the wrapper is a no-op.

    On entry: waits for the KV layer from the connector.
    On exit: saves the KV layer to the connector.
    r   )get_attention_context
layer_namez	Function z# must have a 'layer_name' parameterNc                     s~   t  rt s | i |S |  }|\}}}t }|d u s#| s* | i |S ||  | i |}|||| |S )N)r   r   r   has_connector_metadatawait_for_layer_loadsave_kv_layer)argskwargsr
   attn_metadata
attn_layerkv_cache	connectorresultr   r	   layer_name_index c/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/attention/utils/kv_transfer_utils.pywrapper$   s   
z(maybe_transfer_kv_layer.<locals>.wrapper)vllm.attention.layerr	   inspect	signaturelist
parameterskeysindex
ValueError	TypeError__name__r   )r   sigparam_nameser   r   r   r   maybe_transfer_kv_layer   s    
r'   )
r   collections.abcr   	functoolsr   vllm.distributed.kv_transferr   r   r   r'   r   r   r   r   <module>   s
   