o
    پi                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 eeZG dd deZG dd	 d	eZG d
d deZdedefddZdS )z7
Eviction policies for LoRA adapter memory management.
    N)ABCabstractmethod)OrderedDict)OptionalSetc                   @   sf   e Zd ZdZedee ddfddZedeee  dee fdd	Z	edee ddfd
dZ
dS )EvictionPolicyz7Abstract base class for LoRA adapter eviction policies.uidreturnNc                 C      dS )zMarks an adapter as used.N selfr   r   r   S/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/lora/eviction_policy.py	mark_used      zEvictionPolicy.mark_used
candidatesc                 C   r
   )z,Selects an adapter to evict from candidates.Nr   )r   r   r   r   r   select_victim$   r   zEvictionPolicy.select_victimc                 C   r
   )z.Removes an adapter from the policy's tracking.Nr   r   r   r   r   remove)   r   zEvictionPolicy.remove)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r   r      s     r   c                   @   b   e Zd ZdZdd Zdee ddfddZd	eee  dee fd
dZ	dee ddfddZ
dS )LRUEvictionPolicyz=LRU eviction policy - evicts the least recently used adapter.c                 C   s   t  | _d| _d| _d S Nr   )r   access_ordertotal_accesseseviction_countr   r   r   r   __init__2   s   
zLRUEvictionPolicy.__init__r   r	   Nc                 C   sT   |d ur(t  }| j|d  || j|< |  jd7  _td| d|  d S d S )N   zLoRA z marked as used at )time	monotonicr   popr   loggerdebug)r   r   current_timer   r   r   r   7   s   
zLRUEvictionPolicy.mark_usedr   c                 C   v   t | j D ]}||v r!td| d |  jd7  _|  S qd|v r4td |  jd7  _dS J d| )z7Select the least recently used adapter from candidates.Selected LoRA z for eviction (LRU)r!   N'Selected None (base model) for evictionFz-Failed to select LRU victim from candidates: )listr   keysr%   r&   r   r   r   r   r   r   r   r   @      
zLRUEvictionPolicy.select_victimc                 C   s0   |d ur| j |d  td| d d S d S )NzRemoved LoRA z from LRU tracking)r   r$   r%   r&   r   r   r   r   r   T   s   zLRUEvictionPolicy.remover   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   /   s    	r   c                   @   r   )FIFOEvictionPolicyz2FIFO eviction policy - for backward compatibility.c                 C   s   t  | _d| _d S r   )r   insertion_orderr   r   r   r   r   r    ]   s   
zFIFOEvictionPolicy.__init__r   r	   Nc                 C   s(   |dur|| j vrd| j |< dS dS dS )z:For FIFO, we only track insertion order (not access time).NT)r1   r   r   r   r   r   c   s   zFIFOEvictionPolicy.mark_usedr   c                 C   r(   )z2Select the first inserted adapter from candidates.r)   z for eviction (FIFO)r!   Nr*   Fz.Failed to select FIFO victim from candidates: )r+   r1   r,   r%   r&   r   r-   r   r   r   r   j   r.   z FIFOEvictionPolicy.select_victimc                 C   s   |d ur| j |d  d S d S )N)r1   r$   r   r   r   r   r   ~   s   zFIFOEvictionPolicy.remover/   r   r   r   r   r0   Z   s    r0   policy_namer	   c                 C   s*   t td}| |vrtd|  ||   S )z5Factory function to create eviction policy instances.)fifolruzUnknown eviction policy: )r0   r   
ValueError)r2   policiesr   r   r   get_eviction_policy   s   
r7   )r   loggingr"   abcr   r   collectionsr   typingr   r   	getLoggerr   r%   r   r   r0   r   r7   r   r   r   r   <module>   s   
+)