
    .`ik                     n    d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZ  G d de	          ZdS )	    )OrderedDict)Iterable)	BlockHash)LoadStoreSpecOffloadingEventOffloadingManagerPrepareStoreOutput)BackendBlockStatusc                       e Zd ZdZddedefdZdee         de	dz  fd	Z
dee         defd
Zdee         fdZdee         fdZdee         dedz  fdZddee         defdZdee         fdZdS )LRUOffloadingManagerzT
    An OffloadingManager with a pluggable backend, which evicts blocks by LRU.
    Fbackendenable_eventsc                 P    || _         t                      | _        |rg nd | _        d S N)r   r   blocksevents)selfr   r   s      r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/kv_offload/lru_manager.py__init__zLRUOffloadingManager.__init__   s(     ';F==:G4QBBT    block_hashesreturnNc                 h    d}|D ],}| j                             |          }||j        s n|dz  }-|S Nr      )r   getis_ready)r   r   	hit_count
block_hashblocks        r   lookupzLRUOffloadingManager.lookup   sJ    	& 	 	JKOOJ//E}EN}NIIr   c                     g }|D ]=}| j         |         }|j        sJ |xj        dz  c_        |                    |           >| j                            ||          S )Nr   )r   r   ref_cntappendr   get_load_store_spec)r   r   r   r    r!   s        r   prepare_loadz!LRUOffloadingManager.prepare_load$   sl    & 	! 	!JK
+E>!!>MMQMMMM%    |//fEEEr   c                     t          t          |                    D ]6}| j                            |          r| j                            |           7d S r   )reversedlistr   r   move_to_end)r   r   r    s      r   touchzLRUOffloadingManager.touch.   sX    "4#5#566 	4 	4J{z** 4''
333	4 	4r   c                 d    |D ],}| j         |         }|j        dk    sJ |xj        dz  c_        -d S r   )r   r$   )r   r   r    r!   s       r   complete_loadz"LRUOffloadingManager.complete_load3   sL    & 	 	JK
+E=1$$$$MMQMMM	 	r   c                 .     fd|D             }t          |           j                                        z
  }g }|dk    rN j                                        D ]2\  }}|j        dk    r"|                    |           |dz  }|dk    r n3d S |D ]4} j                             j                            |                     5|rF j	        ? j	                            t          | j        j         j        j        d                      j                            |          }t          |          t          |          k    sJ t          ||          D ]\  }}| j        |<    j                            ||          }t!          |||          S )Nc                 &    g | ]}|j         v|S  )r   ).0r    r   s     r   
<listcomp>z6LRUOffloadingManager.prepare_store.<locals>.<listcomp>=   s,     !
 !
 !
%4;9V9VJ9V9V9Vr   r   r   Tr   
block_sizemediumremoved)block_hashes_to_store
store_specblock_hashes_evicted)lenr   get_num_free_blocksr   itemsr$   r%   freepopr   r   r5   r6   allocate_blockszipr&   r	   )	r   r   r8   num_blocks_to_evictto_evictr    r!   r   r9   s	   `        r   prepare_storez"LRUOffloadingManager.prepare_store9   s   !
 !
 !
 !
)5!
 !
 !

 %&&)I)I)K)KK 	
 ""%)[%6%6%8%8  !
E=A%%OOJ///'1,'*a// t # 	; 	;JLdkooj99:::: 	/K!)#|6<. 	     --.CDD6{{c"7888888!$%:F!C!C 	, 	,J&+DK
## \556KVTT
!"7!!)
 
 
 	
r   Tsuccessc                    g }|r6|D ]2}| j         |         }|j        sd|_        |                    |           3n;|D ]8}| j         |         }|j        s"| j                            |           | j         |= 9|rH| j        C| j                            t          || j        j        | j        j	        d                     d S d S d S )Nr   Fr4   )
r   r   r$   r%   r   r>   r   r   r5   r6   )r   r   rE   stored_block_hashesr    r!   s         r   complete_storez#LRUOffloadingManager.complete_storeo   s	   /1 	0* ; ;
J/~ ;$%EM'..z:::	; + 0 0
J/~ 0L%%e,,,J/ 	4;#:K!4#|6<.!	      	 	#:#:r   c              #   h   K   | j         (| j         E d {V  | j                                          d S d S r   )r   clear)r   s    r   take_eventsz LRUOffloadingManager.take_events   sJ      ;"{"""""""K #"r   )F)T)__name__
__module____qualname____doc__r
   boolr   r   r   intr"   r   r'   r,   r.   r	   rD   rH   r   rK   r1   r   r   r   r      s_        R R R R R R R8I#6 3:    F))< F F F F F4(9"5 4 4 4 4
(9*=    4
$Y/4
	d	"4
 4
 4
 4
l 8I+>     2 Xo6            r   r   N)collectionsr   collections.abcr   vllm.v1.core.kv_cache_utilsr   vllm.v1.kv_offload.abstractr   r   r   r	   vllm.v1.kv_offload.backendr
   r   r   r1   r   r   <module>rW      s    $ # # # # # $ $ $ $ $ $ 1 1 1 1 1 1            < ; ; ; ; ; ; ;{  {  {  {  { , {  {  {  {  { r   