
    &`i]\              
          d dl Z d dlZd dlZd dlZd dlZd dl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 d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ erd d	lmZ d d
lmZ d dl Z d dl!Z d dl"m#c m$Z$ d dl%m#c m&Z& d dl'm(c m)Z) d dl*m+Z+ d dlm,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 	 ej4        Z4n# e5$ r
 ej6        Z4Y nw xY w ej7        e8          Z9 G d de          Z: G d de;          Z< G d de j=                  Z>e G d d                      Z? G d de j=                  Z@ G d de j=                  ZAd ZBd ZCd ZDd ZEd d!d"eeeFeeeFef                  f                  fd#ZG G d$ d%ejH                  ZId& ZJd' ZKd?d(ZL G d) d*eM          ZN	 eMeOePeFeQeReS eTd          eUh	ZVd+ ZWd@d-ZX G d. d/e	0          ZY G d1 d2eYe          ZZ G d3 d4eYe          Z[eY\                                D ]Z]eV^                    e]           dAd6Z_d7eFfd8Z`d7eeF         d"eFfd9Zad7eeF         d"eFfd:Zbd;eeF         d<eeF         d"eeF         fd=Zcd> ZddS )B    N)ABCMetaabstractmethod)	b64decode)MappingSequence)	dataclass)IntEnum)TYPE_CHECKINGAnyDictListOptional)binary_to_hex)GetNodeStatsReply)Version)parse_address)get_or_create_event_loop)
GcsChannel)get_dashboard_dependency_errorsplit_address)	GcsClientc                   "    e Zd ZdZdZdZdZdZdS )HTTPStatusCode   i  i  i  i  N)__name__
__module____qualname__OKBAD_REQUEST	NOT_FOUNDTOO_MANY_REQUESTSINTERNAL_ERROR     g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/dashboard/utils.pyr   r   .   s,        	B KI NNNr$   r   c                       e Zd ZdS )FrontendNotFoundErrorN)r   r   r   r#   r$   r%   r'   r'   ;   s        Dr$   r'   c                   z    e Zd Zd Zej        d             Zeej        d                         Z	e
d             ZdS )DashboardAgentModulec                 ,    || _         |j        | _        dS )z
        Initialize current module when DashboardAgent loading modules.
        :param dashboard_agent: The DashboardAgent instance.
        N)_dashboard_agentsession_name)selfdashboard_agents     r%   __init__zDashboardAgentModule.__init__@   s    
 !0+8r$   c                 
   K   dS )z
        Run the module in an asyncio loop. An agent module can provide
        servicers to the server.
        :param server: Asyncio GRPC server, or None if ray is minimal.
        Nr#   )r-   servers     r%   runzDashboardAgentModule.runH   
        r$   c                      dS z
        Return True if the module is minimal, meaning it
        should work with `pip install ray` that doesn't requires additional
        dependencies.
        Nr#   r#   r$   r%   is_minimal_modulez&DashboardAgentModule.is_minimal_moduleP         r$   c                     | j         j        S N)r+   gcs_addressr-   s    r%   r:   z DashboardAgentModule.gcs_addressY   s    $00r$   N)r   r   r   r/   abcr   r2   staticmethodabstractclassmethodr6   propertyr:   r#   r$   r%   r)   r)   ?   s        9 9 9 	      \ 1 1 X1 1 1r$   r)   c                   t    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   dS )DashboardHeadModuleConfigminimalcluster_id_hexr,   r:   log_dirtemp_dirsession_dirip	http_host	http_portN)r   r   r   bool__annotations__strintr#   r$   r%   rA   rA   ^   sv         MMMLLLMMMGGGNNNNNNNNr$   rA   c                   r   e Zd ZdefdZed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zej        d             Zeej        d                         ZdS )DashboardHeadModuleconfigc                 >    || _         d| _        d| _        d| _        dS )z
        Initialize current module when DashboardHead loading modules.
        :param config: The DashboardHeadModuleConfig instance.
        N)_config_gcs_client_aiogrpc_gcs_channel_http_session)r-   rP   s     r%   r/   zDashboardHeadModule.__init__m   s)    
 $(!!r$   c                     | j         j        S r9   )rR   rB   r;   s    r%   rB   zDashboardHeadModule.minimalw       |##r$   c                     | j         j        S r9   )rR   r,   r;   s    r%   r,   z DashboardHeadModule.session_name{   s    |((r$   c                     | j         j        S r9   )rR   r:   r;   s    r%   r:   zDashboardHeadModule.gcs_address       |''r$   c                     | j         j        S r9   )rR   rD   r;   s    r%   rD   zDashboardHeadModule.log_dir   rW   r$   c                     | j         j        S r9   )rR   rE   r;   s    r%   rE   zDashboardHeadModule.temp_dir   s    |$$r$   c                     | j         j        S r9   )rR   rF   r;   s    r%   rF   zDashboardHeadModule.session_dir   rZ   r$   c                     | j         j        S r9   )rR   rG   r;   s    r%   rG   zDashboardHeadModule.ip   s    |r$   c                     | j         j        S r9   )rR   rH   r;   s    r%   rH   zDashboardHeadModule.http_host       |%%r$   c                     | j         j        S r9   )rR   rI   r;   s    r%   rI   zDashboardHeadModule.http_port   r`   r$   c                 ,   | j         j        r
J d            dd l}| j        | j        S t	          |j                  t	          d          k     r(|                    t                                | _        n|                                | _        | j        S )Nz%http_session accessed in minimal Ray.r   z4.0.0)loop)rR   rB   aiohttprU   r   __version__ClientSessionr   )r-   rd   s     r%   http_sessionz DashboardHeadModule.http_session   s    <'PP)PPP')%% 7&''''*:*:::!(!6!6<T<V<V!6!W!WD!(!6!6!8!8D!!r$   c                     | j         Vt          | j        j        | j        j                  | _         t          j                    st          j        | j                    | j         S )N)address
cluster_id)rS   r   rR   r:   rC   internal_kv_internal_kv_initialized_initialize_internal_kvr;   s    r%   
gcs_clientzDashboardHeadModule.gcs_client   sc    #(0<6     D 799 F3D4DEEEr$   c                     | j         j        rd S | j        Ht          | j         j        d          }|                                 |                                | _        | j        S )NT)r:   aio)rR   rB   rT   r   r:   connectchannel)r-   gcs_channels     r%   aiogrpc_gcs_channelz'DashboardHeadModule.aiogrpc_gcs_channel   se     < 	4$,$1ItTTTK!!!(3(;(;(=(=D%((r$   c                 
   K   dS )zo
        Run the module in an asyncio loop. A head module can provide
        servicers to the server.
        Nr#   r;   s    r%   r2   zDashboardHeadModule.run   r3   r$   c                      dS r5   r#   r#   r$   r%   r6   z%DashboardHeadModule.is_minimal_module   r7   r$   N)r   r   r   rA   r/   r?   rB   r,   r:   rD   rE   rF   rG   rH   rI   rg   rn   rt   r<   r   r2   r=   r>   r6   r#   r$   r%   rO   rO   l   s       "8 " " " " $ $ X$ ) ) X) ( ( X( $ $ X$ % % X% ( ( X(   X & & X& & & X& " " X"     X  ) ) X) 	      \  r$   rO   c                   f    e Zd ZdZddedeej                 fdZe	d             Z
ed             ZdS )	RateLimitedModulea  Simple rate limiter

    Inheriting from this class and decorate any class methods will
    apply simple rate limit.
    It will limit the maximal number of concurrent invocations of **all** the
    methods decorated.

    The below Example class will only allow 10 concurrent calls to A() and B()

    E.g.:

        class Example(RateLimitedModule):
            def __init__(self):
                super().__init__(max_num_call=10)

            @RateLimitedModule.enforce_max_concurrent_calls
            async def A():
                ...

            @RateLimitedModule.enforce_max_concurrent_calls
            async def B():
                ...

            async def limit_handler_(self):
                raise RuntimeError("rate limited reached!")

    Nmax_num_callloggerc                 0    || _         d| _        || _        dS )z
        Args:
            max_num_call: Maximal number of concurrent invocations of all decorated
                functions in the instance.
                Setting to -1 will disable rate limiting.

            logger: Logger
        r   N)max_num_call_	num_call_logger_)r-   ry   rz   s      r%   r/   zRateLimitedModule.__init__   s     *r$   c                 F     t          j                    fd            }|S )a  Decorator to enforce max number of invocations of the decorated func

        NOTE: This should be used as the innermost decorator if there are multiple
        ones.

        E.g., when decorating functions already with @routes.get(...), this must be
        added below then the routes decorators:
            ```
            @routes.get('/')
            @RateLimitedModule.enforce_max_concurrent_calls
            async def fn(self):
                ...

            ```
        c                 Z  K   | j         dk    rS| j        | j         k    rC| j        r"| j                            d| j                     |                                  d {V S | xj        dz  c_        	  | g|R i | d {V }| xj        dz  c_        n# | xj        dz  c_        w xY w|S )Nr   z Max concurrent requests reached=   )r|   r}   r~   warninglimit_handler_)r-   argskwargsretfuncs       r%   async_wrapperzERateLimitedModule.enforce_max_concurrent_calls.<locals>.async_wrapper  s      !Q&&4>T=O+O+O< L((O4;MOO   "00222222222NNaNN$ D777777777777!#!#Js   3B B(	functoolswraps)r   r   s   ` r%   enforce_max_concurrent_callsz.RateLimitedModule.enforce_max_concurrent_calls   s;    $ 
			 	 	 	 
		  r$   c                 
   K   dS )zCHandler that is invoked when max number of concurrent calls reachedNr#   r;   s    r%   r   z RateLimitedModule.limit_handler_   r3   r$   r9   )r   r   r   __doc__rM   r   loggingLoggerr/   r=   r   r   r   r#   r$   r%   rx   rx      s         8 S (7>2J     " " \"H R R ^R R Rr$   rx   c                       fd}|S )z!A decorator for dashboard module.c                     | _         | S r9   )__ray_dashboard_module_enable__)clsenables    r%   _cls_wrapperz&dashboard_module.<locals>._cls_wrapper(  s    .4+
r$   r#   )r   r   s   ` r%   dashboard_moduler   %  s$         r$   c                    t                               d| j                    ddl}t	                      du}t          j        |j        j        j	        |j        j        j        dz             D ]p\  }}}	 t          j        |           # t          $ rH}t                               d| d|            |st                               d           |Y d}~id}~ww xY wg }|                                 D ]@}t          |dd	          s|r|                                s+|                    |           At                               d
|            |S )zN
    Get all importable modules that are subclass of a given module type.
    zGet all modules by type: r   N.zModule z cannot be loaded because we cannot import all dependencies. Install this module using `pip install 'ray[default]'` for the full dashboard functionality. Error: zQAlthough `pip install 'ray[default]'` is downloaded, module couldn't be imported`r   TzAvailable modules: )rz   infor   ray.dashboard.modulesr   pkgutilwalk_packages	dashboardmodules__path__	importlibimport_moduleModuleNotFoundError__subclasses__getattrr6   append)	module_typeray should_only_load_minimal_modulesmodule_loadernameispkgeimported_modulesms	            r%   get_all_modulesr   /  s    KKBK,@BBCCC    'E'G'Gt'S$&-&;&(=(F(L' '  "tU	#D))))" 	 	 	KK7$ 7 7 457 7   4 3       	  '')) # #q;TBB 	+ 	A4G4G4I4I 	""""
KK8&688999s   4B		
C>CCc                 X    | t          j         ddd          z
                                  S )Ni  r   )datetimetotal_seconds)dts    r%   to_posix_timer   X  s(    "4A...==???r$   c                 v    t          | t                    r| S t          |           \  }}|t          |          fS r9   )
isinstancetupler   rM   )ri   rG   ports      r%   address_tupler   \  s:    '5!! W%%HBs4yy=r$   messager   returnc                 `    h d| j         }t          |           }fd|D             |d<   |S )N>	   jobIdnodeIdtaskIdactorIdcallerIdworkerIdparentTaskIdsourceActorIdplacementGroupIdc                 4    g | ]}t          |d           S )T)$always_print_fields_with_no_presence)message_to_dict).0r   decode_keyss     r%   
<listcomp>z&node_stats_to_dict.<locals>.<listcomp>s  s8     " " " 	;TRRR" " "r$   coreWorkersStats)core_workers_statsr   )r   r   resultr   s      @r%   node_stats_to_dictr   c  sc    
 
 
K !3Wk22F" " " "#" " "F Mr$   c                       e Zd Zd ZdS )CustomEncoderc                     t          |t                    rt          |          S t          |t                    r|                                S t
          j                            | |          S r9   )r   bytesr   	ImmutablemutablejsonJSONEncoderdefault)r-   objs     r%   r   zCustomEncoder.default{  s[    c5!! 	& %%%c9%% 	!;;== ''c222r$   N)r   r   r   r   r#   r$   r%   r   r   z  s#        3 3 3 3 3r$   r   c                     |                      d          }|d         d                    d |dd         D                       z   S )z"Convert a snake str to camel case._r    c              3   >   K   | ]}|                                 V  d S r9   )title)r   xs     r%   	<genexpr>z to_camel_case.<locals>.<genexpr>  s*      "E"E17799"E"E"E"E"E"Er$   r   N)splitjoin)	snake_str
componentss     r%   to_camel_caser     sG    %%J a=277"E"Ejn"E"E"EEEEEr$   c                    i }|                                  D ]\  }}t          |t                    r t          |          |t	          |          <   :t          |t
                    rgg }|D ]O}t          |t                    r#|                    t          |                     :|                    |           P||t	          |          <   ||t	          |          <   |S )z3Recursive convert all keys in dict to google style.)itemsr   dictto_google_styler   listr   )dnew_dictkvnew_listis         r%   r   r     s    H		 + +1a 	+)8););H]1%%&&4   		+H ' 'a&& 'OOOA$6$67777OOA&&&&)1H]1%%&&)*H]1%%&&Or$   c                 l    fdt          j        j        j        | fddi|}r |          S |S )z(Convert protobuf message to Python dict.c                    |                                  D ]\  }}t          |t                    r |          | |<   t          |t                    rVg }|D ]K}t          |t                    r|                     |                     6|                    |           L|| |<   |v r t          t          |                    | |<   || |<   | S r9   )r   r   r   r   r   r   r   )r   r   r   r   r   _decode_keysr   s        r%   r   z%message_to_dict.<locals>._decode_keys  s    GGII 	 	DAq!T"" '#|A!!T""  + +A!!T** + Q8888 ****!##(166AaDDAaDDr$   use_integers_for_enumsF)r   _privateprotobuf_compatr   )r   r   r   r   r   s    `  @r%   r   r     sp         & 	$4	 	(-	17	 	A  |Ar$   c                       e Zd ZdZd Zd ZdS )BunchzA dict with attribute-access.c                 h    	 |                      |          S # t          $ r t          |          w xY wr9   )__getitem__KeyErrorAttributeErrorr-   keys     r%   __getattr__zBunch.__getattr__  sD    	&##C((( 	& 	& 	& %%%	&s    1c                 2    |                      ||           d S r9   )__setitem__)r-   r   values      r%   __setattr__zBunch.__setattr__  s    e$$$$$r$   N)r   r   r   r   r   r  r#   r$   r%   r   r     s8        ''& & &% % % % %r$   r   c                 :    t          d| j        j        z            )Nz%r objects are immutable)	TypeError	__class__r   r;   s    r%   is_immutabler    s    
.1HH
I
IIr$   Tc                     t          |           }|t          u rt          |           S |t          u rt	          |           S |r+|t
          vr"t          d                    |                    | S )NzType {} can't be immutable.)typer   ImmutableDictr   ImmutableList_json_compatible_typesr  format)r  strict
value_types      r%   make_immutabler    sv    eJTU###TU### N3339@@LLMMMLr$   c                   $    e Zd Zed             ZdS )r   c                     d S r9   r#   r;   s    r%   r   zImmutable.mutable  s    r$   N)r   r   r   r   r   r#   r$   r%   r   r     s-          ^  r$   r   )	metaclassc                   L    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )r  z Makes a :class:`list` immutable.)_list_proxyc                    t          |          t          t          fvrt          t          |           d          t	          |t                    r|                                }|| _        d gt          |          z  | _        d S )Nz object is not a list.)	r
  r   r  r  r   r   r  lenr  )r-   
list_values     r%   r/   zImmutableList.__init__  s{    
D-#888tJ//GGGHHHj-00 	.#++--J
fs:.r$   c                 0    t          |           | j        ffS r9   )r
  r  r-   protocols     r%   __reduce_ex__zImmutableList.__reduce_ex__      DzzDJ=((r$   c                     | j         S r9   )r  r;   s    r%   r   zImmutableList.mutable	  
    zr$   c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r  r   r   __eq__r  r-   others     r%   r#  zImmutableList.__eq__  7    e]++ 	$MMOOE{{4:u---r$   c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r  r   r   __ne__r  r$  s     r%   r(  zImmutableList.__ne__  r&  r$   c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r   r   r   __contains__r  r-   items     r%   r*  zImmutableList.__contains__  9    dI&& 	"<<>>D  T222r$   c                 l    | j         |         }|$t          | j        |                   x}| j         |<   |S r9   )r  r  r  r-   r,  proxys      r%   r   zImmutableList.__getitem__  s8    D!=(6tz$7G(H(HHEDK%r$   c                 *    t          | j                  S r9   )r  r  r;   s    r%   __len__zImmutableList.__len__!      4:r$   c                 `    | j         j        dt                              | j                  dS N())r  r   r   __repr__r  r;   s    r%   r8  zImmutableList.__repr__$  ,    >222DMM$*4M4M4M4MNNr$   N)r   r   r   r   	__slots__r/   r  r   r#  r(  r*  r   r2  r8  r#   r$   r%   r  r    s        **#I/ / /) ) )  . . .
. . .
3 3 3
    O O O O Or$   r  c                   `    e Zd ZdZdZd Zd Zd ZddZd Z	d	 Z
d
 Zd ZdefdZd Zd ZdS )r  z Makes a :class:`dict` immutable.)_dictr  c                     t          |          t          t          fvrt          t          |           d          t	          |t                    r|                                }|| _        i | _        d S )Nz object is not a dict.)r
  r   r  r  r   r   r<  r  )r-   
dict_values     r%   r/   zImmutableDict.__init__-  sn    
D-#888tJ//GGGHHHj-00 	.#++--J
r$   c                 0    t          |           | j        ffS r9   )r
  r<  r  s     r%   r  zImmutableDict.__reduce_ex__5  r  r$   c                     | j         S r9   )r<  r;   s    r%   r   zImmutableDict.mutable8  r!  r$   Nc                 R    	 | |         S # t           $ r t          |          cY S w xY wr9   )r   r  )r-   r   r   s      r%   getzImmutableDict.get;  s@    	+9 	+ 	+ 	+!'*****	+s   
 &&c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r  r   r   r#  r<  r$  s     r%   r#  zImmutableDict.__eq__A  r&  r$   c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r  r   r   r(  r<  r$  s     r%   r(  zImmutableDict.__ne__F  r&  r$   c                     t          |t                    r|                                }t                              | j        |          S r9   )r   r   r   r   r*  r<  r+  s     r%   r*  zImmutableDict.__contains__K  r-  r$   c                     | j                             |d           }|$t          | j        |                   x}| j         |<   |S r9   )r  rB  r  r<  r/  s      r%   r   zImmutableDict.__getitem__P  sA    d++=(6tz$7G(H(HHEDK%r$   r   c                 *    t          | j                  S r9   )r  r<  r;   s    r%   r2  zImmutableDict.__len__V  r3  r$   c                 .   t          | j                  t          | j                  k    rX| j                                        | j                                        z
  D ]$}t	          | j        |                   | j        |<   %t          | j                  S r9   )r  r  r<  keysr  iterr   s     r%   __iter__zImmutableDict.__iter__Y  s|    t{s4:..z((4;+;+;+=+== C C#1$*S/#B#BC  DK   r$   c                 `    | j         j        dt                              | j                  dS r5  )r  r   r   r8  r<  r;   s    r%   r8  zImmutableDict.__repr___  r9  r$   r9   )r   r   r   r   r:  r/   r  r   rB  r#  r(  r*  r   rM   r2  rK  r8  r#   r$   r%   r  r  (  s        **#I  ) ) )  + + + +. . .
. . .
3 3 3
      ! ! !O O O O Or$   r  Fc                       fd}|S )Nc                 L     t          j                    fd            }|S )Nc                  j  K   	 	  | i | d {V  n# t           j        $ rJ}r t                              d d           |t                              d d           Y d }~n1d }~wt
          $ r! t                              d d           Y nw xY wt          j                   d {V  )NTz-An async loop forever coroutine is cancelled r   z0Can not cancel the async loop forever coroutine zError looping coroutine )asyncioCancelledErrorrz   r   	exception	Exceptionsleep)r   r   excancellablecorointerval_secondss      r%   _looperz5async_loop_forever.<locals>._wrapper.<locals>._looperj  s@     6I$///////////- 
 
 
" 	WPTWWW   !((9159 9 9        ! I I I$$%G%G%G%GHHHHHIm$4555555555!6s    BA A))+BBr   )rW  rY  rV  rX  s   ` r%   _wrapperz$async_loop_forever.<locals>._wrapperi  sC    				6 	6 	6 	6 	6 	6 
		6& r$   r#   )rX  rV  rZ  s   `` r%   async_loop_foreverr[  h  s)         . Or$   ri   c                 t    t          j        |           5 }|j        }ddd           n# 1 swxY w Y   d| S )zConvert a Ray Client address of a running Ray cluster to its API server URL.

    Args:
        address: The Ray Client address, e.g. "ray://my-cluster".

    Returns:
        str: The API server URL of the cluster, e.g. "http://<head-node-ip>:8265".
    ri   Nhttp://)r   initdashboard_url)ri   client_contextr`  s      r%   $ray_client_address_to_api_server_urlrb    s     
'	"	"	" 5n&45 5 5 5 5 5 5 5 5 5 5 5 5 5 5 %]$$$s   *..c                 ^   t          j        |           } t          |           }t          j        j                            |           t          j        j        	                    |t          j        t          j        d          }|t          d          d|                                 }|S )a  Parse a Ray cluster address into API server URL.

    When an address is provided, it will be used to query GCS for
    API server address from GCS, so a Ray cluster must be running.

    When an address is not provided, it will first try to auto-detect
    a running Ray instance, or look for local GCS process.

    Args:
        address: Ray cluster bootstrap address or Ray Client address.
            Could also be `auto`.

    Returns:
        API server HTTP URL.
    r]     )	namespacenum_retriesNzCouldn't obtain the API server address from GCS. It is likely that the GCS server is down. Check gcs_server.[out | err] to see if it is still alive.r^  )services%canonicalize_bootstrap_address_or_dier   r   experimentalrk   rm   r   utilsinternal_kv_get_with_retryray_constantsDASHBOARD_ADDRESSKV_NAMESPACE_DASHBOARD
ValueErrordecode)ri   rn   api_server_urls      r%   ray_address_to_api_server_urlrr    s    " <WEEG7+++J 88DDD\'BB'6	 C  N 
 
 	
 9~446688Nr$   c                 "   t           j                            t          j                  x}r |} t
                              d|             nJt           j                            t          j                  x}r|} t
                              d|             | rJd| v rFt          |           \  }}|dk    r-t
                              d|  d           t          |           } nt          |           } t
                              d|  d           | S )	a  Get Ray API server address from Ray bootstrap or Client address.

    If None, it will try to auto-detect a running Ray instance, or look
    for local GCS process.

    `address` is always overridden by the RAY_ADDRESS environment
    variable, just like the `address` argument in `ray.init()`.

    Args:
        address: Ray cluster bootstrap address or Ray Client address.
            Could also be "auto".

    Returns:
        API server HTTP URL, e.g. "http://<head-node-ip>:8265".
    zUsing RAY_API_SERVER_ADDRESS=zUsing RAY_ADDRESS=z://r   z6Retrieving API server address from Ray Client address z...zUsing API server address r   )osenvironrB  rl  +RAY_API_SERVER_ADDRESS_ENVIRONMENT_VARIABLErz   debug RAY_ADDRESS_ENVIRONMENT_VARIABLEr   rb  rr  )ri   api_server_addressray_addressmodule_stringr   s        r%   !get_address_for_submission_clientr|    s"      Z^^A   5 %>W>>????
}'UVV	V 53'33444 	95G##(11qE!!LLUUUU   ;7CCG 088
LL7W777888Nr$   death_reasondeath_reason_messagec                 p    | dk    rd}n| dk    rd}n| dk    rd}n| dk    rd}nd	}|r|r	|d
| z  }n|}|S )aE  Compose node state message based on death information.

    Args:
        death_reason: The reason of node death.
            This is a string representation of `gcs_pb2.NodeDeathInfo.Reason`.
        death_reason_message: The message of node death.
            This corresponds to `gcs_pb2.NodeDeathInfo.ReasonMessage`.
    EXPECTED_TERMINATIONzExpected terminationUNEXPECTED_TERMINATIONzUnexpected terminationAUTOSCALER_DRAIN_PREEMPTEDzTerminated due to preemptionAUTOSCALER_DRAIN_IDLEz(Terminated due to idle (no Ray activity)Nz: r#   )r}  r~  state_messages      r%   compose_state_messager    s     ---.	1	1	10	5	5	56	0	0	0B 1 	18"6888MM0Mr$   c                 B    | j         D ]}|                                 d S r9   )handlersclose)logger_instancehandlers     r%   close_logger_file_descriptorr     s-    "+   r$   r9   )T)F)er<   rP  r   r   r   r   r   rt  r   r   r   base64r   collections.abcr   r   dataclassesr   enumr	   typingr
   r   r   r   r   ray._common.utilsr   #ray.core.generated.node_manager_pb2r   packaging.versionr   r   ray._private.protobuf_compatray._private.ray_constantsr   rl  ray._private.servicesrg  ray.experimental.internal_kvri  rk   ray._common.network_utilsr   r   ray._private.gcs_utilsr   ray._private.utilsr   r   ray._rayletr   create_taskr   ensure_future	getLoggerr   rz   r   OSErrorr'   ABCr)   rA   rO   rx   r   r   r   r   rL   r   r   r   r   r   r   r   r   r   r   rM   floatrJ   r
  r   r  r  r  r   r  r  r   immutable_typeaddr[  rb  rr  r|  r  r  r#   r$   r%   <module>r     si   



             				  ' ' ' ' ' ' ' '       - - - - - - - - ! ! ! ! ! !       ; ; ; ; ; ; ; ; ; ; ; ; ; ; + + + + + + FEEEEEE % % % % % % 



 # # # # 2 2 2 2 2 2 2 2 2 ( ( ( ( ( ( ( ( ( 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 6 6 6 6 6 6 - - - - - -        " ! ! ! ! !(%KK ( ( ('KKK( 
	8	$	$
 
 
 
 
W 
 
 
	 	 	 	 	G 	 	 	1 1 1 1 137 1 1 1> 
 
 
 
 
 
 
 
b b b b b#' b b bJQR QR QR QR QR QR QR QRh  & & &R@ @ @   d3T#s(^,,-.   .3 3 3 3 3D$ 3 3 3F F F  (   >
% 
% 
% 
% 
%D 
% 
% 
%( eS#udDDJJPUV J J J	 	 	 	    '    ,O ,O ,O ,O ,OIx ,O ,O ,O^8O 8O 8O 8O 8OIw 8O 8O 8Ox  ..00 / /N~....   6%# % % % %%8C= %S % % % %P%x} % % % % %P3-7?}c]   <    s   -B5 5CC