
    Y j8                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr   " S S	\\5      r\ " S
 S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       rSSS.S\S\\   S \\\4   S-  S!\\\4   S-  S"\
S-  S#\\-  \-  S-  S$\\\4   S-  S%\\   S-  S&\\\4   4S' jjrg)(    )	dataclass)datetime)Enum)Any)	constants)SpaceHardwareVolume)parse_datetimec                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
JobStage   aH  
Enumeration of possible stage of a Job on the Hub.

Value can be compared to a string:
```py
assert JobStage.COMPLETED == "COMPLETED"
```
Possible values are: `COMPLETED`, `CANCELED`, `ERROR`, `DELETED`, `RUNNING`.
Taken from https://github.com/huggingface/moon-landing/blob/main/server/job_types/JobInfo.ts#L61 (private url).
	COMPLETEDCANCELEDERRORDELETEDRUNNING N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   __static_attributes__r       j/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/huggingface_hub/_jobs_api.pyr   r      s"    	 IHEGGr   r   c                   0    \ rS rSr% \\S'   \S-  \S'   Srg)	JobStatus,   stageNmessager   )r   r   r   r   r   __annotations__strr   r   r   r   r   r   ,   s    O4Zr   r   c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)JobOwner2   idnametyper   N)r   r   r   r   r"   r!   r   r   r   r   r$   r$   2   s    G
I
Ir   r$   c                   &   \ rS rSr% Sr\\S'   \S-  \S'   \S-  \S'   \S-  \S'   \\   S-  \S'   \\   S-  \S	'   \	\\
4   S-  \S
'   \	\\
4   S-  \S'   \S-  \S'   \	\\4   S-  \S'   \\   S-  \S'   \\S'   \\S'   \\S'   \\S'   SS jrSrg)JobInfo9   aY	  
Contains information about a Job.

Args:
    id (`str`):
        Job ID.
    created_at (`datetime` or `None`):
        When the Job was created.
    docker_image (`str` or `None`):
        The Docker image from Docker Hub used for the Job.
        Can be None if space_id is present instead.
    space_id (`str` or `None`):
        The Docker image from Hugging Face Spaces used for the Job.
        Can be None if docker_image is present instead.
    command (`list[str]` or `None`):
        Command of the Job, e.g. `["python", "-c", "print('hello world')"]`
    arguments (`list[str]` or `None`):
        Arguments passed to the command
    environment (`dict[str]` or `None`):
        Environment variables of the Job as a dictionary.
    secrets (`dict[str]` or `None`):
        Secret environment variables of the Job (encrypted).
    flavor (`str` or `None`):
        Flavor for the hardware, as in Hugging Face Spaces. See [`SpaceHardware`] for possible values.
        E.g. `"cpu-basic"`.
    labels (`dict[str, str]` or `None`):
        Labels to attach to the job (key-value pairs).
    volumes (`list[Volume]` or `None`):
        Volumes mounted in the job container (buckets, models, datasets, spaces).
    status: (`JobStatus` or `None`):
        Status of the Job, e.g. `JobStatus(stage="RUNNING", message=None)`
        See [`JobStage`] for possible stage values.
    owner: (`JobOwner` or `None`):
        Owner of the Job, e.g. `JobOwner(id="5e9ecfc04957053f60648a3e", name="lhoestq", type="user")`

Example:

```python
>>> from huggingface_hub import run_job
>>> job = run_job(
...     image="python:3.12",
...     command=["python", "-c", "print('Hello from the cloud!')"]
... )
>>> job
JobInfo(id='687fb701029421ae5549d998', created_at=datetime.datetime(2025, 7, 22, 16, 6, 25, 79000, tzinfo=datetime.timezone.utc), docker_image='python:3.12', space_id=None, command=['python', '-c', "print('Hello from the cloud!')"], arguments=[], environment={}, secrets={}, flavor='cpu-basic', labels=None, status=JobStatus(stage='RUNNING', message=None), owner=JobOwner(id='5e9ecfc04957053f60648a3e', name='lhoestq', type='user'), endpoint='https://huggingface.co', url='https://huggingface.co/jobs/lhoestq/687fb701029421ae5549d998')
>>> job.id
'687fb701029421ae5549d998'
>>> job.url
'https://huggingface.co/jobs/lhoestq/687fb701029421ae5549d998'
>>> job.status.stage
'RUNNING'
```
r&   N
created_atdocker_imagespace_idcommand	argumentsenvironmentsecretsflavorlabelsvolumesstatusownerendpointurlc                 P   US   U l         UR                  S5      =(       d    UR                  S5      nU(       a  [        U5      OS U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S0 5      n[        US   US	   US
   S9U l        UR                  S5      U l        UR                  S5      U l	        UR                  S5      U l
        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      nU(       a  U Vs/ s H  n[        S0 UD6PM     snOS U l        UR                  S0 5      n[!        US   UR                  S5      S9U l        UR                  S[$        R&                  5      U l        U R(                   SU R                  R*                   SU R                    3U l        g s  snf )Nr&   	createdAtr,   dockerImager-   spaceIdr.   r7   r'   r(   r&   r'   r(   r/   r0   r1   r2   r3   r4   r5   r6   r   r    )r   r    r8   z/jobs//r   )r&   getr
   r,   r-   r.   r$   r7   r/   r0   r1   r2   r3   r4   r	   r5   r   r6   r   ENDPOINTr8   r'   r9   )selfkwargsr,   r7   r5   vr6   s          r   __init__JobInfo.__init__   s   ,ZZ,H

<0H
8B.4"JJ}5SN9S

9-GJ1G

7B't5=uV}U
zz),K0!::m4zz),jj*jj***Y'9@W5WW5dHb)fWovzz)?TU 

:y/A/ABmm_F4::??*;1TWWIF 6s   4H#)r0   r/   r,   r-   r8   r1   r3   r&   r4   r7   r2   r.   r6   r9   r5   returnN)r   r   r   r   r   r"   r!   r   listdictr   r   r	   r   r$   rE   r   r   r   r   r*   r*   9   s    4l 	G4*Dj#YCy4c3h$&&#s(^d""D  cNT!!&\D  O M	HGr   r*   c                      \ rS rSr% \S-  \S'   \S-  \S'   \\   S-  \S'   \\   S-  \S'   \\\4   S-  \S'   \\\4   S-  \S'   \	S-  \S	'   \
S-  \S
'   \\   S-  \S'   \S-  \S'   \\\4   S-  \S'   \\   S-  \S'   SS jrSrg)JobSpec   Nr-   r.   r/   r0   r1   r2   r3   timeouttagsarchr4   r5   c                    UR                  S5      =(       d    UR                  S5      U l        UR                  S5      =(       d    UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S	5      U l        UR                  S
5      U l        UR                  S5      U l	        UR                  S5      U l
        UR                  S5      U l        UR                  S5      nU(       a"  U Vs/ s H  n[        S0 UD6PM     snU l        g S U l        g s  snf )Nr<   r-   r=   r.   r/   r0   r1   r2   r3   rN   rO   rP   r4   r5   r   )r@   r-   r.   r/   r0   r1   r2   r3   rN   rO   rP   r4   r	   r5   )rB   rC   r5   rD   s       r   rE   JobSpec.__init__   s   "JJ}5SN9S

9-GJ1Gzz),K0!::m4zz),jj*zz),JJv&	JJv&	jj***Y'9@W5WW5d5s   ?E%)rP   r0   r/   r-   r1   r3   r4   r2   r.   rO   rN   r5   rG   )r   r   r   r   r"   r!   rI   rJ   r   r   intr	   rE   r   r   r   r   rL   rL      s    *Dj#YCy4c3h$&&#s(^d""D  4Z
s)d

*cNT!!&\D  Kr   rL   c                   4    \ rS rSr% \\S'   \\S'   SS jrSrg)LastJobInfo   r&   atNc                 >    US   U l         [        US   5      U l        g )Nr&   rW   )r&   r
   rW   rB   rC   s     r   rE   LastJobInfo.__init__   s    , .r   )rW   r&   rG   )	r   r   r   r   r"   r!   r   rE   r   r   r   r   rU   rU      s    GL/r   rU   c                   @    \ rS rSr% \S-  \S'   \S-  \S'   SS jrSrg)ScheduledJobStatus   Nlast_jobnext_job_run_atc                 *   UR                  S5      =(       d    UR                  S5      nU(       a  [        S0 UD6OS U l        UR                  S5      =(       d    UR                  S5      nU(       a  [        [	        U5      5      U l        g S U l        g )NlastJobr^   nextJobRunAtr_   r   )r@   rU   r^   r
   r"   r_   )rB   rC   r^   r_   s       r   rE   ScheduledJobStatus.__init__   sj    ::i(BFJJz,B3;/h/ **^4U

CT8UGV~c/.BC\`r   r^   r_   rG   )	r   r   r   r   rU   r!   r   rE   r   r   r   r   r\   r\      s    D  _$ar   r\   c                       \ rS rSr% Sr\\S'   \S-  \S'   \\S'   \S-  \S'   \	S-  \S'   \	S-  \S	'   \
\S
'   \\S'   SS jrSrg)ScheduledJobInfo   a9  
Contains information about a Job.

Args:
    id (`str`):
        Scheduled Job ID.
    created_at (`datetime` or `None`):
        When the scheduled Job was created.
    tags (`list[str]` or `None`):
        The tags of the scheduled Job.
    schedule (`str` or `None`):
        One of "@annually", "@yearly", "@monthly", "@weekly", "@daily", "@hourly", or a
        CRON schedule expression (e.g., '0 9 * * 1' for 9 AM every Monday).
    suspend (`bool` or `None`):
        Whether the scheduled job is suspended (paused).
    concurrency (`bool` or `None`):
        Whether multiple instances of this Job can run concurrently.
    status (`ScheduledJobStatus` or `None`):
        Status of the scheduled Job.
    owner: (`JobOwner` or `None`):
        Owner of the scheduled Job, e.g. `JobOwner(id="5e9ecfc04957053f60648a3e", name="lhoestq", type="user")`
    job_spec: (`JobSpec` or `None`):
        Specifications of the Job.

Example:

```python
>>> from huggingface_hub import run_job
>>> scheduled_job = create_scheduled_job(
...     image="python:3.12",
...     command=["python", "-c", "print('Hello from the cloud!')"],
...     schedule="@hourly",
... )
>>> scheduled_job.id
'687fb701029421ae5549d999'
>>> scheduled_job.status.next_job_run_at
datetime.datetime(2025, 7, 22, 17, 6, 25, 79000, tzinfo=datetime.timezone.utc)
```
r&   Nr,   job_specschedulesuspendconcurrencyr6   r7   c                    US   U l         UR                  S5      =(       d    UR                  S5      nU(       a  [        U5      OS U l        [	        S0 UR                  S5      =(       d    UR                  S0 5      D6U l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        UR                  S	0 5      n[        UR                  S
5      =(       d    UR                  S5      UR                  S5      =(       d    UR                  S5      S9U l
        UR                  S0 5      n[        US   US   US   S9U l        g )Nr&   r;   r,   rh   jobSpecri   rj   rk   r6   r^   ra   r_   rb   rd   r7   r'   r(   r>   r   )r&   r@   r
   r,   rL   rh   ri   rj   rk   r\   r6   r$   r7   )rB   rC   r,   r6   r7   s        r   rE   ScheduledJobInfo.__init__  s   ,ZZ,H

<0H
8B.4X6::j#9#VVZZ	SU=VX

:.zz),!::m4Hb)(ZZ
+Dvzz)/D"JJ'89WVZZ=W
 

7B't5=uV}U
r   )rk   r,   r&   rh   r7   ri   r6   rj   rG   )r   r   r   r   r   r"   r!   r   rL   boolr\   r$   rE   r   r   r   r   rf   rf      sN    &P 	G4DjD[OVr   rf   c                   V    \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   SS	 jrS
rg)JobAcceleratori  a  
Contains information about a Job accelerator (GPU).

Args:
    type (`str`):
        Type of accelerator, e.g. `"gpu"`.
    model (`str`):
        Model of accelerator, e.g. `"T4"`, `"A10G"`, `"A100"`, `"L4"`, `"L40S"`.
    quantity (`str`):
        Number of accelerators, e.g. `"1"`, `"2"`, `"4"`, `"8"`.
    vram (`str`):
        Total VRAM, e.g. `"16 GB"`, `"24 GB"`.
    manufacturer (`str`):
        Manufacturer of the accelerator, e.g. `"Nvidia"`.
r(   modelquantityvrammanufacturerNc                 h    US   U l         US   U l        US   U l        US   U l        US   U l        g )Nr(   rr   rs   rt   ru   )r(   rr   rs   rt   ru   rY   s     r   rE   JobAccelerator.__init__,  s<    6N	G_
z*6N	">2r   )ru   rr   rs   r(   rt   rG   )	r   r   r   r   r   r"   r!   rE   r   r   r   r   rq   rq     s(      IJM
I3r   rq   c                   z    \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \S-  \S'   \\S	'   \	\S
'   \\S'   SS jr
Srg)JobHardwarei4  a)  
Contains information about available Job hardware.

Args:
    name (`str`):
        Machine identifier, e.g. `"cpu-basic"`, `"a10g-large"`.
    pretty_name (`str`):
        Human-readable name, e.g. `"CPU Basic"`, `"Nvidia A10G - large"`.
    cpu (`str`):
        CPU specification, e.g. `"2 vCPU"`, `"12 vCPU"`.
    ram (`str`):
        RAM specification, e.g. `"16 GB"`, `"46 GB"`.
    accelerator (`JobAccelerator` or `None`):
        GPU/accelerator details if available.
    unit_cost_micro_usd (`int`):
        Cost in micro-dollars per unit, e.g. `167` (= $0.000167).
    unit_cost_usd (`float`):
        Cost in USD per unit, e.g. `0.000167`.
    unit_label (`str`):
        Cost unit period, e.g. `"minute"`.

Example:

```python
>>> from huggingface_hub import list_jobs_hardware
>>> hardware_list = list_jobs_hardware()
>>> hardware_list[0]
JobHardware(name='cpu-basic', pretty_name='CPU Basic', cpu='2 vCPU', ram='16 GB', accelerator=None, unit_cost_micro_usd=167, unit_cost_usd=0.000167, unit_label='minute')
>>> hardware_list[0].name
'cpu-basic'
```
r'   pretty_namecpuramNacceleratorunit_cost_micro_usdunit_cost_usd
unit_labelc                     US   U l         US   U l        US   U l        US   U l        UR	                  S5      nU(       a  [        S	0 UD6OS U l        US   U l        US   U l        US   U l	        g )
Nr'   
prettyNamer{   r|   r}   unitCostMicroUSDunitCostUSD	unitLabelr   )
r'   rz   r{   r|   r@   rq   r}   r~   r   r   )rB   rC   r}   s      r   rE   JobHardware.__init__`  sy    6N	!,/%=%=jj/<G>8K8T#)*<#= #M2 -r   )r}   r{   r'   rz   r|   r~   r   r   rG   )r   r   r   r   r   r"   r!   rq   rS   floatrE   r   r   r   r   ry   ry   4  s@    B I	H	H$&&O	.r   ry   N)r4   r5   imager/   envr2   r3   rN   r4   r5   rH   c                    U/ U=(       d    0 U=(       d    [         R                  S.nU(       a  X8S'   U(       aV  SSSSS.n	[        U[        5      (       a,  US   U	;   a#  [	        [        US S 5      XS      -  5      US	'   O[	        U5      US	'   U(       a  XhS
'   U(       a#  U V
s/ s H  oR                  5       PM     sn
US'   S H-  nU R                  U5      (       d  M  U [        U5      S  US'     U$    XS'   U$ s  sn
f )N)r/   r0   r1   r3   r2      <   i  iQ )smhdtimeoutSecondsr4   r5   )zhttps://huggingface.co/spaces/zhttps://hf.co/spaces/zhuggingface.co/spaces/zhf.co/spaces/r=   r<   )	r   	CPU_BASIC
isinstancer"   rS   r   to_dict
startswithlen)r   r/   r   r2   r3   rN   r4   r5   rh   time_units_factorsvolprefixs               r   _create_job_specr   l  s    yb3M33	 H %#$2DyIgs##7I(I),U73B<-@CU^`VaCb-b)cH%&),WH%&#8?@{{}@ F##"'F"6HY O #(O As   &C>)dataclassesr   r   enumr   typingr   huggingface_hubr   huggingface_hub._space_apir   r	   huggingface_hub.utils._datetimer
   r"   r   r   r$   r*   rL   rU   r\   rf   rq   ry   rI   rJ   rS   r   r   r   r   r   <module>r      s   "    % < :sD (   
    ^G ^G ^GB K K K< / / / a a a @V @V @VF 3 3 3> 4. 4. 4.~ %)#'.. #Y. 
c3h$		.
 #s(^d". D . 5[3%. cNT!. &\D . 
#s(^.r   