
    &`iW                     $   d dl Z d dlZd dlZd dl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mZmZmZmZ d dlmZ d dlmZ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" dZ#dZ$e ddz   Z%dZ&dZ' ej(        e)          Z* e"d           G d de+e	                      Z, e"d           G d de+e	                      Z- e"d          e G d d                                  Z. G d d          Z/de+dee+e+f         fdZ0d e+d!e+de+fd"Z1d#ee+ef         d$edefd%Z2e G d& d'                      Z3e G d( d)                      Z4e G d* d+                      Z5e G d, d-                      Z6e G d. d/                      Z7dS )0    N)asdict	dataclassreplace)Enum)Path)AnyDictOptionalTupleUnion)ray_constants)EventLogTypecheck_export_api_enabledget_export_event_logger)	parse_uri)RAY_INTERNAL_NAMESPACE_PREFIX	GcsClient)ExportEvent)ExportSubmissionJobEventData)	PublicAPIjob_submission_idjob_name
job_actor_{job_id}SUPERVISOR_ACTOR_RAY_NAMESPACEzjob-driver-{submission_id}.logstable)	stabilityc                   >    e Zd ZdZdZdZdZdZdZde	fdZ
defd	Zd
S )	JobStatusz2An enumeration for describing the status of a job.PENDINGRUNNINGSTOPPED	SUCCEEDEDFAILEDreturnc                     | j          S Nvalueselfs    t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/dashboard/modules/job/common.py__str__zJobStatus.__str__4   s    *    c                     | j         dv S )a  Return whether or not this status is terminal.

        A terminal status is one that cannot transition to any other status.
        The terminal statuses are "STOPPED", "SUCCEEDED", and "FAILED".

        Returns:
            True if this status is terminal, otherwise False.
        >   r$   r"   r#   r(   r*   s    r,   is_terminalzJobStatus.is_terminal7   s     z???r.   N)__name__
__module____qualname____doc__r    r!   r"   r#   r$   strr-   boolr0    r.   r,   r   r   %   sr        << GGGIF    	@T 	@ 	@ 	@ 	@ 	@ 	@r.   r   c                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )JobErrorTypez6An enumeration for describing the error type of a job.RUNTIME_ENV_SETUP_FAILURE"JOB_SUPERVISOR_ACTOR_START_TIMEOUT"JOB_SUPERVISOR_ACTOR_START_FAILURE"JOB_SUPERVISOR_ACTOR_UNSCHEDULABLE$JOB_SUPERVISOR_ACTOR_UNKNOWN_FAILUREJOB_SUPERVISOR_ACTOR_DIED"JOB_ENTRYPOINT_COMMAND_START_ERRORJOB_ENTRYPOINT_COMMAND_ERRORN)r1   r2   r3   r4   r:   r;   r<   r=   r>   r?   r@   rA   r7   r.   r,   r9   r9   C   sH        @@ !<)M&)M&)M&+Q( ;)M&#A   r.   r9   c                      e Zd ZU dZ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ef                  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Zee         ed<   dZeeeef                  ed<   dZee         ed<   dZee         ed<   dZee         ed<   d Zdeeef         fdZedeeef         ddfd            ZdS )JobInfozA class for recording information associated with a job and its execution.

    Please keep this in sync with the JobsAPIInfo proto in src/ray/protobuf/gcs.proto.
    status
entrypointNmessage
error_type
start_timeend_timemetadataruntime_enventrypoint_num_cpusentrypoint_num_gpusentrypoint_memoryentrypoint_resourcesdriver_agent_http_addressdriver_node_iddriver_exit_codec                    t          | j        t                    rt          | j                  | _        | j        | j        t          j        k    rd| _        t          | j        d uo
| j        dk    | j        d uo
| j        dk    | j	        d uo
| j	        dk    | j
        d i fvg          r| xj        dz  c_        | j        d i fvr| xj        dz  c_        d S d S | j        t          j        k    r	d| _        d S | j        t          j        k    r	d| _        d S | j        t          j        k    r	d| _        d S | j        t          j        k    rd| _        d S d S d S )	NzJob has not started yet.r   z\ It may be waiting for resources (CPUs, GPUs, memory, custom resources) to become available.z< It may be waiting for the runtime environment to be set up.zJob is currently running.zJob was intentionally stopped.zJob finished successfully.zJob failed.)
isinstancerD   r5   r   rF   r    anyrL   rM   rN   rO   rK   r!   r"   r#   r$   r*   s    r,   __post_init__zJobInfo.__post_init__   s   dk3'' 	1#DK00DK<{i///90< 9 4q80< 9 4q8.d: 7 2Q61$C
 
  LLVLL #D":55LLVLLLL 65 	 111:	 111?	 333;	 000,;  8 10r.   r%   c                 "   t          |           }t          |d                   |d<   |                    d          r|d         j        nd|d<   d|v r(|d         t	          j        |d                   |d<   |d= t	          j        |           |S )a%  Convert this object to a JSON-serializable dictionary.

        Note that the runtime_env field is converted to a JSON-serialized string
        and the field is renamed to runtime_env_json.

        Returns:
            A JSON-serializable dictionary representing the JobInfo object.
        rD   rG   NrK   runtime_env_json)r   r5   getr)   jsondumps)r+   	json_dicts     r,   to_jsonzJobInfo.to_json   s     4LL	 ")H"566	(-6]]<-H-HRIl#))d 	,
 I%%'304
9];S0T0T	,--( 	
9r.   r\   c                     t          |d                   |d<   |                    d          rt          |d                   nd|d<   d|v r(|d         t          j        |d                   |d<   |d=  | di |S )a  Initialize this object from a JSON dictionary.

        Note that the runtime_env_json field is converted to a dictionary and
        the field is renamed to runtime_env.

        Args:
            json_dict: A JSON dictionary to use to initialize the JobInfo object.
        rD   rG   NrX   rK   r7   )r   rY   r9   rZ   loads)clsr\   s     r,   	from_jsonzJobInfo.from_json   s     (	((;<<	( }}\**L<0111 	, **+,8+/:i@R6S+T+T	-(,-sYr.   )r1   r2   r3   r4   r   __annotations__r5   rF   r
   rG   r9   rH   intrI   rJ   r	   rK   r   rL   r   floatrM   rN   rO   rP   rQ   rR   rV   r]   classmethodra   r7   r.   r,   rC   rC   Z   s          OOO!GXc]!!!)-J&--- $J$$$"Hhsm""")-HhtCH~&---,0K$sCx.)0007;%U
"34;;;7;%U
"34;;;'+x}+++7;(4U
#34;;;/3x}333 %)NHSM((( '+hsm*** -  -  -Dc3h    :  $sCx.  T       [     r.   rC   c                   |   e Zd ZdZe dZe dZ	 ddedee	         fdZ
	 	 dd
e	dededee         def
dZd
e	deddfdZdd
e	dedee         fdZdd
e	defdZ	 	 	 	 	 dd
e	dedee	         dee         dee         deee	ef                  dee         fdZdd
e	dedee         fdZddedee	ef         fdZdS )JobInfoStorageClientzG
    Interface to put and get job data from the Internal KV store.
    	job_info_r   N
gcs_clientexport_event_log_dir_rootc                     || _         d| _        	 t          t          j        j                  r#|#t          t          j        |          | _        dS dS dS # t          $ r t                              d           Y dS w xY w)av  
        Initialize the JobInfoStorageClient which manages data in the internal KV store.
        Export Submission Job events are written when the KV store is updated if
        the feature flag is on and a export_event_log_dir_root is passed.
        export_event_log_dir_root doesn't need to be passed if the caller
        is not modifying data in the KV store.
        NzMUnable to initialize export event logger so no export events will be written.)_gcs_client#_export_submission_job_event_loggerr   r   
SourceTypeEXPORT_SUBMISSION_JOBr   r   SUBMISSION_JOB	Exceptionlogger	exception)r+   ri   rj   s      r,   __init__zJobInfoStorageClient.__init__   s     &CG0	()?)UVV-9;R /-< <888	 99  	 	 	*     	s   ?A $A=<A=T   job_idjob_info	overwritetimeoutr%   c                   K   | j                             | j                            |                                          t          j        |                                                                          |t          j	        |           d{V }|dk    s|rB	 | 
                    ||           n*# t          $ r t                              d           Y nw xY w|dk    S )aB  Put job info to the internal kv store.

        Args:
            job_id: The job id.
            job_info: The job info.
            overwrite: Whether to overwrite the existing job info.
            timeout: The timeout in seconds for the GCS operation.

        Returns:
            True if a new key is added.
        rv   	namespacery   N   z0Error while writing job submission export event.)rl   async_internal_kv_putJOB_DATA_KEYformatencoderZ   r[   r]   r   KV_NAMESPACE_JOB"_write_submission_job_export_eventrq   rr   rs   )r+   rv   rw   rx   ry   	added_nums         r,   put_infozJobInfoStorageClient.put_info  s
     $ *@@$$F$33::<<Jx''))**1133#4 A 
 
 
 
 
 
 
 
	 >>Y>U77IIII U U U  !STTTTTUA~s   B3 3$CCc                    | j         sdS t          j        j        j                            |j        j                  }|)t          	                    |j        j         d           dS |j
        }t          |||j        |j        |j        |j        |j        |j        t#          j        |j                  |j        |j        |j                  }| j                             |           dS )z
        Write Submission Job export event if _export_submission_job_event_logger
        exists. The logger will exist if the export API feature flag is enabled
        and a log directory was passed to JobInfoStorageClient.
        Nzb is not a valid ExportSubmissionJobEventData.JobStatus enum value. This event will not be written.)submission_job_idrD   rE   rF   rJ   rG   rH   rI   rX   rP   rQ   rR   )rm   r   r   
DESCRIPTORvalues_by_namerY   rD   namerr   errornumberrE   rF   rJ   rG   rH   rI   rZ   r[   rK   rP   rQ   rR   
send_event)r+   rv   rw   status_value_descriptor
job_statussubmission_event_datas         r,   r   z7JobInfoStorageClient._write_submission_job_export_event%  s    7 	F )2=LPP$  	 
 #*LL?' ' ' '  
 F,3
 <$*$&**&!Z(<==&.&H#2%6!
 !
 !
 	0;;<QRRRRRr.   c                   K   | j                             | j                            |                                          t
          j        |           d {V }|d S t                              t          j
        |                    S )Nr{   r|   )rl   async_internal_kv_getr   r   r   r   r   rC   ra   rZ   r_   )r+   rv   ry   serialized_infos       r,   get_infozJobInfoStorageClient.get_infoM  s       $ 0 F F$$F$33::<<#4 !G !
 !
 
 
 
 
 
 

 "4$$TZ%@%@AAAr.   c                    K   | j                             | j                            |                                          dt
          j        |           d {V  d S )Nr{   Fr|   )rl   async_internal_kv_delr   r   r   r   r   )r+   rv   ry   s      r,   delete_infoz JobInfoStorageClient.delete_infoX  s}      44$$F$33::<<#4	 5 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r.   rD   rF   rR   rG   jobinfo_replace_kwargsc                   K   |                      ||           d{V }|t                      }|                    ||||           |<||j        k    r#|j                                        r
J d            t          |fi |}	nt          d	ddi|}	|                                r(t          t          j                    dz            |	_	        | 
                    ||	|           d{V  dS )
zAPuts or updates job status.  Sets end_time if status is terminal.)ry   N)rD   rF   rR   rG   Fz5Attempted to change job status from a terminal state.rE   zEntrypoint not found.i  r7   )r   dictupdaterD   r0   r   rC   rc   timerI   r   )
r+   rv   rD   rF   rR   rG   r   ry   old_infonew_infos
             r,   
put_statuszJobInfoStorageClient.put_status`  s;      vw????????!)%)VV"%%-!	 	& 	
 	
 	
 ((X_-H-H-J-J(UUUUuxBB+ABBHH  26L H  	8 #DIKK$$6 7 7HmmFHgm>>>>>>>>>>>r.   c                 T   K   |                      ||           d {V }|d S |j        S r'   )r   rD   )r+   rv   ry   rw   s       r,   
get_statuszJobInfoStorageClient.get_status  s>      vw777777774?"r.   c                    K    j                              j                                        t          j                   d {V }d |D             }g }|D ]U}|                     j                  s
J d            |                    |t           j                  d                     Vdt          f fdt          t          j        fd|D               d {V           S )Nr|   c                 6    g | ]}|                                 S r7   )decode).0rv   s     r,   
<listcomp>z5JobInfoStorageClient.get_all_jobs.<locals>.<listcomp>  s-     !
 !
 !
 &FMMOO!
 !
 !
r.   z8Unexpected format for internal_kv key for Job submissionrv   c                 H   K                        |            d {V }| |fS r'   )r   )rv   rw   r+   ry   s     r,   get_job_infoz7JobInfoStorageClient.get_all_jobs.<locals>.get_job_info  s7      !]]67;;;;;;;;H8##r.   c                 &    g | ]} |          S r7   r7   )r   rv   r   s     r,   r   z5JobInfoStorageClient.get_all_jobs.<locals>.<listcomp>  s#    *V*V*VF<<+?+?*V*V*Vr.   )rl   async_internal_kv_keysJOB_DATA_KEY_PREFIXr   r   r   
startswithappendlenr5   r   asynciogather)r+   ry   raw_job_ids_with_prefixesjob_ids_with_prefixesjob_idsjob_id_with_prefixr   s   ``    @r,   get_all_jobsz!JobInfoStorageClient.get_all_jobs  sh     *.*:*Q*Q$++--#4 +R +
 +
 %
 %
 %
 %
 %
 %
!
!
 !
*C!
 !
 !
 "7 	P 	P%00(  J JIJ J  NN-c$2J.K.K.M.MNOOOO	$s 	$ 	$ 	$ 	$ 	$ 	$ 	$ '.*V*V*V*Vg*V*V*VWWWWWWWXXXr.   r'   )Tru   )ru   )NNNNru   )r1   r2   r3   r4   r   r   r   r   r
   r5   rt   rC   r6   rc   r   r   r   r   r   r9   r	   r   r   r   r   r7   r.   r,   rg   rg      sW         ;EEE)555L
 48  $,C=   B !#   	
 # 
   B&S&S%,&S	&S &S &S &SP	B 	BS 	B3 	B@Q 	B 	B 	B 	B
 
 
c 
 
 
 
 "&*.-1;?!#"? "?"? "? #	"?
 #3-"? \*"? !)c3h 8"? #"? "? "? "?H# #s #S #(9BU # # # #Y Y# YtCL7I Y Y Y Y Y Yr.   rg   package_urir%   c                     t          |           j        }|dvrt          d|  d          t          |           \  }}|j        |fS )N>   .whl.zipzpackage_uri (z) does not end in .zip or .whl)r   suffix
ValueErrorr   r)   )r   r   protocolpackage_names       r,   uri_to_http_componentsr     sY    +%F%%%TTTTUUU '{33Hl><''r.   r   r   c                     |  d| S )Nz://r7   )r   r   s     r,   http_uri_components_to_urir     s    ))<)))r.   	json_datarequest_typec                      |di | S )Nr7   r7   )r   r   s     r,   validate_request_typer     s    <$$)$$$r.   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e
f                  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Zee         ed	<   dZee	eef                  ed
<   d ZdS )JobSubmitRequestrE   Nsubmission_idrv   rK   rJ   rL   rM   rN   rO   c                     t          | j        t                    s$t          dt	          | j                             | j        >t          | j        t                    s$t          dt	          | j                             | j        >t          | j        t                    s$t          dt	          | j                             | j        t          | j        t                    s$t          dt	          | j                             | j        	                                D ]6}t          |t                    st          dt	          |                     7| j
        t          | j
        t                    s$t          dt	          | j
                             | j
        	                                D ]6}t          |t                    st          dt	          |                     7| j
                                        D ]6}t          |t                    st          dt	          |                     7| j        Et          | j        t          t          f          s$t          d	t	          | j                             | j        Et          | j        t          t          f          s$t          d
t	          | j                             | j        >t          | j        t                    s$t          dt	          | j                             | j        t          | j        t                    s$t          dt	          | j                             | j        	                                D ]6}t          |t                    st          dt	          |                     7| j                                        D ]?}t          |t          t          f          st          dt	          |                     >d S d S )Nz!entrypoint must be a string, got z0submission_id must be a string if provided, got z)job_id must be a string if provided, got z runtime_env must be a dict, got z&runtime_env keys must be strings, got zmetadata must be a dict, got z#metadata keys must be strings, got z%metadata values must be strings, got z*entrypoint_num_cpus must be a number, got z*entrypoint_num_gpus must be a number, got z*entrypoint_memory must be an integer, got z)entrypoint_resources must be a dict, got z/entrypoint_resources keys must be strings, got z1entrypoint_resources values must be numbers, got )rT   rE   r5   	TypeErrortyper   rv   rK   r   keysrJ   valuesrL   rc   rd   rM   rN   rO   )r+   kvs      r,   rV   zJobSubmitRequest.__post_init__  s{   $/3// 	YWT_@U@UWWXXX)*T=OQT2U2U)2D.//2 2  
 ;":dk3+G+G"RtDK?P?PRR   'd.55 	OtD<L7M7MOO   )..00  A%a-- 'NT!WWNN  
 =$dmT22 
 UT]@S@S U UVVV++-- Y YA%a-- Y'(WdSTgg(W(WXXXY--//  A%a-- 'MDGGMM  
 #/
$sEl9
 9
/ 8D4558 8  
 #/
$sEl9
 9
/ 8D4558 8  
 !-j"C7
 7
- 6D2336 6  
 $0d7>> = 9::= =  
 27799  A%a-- '-#'77- -  
 299;;  A%a#u66 '-#'77- -   10 r.   )r1   r2   r3   r5   rb   r   r
   rv   rK   r	   r   rJ   rL   r   rc   rd   rM   rN   rO   rV   r7   r.   r,   r   r     s         OOO $(M8C=''' FHSM   ,0K$sCx.)000)-HhtCH~&--- 8<%U
"34;;; 8<%U
"34;;; (,x}+++ 8<(4U
#34;;;R R R R Rr.   r   c                   $    e Zd ZU eed<   eed<   dS )JobSubmitResponserv   r   Nr1   r2   r3   r5   rb   r7   r.   r,   r   r   (  s)          KKKr.   r   c                       e Zd ZU eed<   dS )JobStopResponsestoppedNr1   r2   r3   r6   rb   r7   r.   r,   r   r   /           MMMMMr.   r   c                       e Zd ZU eed<   dS )JobDeleteResponsedeletedNr   r7   r.   r,   r   r   4  r   r.   r   c                       e Zd ZU eed<   dS )JobLogsResponselogsNr   r7   r.   r,   r   r   :  s         
IIIIIr.   r   )8r   rZ   loggingr   dataclassesr   r   r   enumr   pathlibr   typingr   r	   r
   r   r   ray._privater   &ray._private.event.export_event_loggerr   r   r   "ray._private.runtime_env.packagingr   ray._rayletr   r   #ray.core.generated.export_event_pb2r   2ray.core.generated.export_submission_job_event_pb2r   ray.util.annotationsr   JOB_ID_METADATA_KEYJOB_NAME_METADATA_KEYJOB_ACTOR_NAME_TEMPLATEr   JOB_LOGS_PATH_TEMPLATE	getLoggerr1   rr   r5   r   r9   rC   rg   r   r   r   r   r   r   r   r   r7   r.   r,   <module>r      sR       2 2 2 2 2 2 2 2 2 2             4 4 4 4 4 4 4 4 4 4 4 4 4 4 & & & & & &         
 9 8 8 8 8 8 @ @ @ @ @ @ @ @ ; ; ; ; ; ;      + * * * * * * " :FFFS  "B 9 		8	$	$ X@ @ @ @ @T @ @ @: XB B B B B3 B B B, X
~  ~  ~  ~  ~  ~  ~   ~ BBY BY BY BY BY BY BY BYJ( (c3h ( ( ( (* *C *C * * * *%T#s(^ %9 %QT % % % % p p p p p p p pf                        
          r.   