
    -`i                     J    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Z	dS )    N)Callable)wraps)get_kv_transfer_grouphas_kv_transfer_groupis_v1_kv_transfer_groupfuncreturnc                 H    ddl m t          j                   }t	          |j                                                  }	 |                    d          n+# t          $ r}t          d j
         d          |d}~ww xY wt                      f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                  >   t                      rt                      s | i |S | 
         } 	|          \  }}}t                      }||                                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resultr   r   layer_name_indexs           z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/attention/utils/kv_transfer_utils.pywrapperz(maybe_transfer_kv_layer.<locals>.wrapper$   s    $&& 	).E.G.G 	)4((((/0
 /D.CJ.O.O+z8)++	 	(H(H(J(J 4(((( 	%%j111 t&v&& 	
HmDDD    )vllm.attention.layerr   inspect	signaturelist
parameterskeysindex
ValueError	TypeError__name__r   )r   sigparam_nameser   r   r   s   `    @@r   maybe_transfer_kv_layerr)      s     ;::::: 
D
!
!Cs~**,,--K&,,\::   JJJJ
 
	
 4[[      [. Ns   A 
B%A>>B)
r   collections.abcr   	functoolsr   vllm.distributed.kv_transferr   r   r   r)    r   r   <module>r.      s     $ $ $ $ $ $               .( .x . . . . . .r   