
    &`i                     z   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZ d dlmZ  ej        e          Z e             G d d                      Z ed	
          e G d d                                  Z ed           G d d                      Z G d d          ZdS )    N)	dataclassfield)AnyCallableDictListOptionalSet)	ReplicaIDRequestMetadata)&RAY_SERVE_QUEUE_LENGTH_CACHE_TIMEOUT_SSERVE_LOGGER_NAME)	PublicAPIc                   p    e Zd ZU dZee         ed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed<   dS )	RequestRoutingContextNmultiplexed_start_matching_timeFtried_fewest_multiplexed_modelstried_first_multiplexed_modelstried_same_nodetried_same_azshould_backoff)__name__
__module____qualname__r   r	   float__annotations__r   boolr   r   r   r        |/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/serve/_private/request_router/common.pyr   r      sy         7;#Xe_;;;,1#T111+0"D000!OT!!!M4 ND     r   r   alpha)	stabilityc                       e Zd ZU dZee         ed<   	 eeef         ed<   	 eed<   	  e	d           Z
eed<   	  e	d           Zej        ed	<   	  e	e          Zeed
<   	 dZeed<   	 d ZdS )PendingRequestz1A request that is pending execution by a replica.argskwargsmetadatac                  (    t          j                     S Ntimer   r   r    <lambda>zPendingRequest.<lambda>)   s    dikk r   )default_factory
created_atc                  (    t          j                    S r)   )asyncioFuturer   r   r    r,   zPendingRequest.<lambda>,   s    7>;K;K r   futurerouting_contextFresolvedc                 6    t          j                    | _        dS )zFReset the `asyncio.Future`, must be called if this request is re-used.N)r0   r1   r2   )selfs    r    reset_futurezPendingRequest.reset_future7   s    n&&r   N)r   r   r   __doc__r   r   r   r   r   r   r.   r   r2   r0   r1   r   r3   r4   r   r7   r   r   r    r$   r$      s          <;
s)OOO/cN,T.A.ABBBJBBB1"U3K3KLLLFGNLLLH-2U-. . .O*    SHd3' ' ' ' 'r   r$   T)frozenc                   $    e Zd ZU eed<   eed<   dS )ReplicaQueueLengthCacheEntry	queue_len	timestampN)r   r   r   intr   r   r   r   r    r;   r;   <   s'         NNNr   r;   c                       e Zd Zedddedeeg ef                  fdZdede	fdZ
d	edee         fd
Zd	edefdZd	efdZdee         fdZdS )ReplicaQueueLengthCacheN)staleness_timeout_sget_curr_time_srA   rB   c                :    i | _         || _        ||nd | _        d S )Nc                  (    t          j                     S r)   r*   r   r   r    r,   z2ReplicaQueueLengthCache.__init__.<locals>.<lambda>L   s    	 r   )_cache_staleness_timeout_s_get_curr_time_s)r6   rA   rB   s      r    __init__z ReplicaQueueLengthCache.__init__C   s3     FH$7!.:OO@S@S 	r   timestamp_sreturnc                 B    |                                  |z
  | j        k    S r)   )rG   rF   )r6   rI   s     r    _is_timed_outz%ReplicaQueueLengthCache._is_timed_outO   s!    $$&&4t7PPPr   
replica_idc                     | j                             |          }||                     |j                  rdS |j        S )zGet the queue length for a replica.

        Returns `None` if the replica ID is not present or the entry is timed out.
        N)rE   getrL   r=   r<   )r6   rM   entrys      r    rO   zReplicaQueueLengthCache.getR   s=    
 
++=D..u??=4r   r<   c                 Z    t          ||                                           | j        |<   dS )z2Set (or update) the queue length for a replica ID.N)r;   rG   rE   )r6   rM   r<   s      r    updatezReplicaQueueLengthCache.update]   s/    ">t,,..#
 #
Jr   c                 <    | j                             |d            d S r)   )rE   pop)r6   rM   s     r    invalidate_keyz&ReplicaQueueLengthCache.invalidate_keyc   s    
D)))))r   active_replica_idsc                    t          | j                                                  D ] }||vr| j                            |           !dS )zCRemoves entries for all replica IDs not in the provided active set.N)listrE   keysrT   )r6   rV   rM   s      r    remove_inactive_replicasz0ReplicaQueueLengthCache.remove_inactive_replicasf   sT     t{//1122 	, 	,J!333
+++	, 	,r   )r   r   r   r   r   r	   r   rH   r>   r   rL   r   rO   rR   rU   r
   rZ   r   r   r    r@   r@   B   s        &L9=	

 

 

 #

 "(2u9"56	

 

 

 

Q Q Q Q Q Q	i 	HSM 	 	 	 	
 
s 
 
 
 
* * * * *,c)n , , , , , ,r   r@   )r0   loggingr+   dataclassesr   r   typingr   r   r   r   r	   r
   ray.serve._private.commonr   r   ray.serve._private.constantsr   r   ray.util.annotationsr   	getLoggerloggerr   r$   r;   r@   r   r   r    <module>rc      s      ( ( ( ( ( ( ( ( ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; @ @ @ @ @ @ @ @        + * * * * *		,	-	- ! ! ! ! ! ! ! ! W
' ' ' ' ' ' '  '> $       
), ), ), ), ), ), ), ), ), ),r   