
    &`i1                        d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ dZeZe G d	 d
                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d de                      Ze G d de                      Ze G d de                      Ze G d d                      Ze G d d                      Ze G d d                       Z e G d! d"                      Z!dS )#    N)	dataclassfield)Enum)DictListOptionalTuple)InstanceUtil)	NodeState
NodeStatus)InstanceNodeTerminatedc                   :    e Zd ZU dZeed<   dZeed<   dZeed<   dS )ResourceUsage resource_nameg        totalusedN)	__name__
__module____qualname__r   str__annotations__r   floatr        l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/v2/schema.pyr   r      sD          M3E5D%r   r   c                   0    e Zd ZU ee         ed<   eed<   dS )	NodeUsageusageidle_time_msN)r   r   r   r   r   r   intr   r   r   r   r      s1          r   r   c                   ^   e Zd ZU eed<   eed<   eed<   eed<   dZee         ed<   dZee         ed<   dZee	         ed<   dZ
ee         ed	<   dZee         ed
<   dZeee                  ed<   dZeeeef                  ed<   deeef         fdZdeeef         fdZdeeef         fdZdS )NodeInfoinstance_type_nameray_node_type_nameinstance_id
ip_addressNnode_statusnode_idresource_usagefailure_detaildetailsnode_activitylabelsreturnc                 @    | j         i S d | j         j        D             S )Nc                 (    i | ]}|j         |j        S r   r   r   .0rs     r   
<dictcomp>z,NodeInfo.total_resources.<locals>.<dictcomp>C   s    LLLQLLLr   r+   r    selfs    r   total_resourceszNodeInfo.total_resources@   s*    &ILL$2E2KLLLLr   c                 @    | j         i S d | j         j        D             S )Nc                 8    i | ]}|j         |j        |j        z
  S r   r   r   r   r4   s     r   r7   z0NodeInfo.available_resources.<locals>.<dictcomp>H   s%    UUUa16!1UUUr   r8   r9   s    r   available_resourceszNodeInfo.available_resourcesE   s*    &IUU4;N;TUUUUr   c                 @    | j         i S d | j         j        D             S )Nc                 (    i | ]}|j         |j        S r   )r   r   r4   s     r   r7   z+NodeInfo.used_resources.<locals>.<dictcomp>M   s    KKKAKKKr   r8   r9   s    r   used_resourceszNodeInfo.used_resourcesJ   s*    &IKK1D1JKKKKr   )r   r   r   r   r   r)   r   r*   r+   r   r,   r-   r.   r   r/   r   r   r;   r?   rB   r   r   r   r$   r$   '   s]         OOO!%K#%%%!GXc]!!!*.NHY'...$(NHSM(((!GXc]!!!)-M8DI&---'+FHT#s(^$+++Mc5j!1 M M M M
VT#u*%5 V V V V
LS%Z 0 L L L L L Lr   r$   c                       e Zd ZU  G d de          Zeed<   eed<   eed<   eed<   eed<   dZe	e         ed	<   dZ
e	e         ed
<   dS )LaunchRequestc                       e Zd ZdZdZdS )LaunchRequest.StatusFAILEDPENDINGN)r   r   r   rG   rH   r   r   r   StatusrF   R   s        r   rI   r%   r&   countstaterequest_ts_sNfailed_ts_sr-   )r   r   r   r   rI   r   r   r"   rM   r   r-   r   r   r   rD   rD   P   s                
 JJJMMM!%K#%%%!GXc]!!!!!r   rD   c                   @    e Zd ZU eeef         ed<   eed<   defdZdS )ResourceRequestByCountbundlerJ   r0   c                 (    d| j          d| j         dS )N[ ])rJ   rP   r9   s    r   __str__zResourceRequestByCount.__str__m   s    .4:......r   N)	r   r   r   r   r   r   r   r"   rU   r   r   r   rO   rO   f   sQ          eJJJ/ / / / / / /r   rO   c                   &    e Zd ZU ee         ed<   dS )ResourceDemandbundles_by_countN)r   r   r   r   rO   r   r   r   r   rW   rW   q   s&          1222222r   rW   c                   n    e Zd ZU eed<   dZee         ed<   dZee         ed<   dZee         ed<   d Z	dS )PlacementGroupResourceDemandr-   Npg_idstrategyrK   c                     | j         sd S d}t          j        || j                   }|sd S | j                             d          \  }}|                    d          \  }}|| _        || _        || _        d S )Nz^.*:.*\|.*$:|)r-   rematchsplitr[   r\   rK   )r:   patternra   r[   r-   r\   rK   s          r   __post_init__z*PlacementGroupResourceDemand.__post_init__   s    | 	F !$,// 	F++C00w!--,,%
 


r   )
r   r   r   r   r   r[   r   r\   rK   rd   r   r   r   rZ   rZ   w   sl          LLLE8C="Hhsm"""E8C=    r   rZ   c                       e Zd ZdS )RayTaskActorDemandNr   r   r   r   r   r   rf   rf              Dr   rf   c                       e Zd ZdS )ClusterConstraintDemandNrg   r   r   r   rj   rj      rh   r   rj   c                       e Zd ZU  ee          Zee         ed<    ee          Z	ee
         ed<    ee          Zee         ed<   dS )ResourceDemandSummarydefault_factoryplacement_group_demandray_task_actor_demandcluster_constraint_demandN)r   r   r   r   listro   r   rZ   r   rp   rf   rq   rj   r   r   r   rl   rl      s          BGB B BD!=>    7<eD6Q6Q6Q4 23QQQ?Du@ @ @t$;<     r   rl   c                       e Zd ZU eed<   dZee         ed<   dZee         ed<   dZee	         ed<   dZ
ee	         ed<   dZee         ed<   dS )Statsgcs_request_time_sN#none_terminated_node_request_time_sautoscaler_iteration_time_sautoscaler_versioncluster_resource_state_versionrL   )r   r   r   r   r   rv   r   rw   rx   r   ry   rL   r"   r   r   r   rt   rt      s         
 ;?'%???37%777(,,,,48"HSM888"&L(3-&&&&&r   rt   c                      e Zd ZU  ee          Zee         ed<    ee          Z	ee         ed<    ee          Z
ee         ed<    ee          Zee         ed<    ee          Zee         ed<    ee          Zee         ed<    ee          Zee         ed<    ee          Zeed	<    ee          Zeed
<   deeef         fdZdeeef         fdZdS )ClusterStatusrm   active_nodes
idle_nodespending_launchesfailed_launchespending_nodesfailed_nodescluster_resource_usageresource_demandsstatsr0   c                 $    d | j         D             S )Nc                 (    i | ]}|j         |j        S r   r3   r4   s     r   r7   z1ClusterStatus.total_resources.<locals>.<dictcomp>   s    NNNQNNNr   r   r9   s    r   r;   zClusterStatus.total_resources   s    NN$2MNNNNr   c                 $    d | j         D             S )Nc                 8    i | ]}|j         |j        |j        z
  S r   r>   r4   s     r   r7   z5ClusterStatus.available_resources.<locals>.<dictcomp>   s%    WWWa16!1WWWr   r   r9   s    r   r?   z!ClusterStatus.available_resources   s    WW4;VWWWWr   N)r   r   r   r   rr   r|   r   r$   r   r}   r~   rD   r   r   r   r   r   rl   r   rt   r   r   r   r   r;   r?   r   r   r   r{   r{      s         $)5#>#>#>L$x.>>>!&t!<!<!<JX<<<,1E$,G,G,Gd=)GGG+05+F+F+FOT-(FFF$)E$$?$?$?M4>???#(5#>#>#>L$x.>>>27%2M2M2MD/MMM.3e-/ / /+    5///E5///Oc5j!1 O O O OXT#u*%5 X X X X X Xr   r{   c                       e Zd ZU dZdZee         ed<   dZee	         ed<   dZ
ee         ed<   deeef         fdZdefdZdefd	ZdS )
AutoscalerInstanceaw  
    AutoscalerInstance represents an instance that's managed by the autoscaler.
    This includes two states:
        1. the instance manager state: information of the underlying cloud instance.
        2. the ray node state, e.g. resources, ray node status.

    The two states are linked by the cloud instance id, which should be set
    when the ray node is started.
    Ncloud_instance_idray_nodeim_instancer0   c           	         ddddddddd}|| j         du | j        du | j        du f         \  }}|s||fS | j        O| j        H| j         !t          j        | j        j                  rdS n t          j        | j        j                  sd	S | j        | j         | j        j        k    rd
S | j        | j         | j         | j        j         k    rd
S dS )zValidate the autoscaler instance state.

        Returns:
            A tuple of (valid, error_msg) where:
            - valid is whether the state is valid
            - error_msg is the error message for the validation results.
        )FzNot possible)Tr   )TzKThere's a ray node w/o cloud instance id, must be started not by autoscaler)Fz7Not possible - no way to link im instance with ray node)FzKNot possible since cloud instance id is either part of im state or ray node))TTT)TTF)TFT)TFF)FTT)FTF)FFT)FFFN)FzEinstance should be in a status where cloud instance is not allocated.)FzAinstance should be in a status where cloud instance is allocated.)Fz cloud instance id doesn't match.)r   r   r   r
   is_cloud_instance_allocatedstatusr'   )r:   state_combinationsvalid	error_msgs       r   validatezAutoscalerInstance.validate  s:    !8!+"
#"
 #-",#-)
 
. .&$.% D(
y  	$)##'DM,A%-;D<L<STT   $?$+    =$%)BBB@@'D,B,N%)9)KKK@@xr   c                 \    | j         duo#| j         j        t          j        t          j        fv S )z Whether the ray node is running.N)r   r   r   RUNNINGIDLEr9   s    r   is_ray_runningz!AutoscalerInstance.is_ray_runningV  s3    }D( 
T]-AOF
 .
 	
r   c                 F    | j         du p| j         j        t          j        fv S )z Whether the ray node is stopped.N)r   r   r   DEADr9   s    r   is_ray_stopzAutoscalerInstance.is_ray_stop]  s-    }$ 
(<OA
 )
 	
r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r	   boolr   r   r   r   r   r   r   r      s           (,x}+++ %)Hhy!((( '+K(#***E%c	* E E E EN
 
 
 
 

T 
 
 
 
 
 
r   r   )"r`   dataclassesr   r   enumr   typingr   r   r   r	   )ray.autoscaler.v2.instance_manager.commonr
   !ray.core.generated.autoscaler_pb2r   r   'ray.core.generated.instance_manager_pb2r   NODE_DEATH_CAUSE_RAYLET_DIEDr   NodeTyper   r   r$   rD   rO   rW   rZ   rf   rj   rl   rt   r{   r   r   r   r   <module>r      sw   				 ( ( ( ( ( ( ( (       . . . . . . . . . . . . B B B B B B C C C C C C C C < < < < < <  0                   %L %L %L %L %L %L %L %LP " " " " " " " "* / / / / / / / / 3 3 3 3 3 3 3 3
     >   8 	 	 	 	 	 	 	 	 	 	 	 	 	n 	 	 	 
 
 
 
 
 
 
 
 ' ' ' ' ' ' ' '" X X X X X X X XB @
 @
 @
 @
 @
 @
 @
 @
 @
 @
r   