
    3jK                        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
  S SKJr   " S S	\\5      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5      5       r\ " S  S!5      5       rS"S"S"S#.S$\S%\\   S&\\\4   S"-  S'\\\4   S"-  S(\\-  S"-  S)\\-  \-  S"-  S*\\\4   S"-  S+\\
   S"-  S,\\   S"-  S-\\\4   4S. jjrg")/    )	dataclass)datetime)Enum)Any)	constants)Volume)parse_datetimec                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrg)JobHardware   z
Enumeration of hardware flavors available to run Jobs on the Hub.

Value can be compared to a string:
```py
assert JobHardware.CPU_BASIC == "cpu-basic"
```

Both enums are kept in sync with the Hub API by `utils/check_hardware_flavors.py`.
z	cpu-basiczcpu-upgradezcpu-performancezcpu-xlzt4-smallz	t4-mediuml4x1l4x4l40sx1l40sx4l40sx8z
a10g-smallz
a10g-largeza10g-largex2za10g-largex4z
a100-largea100x4a100x8h200h200x2h200x4h200x8zrtx-pro-6000zrtx-pro-6000x2zrtx-pro-6000x4zrtx-pro-6000x8 N) __name__
__module____qualname____firstlineno____doc__	CPU_BASICCPU_UPGRADECPU_PERFORMANCECPU_XLT4_SMALL	T4_MEDIUML4X1L4X4L40SX1L40SX4L40SX8
A10G_SMALL
A10G_LARGEA10G_LARGEX2A10G_LARGEX4
A100_LARGEA100X4A100X8H200H200X2H200X4H200X8RTX_PRO_6000RTX_PRO_6000X2RTX_PRO_6000X4RTX_PRO_6000X8__static_attributes__r       S/home/wildlama/miniconda3/lib/python3.13/site-packages/huggingface_hub/_jobs_api.pyr   r      s    	 IK'OF HIDDFFFJJ!L!LJFFDFFF!L%N%N%Nr9   r   c                   0    \ rS rSrSrSrSrSrSrSr	Sr
S	rg
)JobStageC   aV  
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`, `SCHEDULING`, `RUNNING`.
Taken from https://github.com/huggingface/moon-landing/blob/main/server/job_types/JobInfo.ts#L61 (private url).
	COMPLETEDCANCELEDERRORDELETED
SCHEDULINGRUNNINGr   N)r   r   r   r   r   r>   r?   r@   rA   rB   rC   r8   r   r9   r:   r<   r<   C   s'    	 IHEGJGr9   r<   c                   F    \ rS rSr% \\S'   \S-  \S'   \\   S-  \S'   Srg)	JobStatusX   stageNmessageexpose_urlsr   )	r   r   r   r   r<   __annotations__strlistr8   r   r9   r:   rE   rE   X   s     O4ZcT!!r9   rE   c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)JobOwner_   idnametyper   N)r   r   r   r   rK   rJ   r8   r   r9   r:   rN   rN   _   s    G
I
Ir9   rN   c                   T    \ rS rSr% Sr\S-  \S'   \S-  \S'   \S-  \S'   S	S jrSrg)
JobDurationsf   aE  
Timing breakdown for a Job, computed server-side.

Args:
    scheduling_secs (`int` or `None`):
        Seconds the job spent in the scheduling stage before starting to run.
        `None` if the job never reached the running stage.
    running_secs (`int` or `None`):
        Seconds the job has been or was running. Recomputed on each request
        while the job is in progress. `None` if the job never started running.
    total_secs (`int` or `None`):
        Total seconds elapsed since the job was created. Recomputed on each
        request while the job is in progress.
Nscheduling_secsrunning_secs
total_secsc                     UR                  SUR                  S5      5      U l        UR                  SUR                  S5      5      U l        UR                  SUR                  S5      5      U l        g )NschedulingSecsrV   runningSecsrW   	totalSecsrX   )getrV   rW   rX   selfkwargss     r:   __init__JobDurations.__init__{   sW    %zz*:FJJGX<YZ"JJ}fjj6PQ **[&**\2JKr9   )rW   rV   rX   returnN)	r   r   r   r   r   intrJ   ra   r8   r   r9   r:   rT   rT   f   s-     4Z*d
Lr9   rT   c                   B    \ rS rSr% Sr\\S'   \\S'   Sr\S-  \S'   Srg)JobInitiator   a2  
Contains information about what triggered a Job.

Args:
    type (`str`): Initiator kind, for example `"user"`, `"org"`, `"scheduled-job"`, or `"duplicated-job"`.
    id (`str`): Identifier of the initiator.
    name (`str` or `None`): Human-readable name when available, usually for user/org initiators.
rR   rP   NrQ   r   )	r   r   r   r   r   rK   rJ   rQ   r8   r   r9   r:   rg   rg      s!     IGD#*r9   rg   c                   f   \ rS rSr% Sr\\S'   \S-  \S'   \S-  \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'   \\S'   \\S'   SS jrSrg)JobInfo   a  
Contains information about a Job.

Args:
    id (`str`):
        Job ID.
    created_at (`datetime` or `None`):
        When the Job was created.
    started_at (`datetime` or `None`):
        When the Job started running. None while the Job is still scheduling.
    finished_at (`datetime` or `None`):
        When the Job finished. None while the Job is still scheduling or running.
    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. See [`JobHardware`] 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.
    durations (`JobDurations` or `None`):
        Timing breakdown of the Job. Present for all job states including SCHEDULING.
    owner: (`JobOwner` or `None`):
        Owner of the Job, e.g. `JobOwner(id="5e9ecfc04957053f60648a3e", name="lhoestq", type="user")`
    initiator (`JobInitiator` or `None`):
        What triggered the Job, e.g. `JobInitiator(type="scheduled-job", id="...")` for a cron-triggered run.
    expose_urls (`list[str]` or `None`):
        Public URLs through which the Job's exposed ports are reachable (one per port exposed via `expose=`),
        e.g. `["https://687fb701029421ae5549d998--8000.hf.jobs"]`. `None` when no port is exposed.
        Accessing a URL requires an HF token with read access to the Job's namespace.

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), started_at=datetime.datetime(2025, 7, 22, 16, 6, 31, 79000, tzinfo=datetime.timezone.utc), finished_at=None, 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), durations=JobDurations(scheduling_secs=6, running_secs=2, total_secs=8), owner=JobOwner(id='5e9ecfc04957053f60648a3e', name='lhoestq', type='user'), initiator=JobInitiator(type='user', id='5e9ecfc04957053f60648a3e', name='lhoestq'), 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'
```
rP   N
created_at
started_atfinished_atdocker_imagespace_idcommand	argumentsenvironmentsecretsflavorlabelsvolumesstatus	durationsowner	initiatorendpointurlc                 J   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      nU(       a  [        U5      O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      UR                  S5      S9U l        UR                  S5      n	U	(       a  [)        S"0 U	D6OS U l        UR                  S5      n
U
(       a   [-        U
S   U
S   U
R                  S5      S9OS U l        UR                  S[0        R2                  5      U l        U R4                   S U R                  R6                   S!U R                    3U l        g s  snf )#NrP   	createdAtrl   	startedAtrm   
finishedAtrn   dockerImagero   spaceIdrp   rz   rQ   rR   rP   rQ   rR   rq   rr   rs   rt   ru   rv   rw   rx   rG   rH   
exposeUrls)rG   rH   rI   ry   r{   )rR   rP   rQ   r|   z/jobs//r   )rP   r]   r	   rl   rm   rn   ro   rp   rN   rz   rq   rr   rs   rt   ru   rv   r   rw   rE   rx   rT   ry   rg   r{   r   ENDPOINTr|   rQ   r}   )r_   r`   rl   rm   rn   rz   rw   vrx   ry   r{   s              r:   ra   JobInfo.__init__   sh   ,ZZ,H

<0H
8B.4ZZ,H

<0H
8B.4jj.K&**]2K:E>+64"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)/6::i+@fjjYeNf
 JJ{+	6?2	2TJJ{+	dmLi/IdO)--X^J_`sw 	
 

:y/A/ABmm_F4::??*;1TWWIF 6s   8L )rr   rq   rl   ro   ry   r|   rs   rn   ru   rP   r{   rv   rz   rt   rp   rm   rx   r}   rw   rc   )r   r   r   r   r   rK   rJ   r   rL   dictr   r   r   rE   rT   rN   rg   ra   r8   r   r9   r:   rj   rj      s    @D 	G44D *Dj#YCy4c3h$&&#s(^d""$cNT!!&\D  d""Od"" M	H!Gr9   rj   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)JobSpeci  Nro   rp   rq   rr   rs   rt   ru   timeouttagsarchrv   rw   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   ro   r   rp   rq   rr   rs   rt   ru   r   r   r   rv   rw   r   )r]   ro   rp   rq   rr   rs   rt   ru   r   r   r   rv   r   rw   )r_   r`   rw   r   s       r:   ra   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%)r   rr   rq   ro   rs   ru   rv   rt   rp   r   r   rw   rc   )r   r   r   r   rK   rJ   rL   r   r   r   re   r   ra   r8   r   r9   r:   r   r     s    *Dj#YCy4c3h$&&#s(^d""$4Z
s)d

*cNT!!&\D  Kr9   r   c                   4    \ rS rSr% \\S'   \\S'   SS jrSrg)LastJobInfoi.  rP   atNc                 >    US   U l         [        US   5      U l        g )NrP   r   )rP   r	   r   r^   s     r:   ra   LastJobInfo.__init__3  s    , .r9   )r   rP   rc   )	r   r   r   r   rK   rJ   r   ra   r8   r   r9   r:   r   r   .  s    GL/r9   r   c                   @    \ rS rSr% \S-  \S'   \S-  \S'   SS jrSrg)ScheduledJobStatusi8  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]   r   r   r	   rK   r   )r_   r`   r   r   s       r:   ra   ScheduledJobStatus.__init__=  sj    ::i(BFJJz,B3;/h/ **^4U

CT8UGV~c/.BC\`r9   r   r   rc   )	r   r   r   r   r   rJ   r   ra   r8   r   r9   r:   r   r   8  s    D  _$ar9   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)ScheduledJobInfoiD  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)
```
rP   Nrl   job_specschedulesuspendconcurrencyrx   rz   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 )NrP   r   rl   r   jobSpecr   r   r   rx   r   r   r   r   r   rz   rQ   rR   r   r   )rP   r]   r	   rl   r   r   r   r   r   r   rx   rN   rz   )r_   r`   rl   rx   rz   s        r:   ra   ScheduledJobInfo.__init__w  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
r9   )r   rl   rP   r   rz   r   rx   r   rc   )r   r   r   r   r   rK   rJ   r   r   boolr   rN   ra   r8   r   r9   r:   r   r   D  sN    &P 	G4DjD[OVr9   r   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"`.
rR   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 )NrR   r   r   r   r   )rR   r   r   r   r   r^   s     r:   ra   JobAccelerator.__init__  s<    6N	G_
z*6N	">2r9   )r   r   r   rR   r   rc   )	r   r   r   r   r   rK   rJ   ra   r8   r   r9   r:   r   r     s(      IJM
I3r9   r   c                       \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \S-  \S	'   \\S
'   \	\S'   \\S'   SS jr
Srg)JobHardwareInfoi  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"`.
    ephemeral_storage (`str`):
        Ephemeral storage specification, e.g. `"20 GB"`, `"100 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]
JobHardwareInfo(name='cpu-basic', pretty_name='CPU Basic', cpu='2 vCPU', ram='16 GB', ephemeral_storage='20 GB', accelerator=None, unit_cost_micro_usd=167, unit_cost_usd=0.000167, unit_label='minute')
>>> hardware_list[0].name
'cpu-basic'
```
rQ   pretty_namecpuramephemeral_storageN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S5      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 )NrQ   
prettyNamer   r   ephemeralStoragezN/Ar   unitCostMicroUSDunitCostUSD	unitLabelr   )rQ   r   r   r   r]   r   r   r   r   r   r   )r_   r`   r   s      r:   ra   JobHardwareInfo.__init__  s    6N	!,/%=%=!',>!Fjj/<G>8K8T#)*<#= #M2 -r9   )	r   r   r   rQ   r   r   r   r   r   rc   )r   r   r   r   r   rK   rJ   r   re   floatra   r8   r   r9   r:   r   r     sF    !F I	H	H$&&O
.r9   r   N)rv   rw   exposeimagerq   envrt   ru   r   rv   rw   r   rd   c        	         "   U/ U=(       d    0 U=(       d    [         R                  S.n	U(       a  X9S'   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  XiS
'   U(       a#  U Vs/ s H  oR                  5       PM     snU	S'   U(       a  SU0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)rq   rr   rs   ru   rt      <   i  iQ )smhdtimeoutSecondsrv   rw   portsr   )zhttps://huggingface.co/spaces/zhttps://hf.co/spaces/zhuggingface.co/spaces/zhf.co/spaces/r   r   )	r   r   
isinstancerK   re   r   to_dict
startswithlen)r   rq   r   rt   ru   r   rv   rw   r   r   time_units_factorsvolprefixs                r:   _create_job_specr     s'    yb1K11	 H %#$2DyIgs##7I(I),U73B<-@CU^`VaCb-b)cH%&),WH%&#8?@{{}@%v. F##"'F"6HY O #(O! As   &D) dataclassesr   r   enumr   typingr   huggingface_hubr   huggingface_hub._space_apir   huggingface_hub.utils._datetimer	   rK   r   r<   rE   rN   rT   rg   rj   r   r   r   r   r   r   rL   r   re   r   r   r   r9   r:   <module>r      s3   "    % - :(&#t (&VsD * " " "    L L L4    zG zG zGz K K K< / / / a a a @V @V @VF 3 3 3> 8. 8. 8.F %)#'#22 #Y2 
c3h$		2
 #s(^d"2 #$2 5[3%2 cNT!2 &\D 2 I2 
#s(^2r9   