
    &`i5?                     0   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 d dl	m
Z
mZmZmZm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 d dlmZ d dlmZ d dlmZ d d	l m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z'm(Z( 	 d dl)Z)n# e*$ r dZ)Y nw xY w ej+        e,          Z-e-.                    ej/                   dZ0	 	 	 d!dee1         dee1         dee1         fdZ2e j3         G d d                      Z4ddddddde1dee5         deee1e
f                  deee1e
f                  deee1e
f                  dee5         de4fdZ6	 	 	 	 	 d"dee1         de5deee1e
f                  deee1e
f                  deee1e
f                  de4fdZ7 G d d           Z8dS )#    N)Path)AnyDictListOptionalUnion) format_authentication_http_error get_auth_headers_if_auth_enabled)create_packageget_uri_for_directoryget_uri_for_package)upload_py_modules_if_needed)upload_working_dir_if_needed)split_address)
cli_logger)uri_to_http_components)AuthenticationError)DeveloperAPI	PublicAPIzhttp://localhost:8265runtime_envruntime_env_jsonworking_dirc                    i }| N|t          d          t          | d          5 }t          j        |          }ddd           n# 1 swxY w Y   n|t	          j        |          }|d|v rt          j        d           ||d<   |S )a  
    Generates a runtime_env dictionary using `runtime_env`, `runtime_env_json`,
    and `working_dir` CLI options. Only one of `runtime_env` or
    `runtime_env_json` may be defined. `working_dir` overwrites the
    `working_dir` from any other option.
    NzAOnly one of --runtime_env and --runtime-env-json can be provided.rr   z<Overriding runtime_env working_dir with --working-dir option)
ValueErroropenyaml	safe_loadjsonloadsr   warning)r   r   r   final_runtime_envfs        w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/dashboard/modules/dashboard_sdk.pyparse_runtime_env_argsr%   -   s     'S   +s## 	2q $q 1 1	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 
	% J'788---N   ,7-(s   AAAc                       e Zd ZU eed<   dZeeeef                  ed<   dZ	eeeef                  ed<   dZ
eeeef                  ed<   dS )ClusterInfoaddressNcookiesmetadataheaders)__name__
__module____qualname__str__annotations__r)   r   r   r   r*   r+        r$   r'   r'   P   sr         LLL(,GXd38n%,,,)-HhtCH~&---(,GXd38n%,,,,,r2   r'   Fcreate_cluster_if_neededr)   r*   r+   _use_tlsr(   r4   r)   r*   r+   r5   returnc                >    |rdnd}t          | d|  |||          S )av  Get address, cookies, and metadata used for SubmissionClient.

    If no port is specified in `address`, the Ray dashboard default will be
    inserted.

    Args:
        address: Address without the module prefix that is passed
            to SubmissionClient.
        create_cluster_if_needed: Indicates whether the cluster
            of the address returned needs to be running. Ray doesn't
            start a cluster before interacting with jobs, but other
            implementations may do so.

    Returns:
        ClusterInfo object consisting of address, cookies, and metadata
        for SubmissionClient to use.
    httpshttp://)r(   r)   r*   r+   )r'   )r(   r4   r)   r*   r+   r5   schemes          r$   &get_job_submission_client_cluster_infor<   Y   sC    < !,WWfF''g''	   r2   c           	      P   | t          j                    rot           j        j        j        j        j        d         	 Hdt           j        j        j        j        j        d          } t                              d|  d           n*t                              dt           d           t          } | dk    rt          d          d	| vr#t                              d
|  d           d|  } t          |           \  }}|dk    rt          d|  d          |dv rt          ||||||dk              S 	 t          j        |          }n$# t          $ r t!          d| d|            dw xY wdt#          |          v sJ d| d|              |                    |||||          S )zICreate a cluster if needed and return its address, cookies, and metadata.N	webui_urlzhttp://z6No address provided but Ray is running; using address .z#No address provided, defaulting to autoz*Internal error: unexpected address 'auto'.r:   zPNo scheme (e.g. 'http://') or module string (e.g. 'ray://') provided in address z, defaulting to HTTP.rayz.Internal error: unexpected Ray Client address >   r9   r8   r8   r3   zModule: z6 does not exist.
This module was parsed from address: r<   z^ does not have `get_job_submission_client_cluster_info`.
This module was parsed from address: )r4   r)   r*   r+   )rA   is_initialized_privateworkerglobal_workernodeaddress_infologgerinfoDEFAULT_DASHBOARD_ADDRESSr   r   r<   	importlibimport_module	ExceptionRuntimeErrordir)r(   r4   r)   r*   r+   module_stringinner_addressmodules           r$   parse_cluster_inforS      sn      	0#16CKPV<&49F{SV V  KKSSSS    KKR6ORRR   0G&EFFFGB#*B B B	
 	
 	
 &G%%#0#9#9 M=T'TTTUUU)))5%=#w.
 
 
 	
	,];;FF 	 	 	B= B B8?B B  	
 83v;;FFF>} > >4;> > GFF <<%= = 
 
 	
s   4E	 	!E*c                   P   e Zd Z	 	 	 	 	 	 d,dee         dedeeeef                  deeeef                  deeeef                  d	eeeef                  fd
Z		 d-dedefdZ
	 	 	 d.dededefdZd/dZddddededee         dee         ddf
dZdedefdZ	 	 	 d0dededed ee         d!eee                  d"edefd#Z	 	 	 d0deded ed!eee                  d"edefd$Zd%eeef         fd&Zd%eeef         fd'Z ed()          defd*            Zedefd+            ZdS )1SubmissionClientNFTr(   r4   r)   r*   r+   verifyc                    |H|                     d          r3|                    d          }t                              d| d           t	          |||||          }|j        | _        |j        | _        |j	        pi | _
        |j        pi | _         | j        j        di t          | j                   || _        t!          | j        t"                    rt$          j                            | j                  r
d | j        }	}nFt$          j                            | j                  r
| j        d }	}nt-          d| j         d          t/          j        ||	          | _        d S | j        du r	d| _        d S d | _        d S )	N/zpThe submission address cannot contain trailing slashes. Removing them from the requested submission address of "z".zPath to CA certificates: 'z', does not exist.)cafilecapathFr1   )endswithrstriprH   debugrS   r(   _addressr)   _cookiesr*   _default_metadatar+   _headersupdater
   _verify
isinstancer/   ospathisdirisfileFileNotFoundErrorsslcreate_default_context_ssl_context)
selfr(   r4   r)   r*   r+   rV   cluster_inforY   rZ   s
             r$   __init__zSubmissionClient.__init__   s    7#3#3C#8#8nnS))GLLNBIN N N  
 *-w'
 
 %,$,!-!6!<" %,2OO?NNOOO dlC(( 	)w}}T\** !%t|-- !%t'QQQQ   !$ :&QW X X XD|u$$$)!!!$(!!!r2   1.9min_versionversion_error_messagec                 2    |                      ||           d S N)&_check_connection_and_version_with_url)rm   rq   rr   s      r$   _check_connection_and_versionz.SubmissionClient._check_connection_and_version   s!     	33KAVWWWWWr2   /api/versionurlc                    |d| d}	 |                      d|          }|j        dk    rt          d|z             |                                 |                                d         }t
          j                            |          t
          j                            |          k     rt          d| d|z             d S # t          j	        j
        $ r t          d	| j         d
          w xY w)Nz)Please ensure the cluster is running Ray z or higher.GET  zVersion check returned 404. ray_versionzRay version z is running on the cluster. z%Failed to connect to Ray at address: r?   )_do_requeststatus_coderN   raise_for_statusr   	packagingversionparserequests
exceptionsConnectionErrorr^   )rm   rq   rr   rx   r   running_ray_versions         r$   ru   z7SubmissionClient._check_connection_and_version_with_url  s7    !(TKTTT "	  ,,A}##"25JJ      "#&&((="9 &&':;;i>O>U>U? ?   #T#6TTT+,    "2 	 	 	!HHHH  	s   B7C -C0r   requests.Responsec                 B    t          d|j         d|j         d          )Nz Request failed with status code z: r?   )rN   r~   textrm   r   s     r$   _raise_errorzSubmissionClient._raise_error!  s.    Iq}IIIII
 
 	
r2   )data	json_datamethodendpointr   r   r6   c          	         | j         |z   }t                              d| d|pi  d           t          j        ||f| j        ||| j        | j        d|}t          |j	        |j
                  }|rt          |          |S )zPerform the actual HTTP request with authentication error handling.

        Keyword arguments other than "cookies", "headers" are forwarded to the
        `requests.request()`.
        zSending request to z with json data: r?   )r)   r   r   r+   rV   )r^   rH   r]   r   requestr_   ra   rc   r	   r~   r   r   )	rm   r   r   r   r   kwargsrx   responseformatted_errors	            r$   r}   zSubmissionClient._do_request&  s     mh&S3SSbSSSTTT#	
 MM<	
 	
 	
 	
 ; (-
 
  	7%o666r2   package_uric                 8   t          |          \  }}|                     dd| d|           }|j        dk    r t                              d| d           dS |j        dk    r t                              d| d	           d
S |                     |           d S )Nrz   /api/packages/rX      Package z already exists.Tr{   z does not exist.F)r   r}   r~   rH   r]   r   )rm   r   protocolpackage_namer   s        r$   _package_existsz SubmissionClient._package_existsK  s     "8!D!D,U$NX$N$N$N$NOO=CLLAKAAABBB4]c!!LLAKAAABBB5a     r2   package_pathinclude_gitignoreinclude_parent_direxcludesis_filec                 6   t                               d| d           t          j                    5 }t	          |          \  }}	|rt          |          }
n&t          |          |	z  }
t          ||
|||           	 |                     dd| d|	 |
                                          }|j	        dk    r| 
                    |           |s|
                                 n# |s|
                                 w w xY wd d d            d S # 1 swxY w Y   d S )	NzUploading package r?   )r   r   r   PUTr   rX   )r   r   )rH   rI   tempfileTemporaryDirectoryr   r   r   r}   
read_bytesr~   r   unlink)rm   r   r   r   r   r   r   tmp_dirr   r   package_filer   s               r$   _upload_packagez SubmissionClient._upload_package[  s    	7777888(** 	*g%;K%H%H"Hl 
#L11#G}}|;  &7'9%   *$$>X>>>>%0022 %  
 =C''%%a(((  * '')))  * ''))))*/	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s+   AD>AC%D%C>>DDDc                    |rt          t          |                    }nt          |||          }|                     |          s|                     ||||||           nt
                              d| d           |S )N)r   r   r   r   r   r   z! already exists, skipping upload.)r   r   r   r   r   rH   rI   )rm   r   r   r   r   r   r   s          r$   _upload_package_if_neededz*SubmissionClient._upload_package_if_needed  s      	-d<.@.@AAKK//(  K ##K00 
	S  "3#5! !     KKQ;QQQRRRr2   r   c                      ddl m} t          j                            |d          dk    d fd	}t          ||           d S )	Nr    RAY_RUNTIME_ENV_IGNORE_GITIGNORE01Fc                 <                         | d||           d S )NFr   r   )r   r   r   r   rm   s      r$   
_upload_fnzBSubmissionClient._upload_working_dir_if_needed.<locals>._upload_fn  s9    **"3#(! +     r2   r   	upload_fnF)ray._private.ray_constantsr   re   environgetr   rm   r   r   r   r   s   `   @r$   _upload_working_dir_if_neededz.SubmissionClient._upload_working_dir_if_needed  s    OOOOOO JNN+KSQQUXX	 	 	 	 	 	 	 	%+<
	
 	
 	
 	
 	
 	
r2   c                      ddl m} t          j                            |d          dk    d fd	}t          ||           d S )	Nr   r   r   r   Fc                 <                         | d||           d S )NTr   r   )module_pathr   r   r   rm   s      r$   r   zASubmissionClient._upload_py_modules_if_needed.<locals>._upload_fn  s9    **"3#'! +     r2   r   r   )r   r   re   r   r   r   r   s   `   @r$   _upload_py_modules_if_neededz-SubmissionClient._upload_py_modules_if_needed  s    OOOOOO JNN+KSQQUXX	 	 	 	 	 	 	 	$+<
	
 	
 	
 	
 	
 	
r2   beta)	stabilityc                     |                      dd          }|j        dk    r'|                                                    d          S |                     |           d S )Nrz   rw   r   r   )r}   r~   r   r   r   r   s     r$   get_versionzSubmissionClient.get_version  sX    UN33=C6688<<	***a     r2   c                     | j         S rt   )r^   )rm   s    r$   get_addresszSubmissionClient.get_address  s
    }r2   )NFNNNT)rp   N)rp   Nrw   )r   r   )FNF)r,   r-   r.   r   r/   boolr   r   r   ro   rv   ru   r   bytesdictr}   r   r   r   r   r   r   r   r   r   r   r1   r2   r$   rU   rU      sE        "&).,0-1,0-1-) -)#-) #'-) $sCx.)	-)
 4S>*-) $sCx.)-) sDy)*-) -) -) -)` FJX XX?BX X X X !%)!	   # 	   @
 
 
 
 !%$(# # ## #
 uo# D># 
# # # #J!! 
! ! ! !* .3(,"* "*"* "*  	"*
 %TN"* 49%"* "* 
"* "* "* "*P $)(,    !	
 49%  
   :
c3h 
 
 
 
(
S#X 
 
 
 
( Y   !S ! ! ! ! ! S    \  r2   rU   )NNN)NFNNN)9dataclassesrK   r   loggingre   rj   r   pathlibr   typingr   r   r   r   r   packaging.versionr   r   rA   5ray._private.authentication.http_token_authenticationr	   r
   "ray._private.runtime_env.packagingr   r   r   #ray._private.runtime_env.py_modulesr   $ray._private.runtime_env.working_dirr   ray._private.utilsr   "ray.autoscaler._private.cli_loggerr    ray.dashboard.modules.job.commonr   ray.exceptionsr   ray.util.annotationsr   r   r   ImportError	getLoggerr,   rH   setLevelINFOrJ   r/   r%   	dataclassr'   r   r<   rS   rU   r1   r2   r$   <module>r      s             				 



        3 3 3 3 3 3 3 3 3 3 3 3 3 3      



                
 L K K K K K M M M M M M , , , , , , 9 9 9 9 9 9 C C C C C C . . . . . . 8 8 8 8 8 8 8 8OOOO   HHH 
	8	$	$     4  "&&*!%   # sm  #       F - - - - - - - - 05(,)-(,$$ $ $$ 'tn$ d38n%$ tCH~&$ d38n%$ tn$ $ $ $ $P "%*(,)-(,I
 I
c]I
"I
 d38n%I
 tCH~&	I

 d38n%I
 I
 I
 I
 I
XB B B B B B B B B Bs   <B B
B