+
    QV-jÓK  ã                   óð  € ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt  ! R R	]]4      t ! R
 R]]4      t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R R4      4       t] ! R  R!4      4       tR"R#R$R#R%R#/R& R' lltR## )(é    )Ú	dataclass)Údatetime)ÚEnum)ÚAny)Ú	constants)ÚVolume)Úparse_datetimec                   ó‚   € ] tR t^tRtRtRtRtRtRt	Rt
RtR	tR
tRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtR# )ÚJobHardwarezñ
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   ó    Új/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/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Ø%„Nr8   r   c                   ó2   € ] tR t^CtRtRtRtRtRtRt	Rt
RtR	# )
ÚJobStageaV  
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>   r?   r@   rA   r7   r   r8   r9   r;   r;   C   s'   † ñ	ð €IØ€HØ€EØ€GØ€JØ„Gr8   r;   c                   ó,   a € ] tR t^Xt o V 3R ltRtV tR# )Ú	JobStatusc                ój   <€ V ^8„  d   Qh/ S[ ;R&   S[R,          ;R&   S[S[,          R,          ;R&   # )é   ÚstageNÚmessageÚexpose_urls)r;   ÚstrÚlist)ÚformatÚ__classdict__s   "€r9   Ú__annotate__ÚJobStatus.__annotate__X   s6   ø‡ ‚ á�Oñ ñ �4�ZÑñ ñ ‘c•˜TÕ!Ñ!ò	 r8   r   N©r   r   r   r   Ú__annotate_func__r7   Ú__classdictcell__©rL   s   @r9   rC   rC   X   ó   ø‡ ‡ „ r8   rC   c                   ó,   a € ] tR t^_t o V 3R ltRtV tR# )ÚJobOwnerc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   # )rE   ÚidÚnameÚtype©rI   )rK   rL   s   "€r9   rM   ÚJobOwner.__annotate___   s'   ø‡ ‚ á�Gñ ñ �Iñ ñ �Iò	 r8   r   NrO   rR   s   @r9   rU   rU   _   rS   r8   rU   c                   óB   a € ] tR t^ft o RtV 3R lR ltV 3R ltRtV tR# )ÚJobDurationsaE  
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.
c                ó   <€ V ^8„  d   QhRR/# ©rE   ÚreturnNr   )rK   rL   s   "€r9   rM   ÚJobDurations.__annotate__{   s   ø€ ÷ Lñ L Dñ Lr8   c                óê   € VP                  R VP                  R4      4      V n        VP                  RVP                  R4      4      V n        VP                  RVP                  R4      4      V n        R# )ÚschedulingSecsÚscheduling_secsÚrunningSecsÚrunning_secsÚ	totalSecsÚ
total_secsN)Úgetrd   rf   rh   ©ÚselfÚkwargss   &,r9   Ú__init__ÚJobDurations.__init__{   sW   € Ø%Ÿz™zÐ*:¸F¿J¹JÐGXÓ<YÓZˆÔØ"ŸJ™J }°f·j±jÀÓ6PÓQˆÔØ Ÿ*™* [°&·*±*¸\Ó2JÓKˆŽr8   c                óh   <€ V ^8„  d   Qh/ S[ R,          ;R&   S[ R,          ;R&   S[ R,          ;R&   # )rE   Nrd   rf   rh   )Úint)rK   rL   s   "€r9   rM   ra   f   s8   ø‡ ‚ ñ" ˜4•ZÑñ# ñ$ ˜•*Ññ% ñ& �d•
Ñò' r8   )rf   rd   rh   N©	r   r   r   r   r   rm   rP   r7   rQ   rR   s   @r9   r]   r]   f   s   ø‡ € ñ÷&Lð L÷+ ƒ r8   r]   c                   ó4   a € ] tR t^�t o RtRtV 3R ltRtV tR# )ÚJobInitiatora2  
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.
Nc                óL   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ R,          ;R&   # )rE   rY   rW   NrX   rZ   )rK   rL   s   "€r9   rM   ÚJobInitiator.__annotate__�   s.   ø‡ ‚ ñ �Iñ ñ 	�Gñ ñ ��*Ñò r8   r   )	r   r   r   r   r   rX   rP   r7   rQ   rR   s   @r9   rs   rs   �   s   ø‡ € ñð €D÷ ƒ r8   rs   c                   óB   a € ] tR t^‘t o RtV 3R lR ltV 3R ltRtV tR# )ÚJobInfoa�  
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'
```
c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚJobInfo.__annotate__ë   s   ø€ ÷ !Gñ !G Dñ !Gr8   c                óª  € VR ,          V n         VP                  R4      ;'       g    VP                  R4      pV'       d   \        V4      MRV n        VP                  R4      ;'       g    VP                  R4      pV'       d   \        V4      MRV n        VP                  R4      ;'       g    VP                  R4      pV'       d   \        V4      MRV n        VP                  R4      ;'       g    VP                  R	4      V n        VP                  R
4      ;'       g    VP                  R4      V n        VP                  R/ 4      p\        VR ,          VR,          VR,          R7      V n	        VP                  R4      V n
        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      pV'       d   V Uu. uF  p\!        R"/ VB NK  	  upMRV n        VP                  R/ 4      p\%        VR,          VP                  R4      VP                  R4      R7      V n        VP                  R4      p	V	'       d   \)        R"/ V	B MRV n        VP                  R4      p
V
'       d,   \-        V
R,          V
R ,          V
P                  R4      R7      MRV n        VP                  R\0        P2                  4      V n        V P4                   R V P                  P6                   R!V P                    2V n        R# u upi )#rW   Ú	createdAtÚ
created_atNÚ	startedAtÚ
started_atÚ
finishedAtÚfinished_atÚdockerImageÚdocker_imageÚspaceIdÚspace_idÚownerrX   rY   ©rW   rX   rY   ÚcommandÚ	argumentsÚenvironmentÚsecretsÚflavorÚlabelsÚvolumesÚstatusrF   rG   Ú
exposeUrls)rF   rG   rH   Ú	durationsÚ	initiator)rY   rW   rX   Úendpointz/jobs/Ú/r   )rW   ri   r	   r|   r~   r€   r‚   r„   rU   r…   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   r�   rC   rŽ   r]   r�   rs   r‘   r   ÚENDPOINTr’   rX   Úurl)rk   rl   r|   r~   r€   r…   r�   ÚvrŽ   r�   r‘   s   &,         r9   rm   ÚJobInfo.__init__ë   sw  € Ø˜•,ˆŒØ—Z‘Z Ó,×HÐH°·
±
¸<Ó0Hˆ
ß8Bœ.¨Ô4ÈˆŒØ—Z‘Z Ó,×HÐH°·
±
¸<Ó0Hˆ
ß8Bœ.¨Ô4ÈˆŒØ—j‘j Ó.×KÐK°&·*±*¸]Ó2Kˆß:Eœ>¨+Ô6È4ˆÔØ"ŸJ™J }Ó5×SÐS¸¿¹ÀNÓ9SˆÔØŸ
™
 9Ó-×GÐG°·±¸JÓ1GˆŒØ—
‘
˜7 BÓ'ˆÜ  t¥°5¸µ=ÀuÈVÅ}ÔUˆŒ
Ø—z‘z )Ó,ˆŒØŸ™ KÓ0ˆŒØ!Ÿ:™: mÓ4ˆÔØ—z‘z )Ó,ˆŒØ—j‘j Ó*ˆŒØ—j‘j Ó*ˆŒØ—*‘*˜YÓ'ˆß9@©WÓ5©W¨œ™ œ©WÒ5ÀdˆŒØ—‘˜H bÓ)ˆÜØ˜•/¨6¯:©:°iÓ+@ÈfÏjÉjÐYeÓNfô
ˆŒð —J‘J˜{Ó+ˆ	ß6?œÑ2¨	Ò2ÀTˆŒØ—J‘J˜{Ó+ˆ	çdmŒL˜i¨Õ/°I¸dµOÈ)Ï-É-ÐX^ÓJ_Õ`Ðswð 	Œð
 Ÿ
™
 :¬y×/AÑ/AÓBˆŒØ—m‘m�_ F¨4¯:©:¯?©?Ð*;¸1¸T¿W¹W¸IÐFˆŽùò 6s   ÈMc                ó4  <€ V ^8„  d   Qh/ S[ ;R&   S[R,          ;R&   S[R,          ;R&   S[R,          ;R&   S[ R,          ;R&   S[ R,          ;R&   S[S[ ,          R,          ;R&   S[S[ ,          R,          ;R	&   S[S[ S[3,          R,          ;R
&   S[S[ S[3,          R,          ;R&   S[R,          ;R&   S[S[ S[ 3,          R,          ;R&   S[S[,          R,          ;R&   S[;R&   S[R,          ;R&   S[	;R&   S[
R,          ;R&   S[ ;R&   S[ ;R&   # )rE   rW   Nr|   r~   r€   r‚   r„   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r…   r‘   r’   r•   )rI   r   rJ   Údictr   r   r   rC   r]   rU   rs   )rK   rL   s   "€r9   rM   ry   ‘   sƒ  ø‡ ‚ ñH 	�GñI ñJ ˜4•ÑñK ñL ˜4•ÑñM ñN ˜D•Ñ ñO ñP ˜•*ÑñQ ñR �D�jÑñS ñT ‘#�Y˜ÕÑñU ñV ‘C�y˜4ÕÑñW ñX ‘c™3�h• $Õ&Ñ&ñY ñZ ‘#‘s�(�^˜dÕ"Ñ"ñ[ ñ\ ˜$ÕÑñ] ñ^ ‘‘c��N˜TÕ!Ñ!ñ_ ñ` ‘&�\˜DÕ Ñ ña ñb Ññc ñd ˜dÕ"Ñ"ñe ñf �Oñg ñh ˜dÕ"Ñ"ñi ñn �Mño ñp 
�Hòq r8   )rˆ   r‡   r|   r‚   r�   r’   r‰   r€   r‹   rW   r‘   rŒ   r…   rŠ   r„   r~   rŽ   r•   r�   Nrq   rR   s   @r9   rw   rw   ‘   s    ø‡ € ñ@÷p!Gð !G÷u ƒ r8   rw   c                   ó>   a € ] tR tRt o V 3R lR ltV 3R ltRtV tR# )ÚJobSpeci  c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚJobSpec.__annotate__  s   ø€ ÷ Kñ K Dñ Kr8   c                óÜ  € VP                  R 4      ;'       g    VP                  R4      V n        VP                  R4      ;'       g    VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R	4      V n        VP                  R
4      V n	        VP                  R4      V n
        VP                  R4      V n        VP                  R4      pV'       d#   V Uu. uF  p\        R/ VB NK  	  upV n        R# RV n        R# u upi )r�   r‚   rƒ   r„   r‡   rˆ   r‰   rŠ   r‹   ÚtimeoutÚtagsÚarchrŒ   r�   Nr   )ri   r‚   r„   r‡   rˆ   r‰   rŠ   r‹   rŸ   r    r¡   rŒ   r   r�   )rk   rl   r�   r–   s   &,  r9   rm   ÚJobSpec.__init__  s  € Ø"ŸJ™J }Ó5×SÐS¸¿¹ÀNÓ9SˆÔØŸ
™
 9Ó-×GÐG°·±¸JÓ1GˆŒØ—z‘z )Ó,ˆŒØŸ™ KÓ0ˆŒØ!Ÿ:™: mÓ4ˆÔØ—z‘z )Ó,ˆŒØ—j‘j Ó*ˆŒØ—z‘z )Ó,ˆŒØ—J‘J˜vÓ&ˆŒ	Ø—J‘J˜vÓ&ˆŒ	Ø—j‘j Ó*ˆŒØ—*‘*˜YÓ'ˆß9@©WÓ5©W¨œ™ œ©WÑ5ˆŽÀdˆŽùÒ5s   ÅE)c                óÔ  <€ V ^8„  d   Qh/ S[ R,          ;R&   S[ R,          ;R&   S[S[ ,          R,          ;R&   S[S[ ,          R,          ;R&   S[S[ S[3,          R,          ;R&   S[S[ S[3,          R,          ;R&   S[R,          ;R&   S[R,          ;R	&   S[S[ ,          R,          ;R
&   S[ R,          ;R&   S[S[ S[ 3,          R,          ;R&   S[S[,          R,          ;R&   # )rE   Nr‚   r„   r‡   rˆ   r‰   rŠ   r‹   rŸ   r    r¡   rŒ   r�   )rI   rJ   r™   r   r   rp   r   )rK   rL   s   "€r9   rM   r�     sÿ   ø‡ ‚ á˜•*Ññ ñ �D�jÑñ ñ ‘#�Y˜ÕÑñ	 ñ
 ‘C�y˜4ÕÑñ ñ ‘c™3�h• $Õ&Ñ&ñ ñ ‘#‘s�(�^˜dÕ"Ñ"ñ ñ ˜$ÕÑñ ñ �4�ZÑñ ñ ‰s�)�dÕ
Ññ ñ ��*Ññ ñ ‘‘c��N˜TÕ!Ñ!ñ ñ ‘&�\˜DÕ Ñ ò r8   )r¡   rˆ   r‡   r‚   r‰   r‹   rŒ   rŠ   r„   r    rŸ   r�   N©r   r   r   r   rm   rP   r7   rQ   rR   s   @r9   r›   r›     s   ø‡ € ÷Kð K÷ ƒ r8   r›   c                   ó>   a € ] tR tRt o V 3R lR ltV 3R ltRtV tR# )ÚLastJobInfoi.  c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚLastJobInfo.__annotate__3  s   ø€ ÷ /ñ / Dñ /r8   c                óP   € VR ,          V n         \        VR,          4      V n        R# )rW   ÚatN)rW   r	   rª   rj   s   &,r9   rm   ÚLastJobInfo.__init__3  s   € Ø˜•,ˆŒÜ  ¨¥Ó.ˆŽr8   c                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )rE   rW   rª   )rI   r   )rK   rL   s   "€r9   rM   r¨   .  s   ø‡ ‚ á�Gñ ñ 	�Lò r8   )rª   rW   Nr¤   rR   s   @r9   r¦   r¦   .  s   ø‡ € ÷
/ð /÷ ƒ r8   r¦   c                   ó>   a € ] tR tRt o V 3R lR ltV 3R ltRtV tR# )ÚScheduledJobStatusi8  c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚScheduledJobStatus.__annotate__=  s   ø€ ÷ añ a Dñ ar8   c                ó6  € VP                  R 4      ;'       g    VP                  R4      pV'       d   \        R/ VB MRV n        VP                  R4      ;'       g    VP                  R4      pV'       d   \        \	        V4      4      V n        R# RV n        R# )ÚlastJobÚlast_jobNÚnextJobRunAtÚnext_job_run_atr   )ri   r¦   r³   r	   rI   rµ   )rk   rl   r³   rµ   s   &,  r9   rm   ÚScheduledJobStatus.__init__=  sp   € Ø—:‘:˜iÓ(×BÐB¨F¯J©J°zÓ,Bˆß3;œÑ/ hÒ/ÀˆŒØ Ÿ*™* ^Ó4×UÐU¸¿
¹
ÐCTÓ8UˆßGVœ~¬c°/Ó.BÓCˆÖÐ\`ˆÖr8   c                óN   <€ V ^8„  d   Qh/ S[ R,          ;R&   S[R,          ;R&   # )rE   Nr³   rµ   )r¦   r   )rK   rL   s   "€r9   rM   r°   8  s&   ø‡ ‚ á˜DÕ Ñ ñ ñ  •_Ñ$ò r8   ©r³   rµ   Nr¤   rR   s   @r9   r®   r®   8  s   ø‡ € ÷
að a÷ ƒ r8   r®   c                   óB   a € ] tR tRt o RtV 3R lR ltV 3R ltRtV tR# )Ú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)
```
c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚScheduledJobInfo.__annotate__w  s   ø€ ÷ Vñ V Dñ Vr8   c                óü  € VR ,          V n         VP                  R4      ;'       g    VP                  R4      pV'       d   \        V4      MRV n        \	        R/ VP                  R4      ;'       g    VP                  R/ 4      B V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R	/ 4      p\        VP                  R
4      ;'       g    VP                  R4      VP                  R4      ;'       g    VP                  R4      R7      V n
        VP                  R/ 4      p\        VR ,          VR,          VR,          R7      V n        R# )rW   r{   r|   NÚjob_specÚjobSpecÚscheduleÚsuspendÚconcurrencyrŽ   r³   r²   rµ   r´   r¸   r…   rX   rY   r†   r   )rW   ri   r	   r|   r›   r¾   rÀ   rÁ   rÂ   r®   rŽ   rU   r…   )rk   rl   r|   rŽ   r…   s   &,   r9   rm   ÚScheduledJobInfo.__init__w  s  € Ø˜•,ˆŒØ—Z‘Z Ó,×HÐH°·
±
¸<Ó0Hˆ
ß8Bœ.¨Ô4ÈˆŒÜÑX 6§:¡:¨jÓ#9×#VÐ#V¸V¿Z¹ZÈ	ÐSUÓ=VÑXˆŒØŸ
™
 :Ó.ˆŒØ—z‘z )Ó,ˆŒØ!Ÿ:™: mÓ4ˆÔØ—‘˜H bÓ)ˆÜ(Ø—Z‘Z 
Ó+×DÐD¨v¯z©z¸)Ó/DØ"ŸJ™JÐ'8Ó9×WÐW¸V¿Z¹ZÈÓ=Wô
ˆŒð —
‘
˜7 BÓ'ˆÜ  t¥°5¸µ=ÀuÈVÅ}ÔUˆŽ
r8   c                ó²   <€ V ^8„  d   Qh/ S[ ;R&   S[R,          ;R&   S[;R&   S[ R,          ;R&   S[R,          ;R&   S[R,          ;R&   S[;R&   S[;R	&   # )
rE   rW   Nr|   r¾   rÀ   rÁ   rÂ   rŽ   r…   )rI   r   r›   Úboolr®   rU   )rK   rL   s   "€r9   rM   r¼   D  s‹   ø‡ ‚ ñT 	�GñU ñV ˜4•ÑñW ñX ÑñY ñZ �D�jÑñ[ ñ\ �D�[Ññ] ñ^ ˜•Ññ_ ñ` Ñña ñb �Oòc r8   )rÂ   r|   rW   r¾   r…   rÀ   rŽ   rÁ   Nrq   rR   s   @r9   rº   rº   D  s   ø‡ € ñ&÷bVð V÷g ƒ r8   rº   c                   óB   a € ] tR tRt o RtV 3R lR ltV 3R ltRtV tR# )Ú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"`.
c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚJobAccelerator.__annotate__   s   ø€ ÷ 3ñ 3 Dñ 3r8   c                ó’   € VR ,          V n         VR,          V n        VR,          V n        VR,          V n        VR,          V n        R# )rY   ÚmodelÚquantityÚvramÚmanufacturerN)rY   rË   rÌ   rÍ   rÎ   rj   s   &,r9   rm   ÚJobAccelerator.__init__   s<   € Ø˜6•NˆŒ	Ø˜G•_ˆŒ
Ø˜zÕ*ˆŒØ˜6•NˆŒ	Ø" >Õ2ˆÖr8   c                óV   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   # )rE   rY   rË   rÌ   rÍ   rÎ   rZ   )rK   rL   s   "€r9   rM   rÉ   ˆ  sB   ø‡ ‚ ñ$ �Iñ% ñ& �Jñ' ñ( �Mñ) ñ* �Iñ+ ñ, Ñò- r8   )rÎ   rË   rÌ   rY   rÍ   Nrq   rR   s   @r9   rÇ   rÇ   ˆ  s   ø‡ € ñ÷,3ð 3÷1 ƒ r8   rÇ   c                   óB   a € ] tR tRt o RtV 3R lR ltV 3R ltRtV tR# )Ú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'
```
c                ó   <€ V ^8„  d   QhRR/# r_   r   )rK   rL   s   "€r9   rM   ÚJobHardwareInfo.__annotate__×  s   ø€ ÷ 
.ñ 
. Dñ 
.r8   c                óN  € VR ,          V n         VR,          V n        VR,          V n        VR,          V n        VP	                  RR4      V n        VP	                  R4      pV'       d   \        R/ VB MRV n        VR,          V n        VR	,          V n	        VR
,          V n
        R# )rX   Ú
prettyNameÚcpuÚramÚephemeralStoragezN/AÚacceleratorNÚunitCostMicroUSDÚunitCostUSDÚ	unitLabelr   )rX   Úpretty_namer×   rØ   ri   Úephemeral_storagerÇ   rÚ   Úunit_cost_micro_usdÚunit_cost_usdÚ
unit_label)rk   rl   rÚ   s   &, r9   rm   ÚJobHardwareInfo.__init__×  s�   € Ø˜6•NˆŒ	Ø! ,Õ/ˆÔØ˜%•=ˆŒØ˜%•=ˆŒØ!'§¡Ð,>ÀÓ!FˆÔØ—j‘j Ó/ˆß<Gœ>Ñ8¨KÒ8ÈTˆÔØ#)Ð*<Õ#=ˆÔ Ø# MÕ2ˆÔØ  Õ-ˆŽr8   c                ó”   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[R,          ;R&   S[;R&   S[;R	&   S[ ;R
&   # )rE   rX   rÞ   r×   rØ   rß   NrÚ   rà   rá   râ   )rI   rÇ   rp   Úfloat)rK   rL   s   "€r9   rM   rÔ   ¨  s�   ø‡ ‚ ñJ �IñK ñL ÑñM ñN 
�HñO ñP 
�HñQ ñR ÑñS ñT   $Õ&Ñ&ñU ñV ÑñW ñX ÑñY ñZ �Oò[ r8   )	rÚ   r×   rß   rX   rÞ   rØ   rà   rá   râ   Nrq   rR   s   @r9   rÒ   rÒ   ¨  s   ø‡ € ñ!÷Z
.ð 
.÷_ ƒ r8   rÒ   rŒ   Nr�   Úexposec                óþ  € V ^8„  d   QhR\         R\        \         ,          R\        \         \        3,          R,          R\        \         \        3,          R,          R\        \         ,          R,          R\
        \        ,          \         ,          R,          R\        \         \         3,          R,          R	\        \        ,          R,          R
\        \
        ,          R,          R\        \         \        3,          /
# )rE   Úimager‡   ÚenvNrŠ   r‹   rŸ   rŒ   r�   ræ   r`   )rI   rJ   r™   r   r   rp   rå   r   )rK   s   "r9   rM   rM   ä  sË   € ÷ 2ñ 2äð2ô ”#�Yð2ô 
Œc”3ˆh�˜$Õ	ð	2ô
 ”#”s�(�^˜dÕ"ð2ô œ#Õ Õ$ð2ô ”5�[œ3Õ Õ%ð2ô ””c��N˜TÕ!ð2ô ”&�\˜DÕ ð2ô ”�I˜Õð2ô 
Œ#Œsˆ(…^ñ2r8   c        	   	      ó`  € R TR. RT;'       g    / RT;'       g    \         P                  /p	V'       d   W9R&   V'       dl   R^R^<RRR	R/p
\        V\        4      '       d>   VR,          V
9   d0   \	        \        VR
R 4      W¥R,          ,          ,          4      V	R&   M\	        V4      V	R&   V'       d   WiR&   V'       d#   V Uu. uF  q»P                  4       NK  	  upV	R&   V'       d   RV/V	R&   R F.  pV P                  V4      '       g   K  V \        V4      R
 V	R&    V	# 	  W	R&   V	# u upi )r‡   rˆ   r‰   r‹   rŠ   ÚsÚmÚhi  ÚdNÚtimeoutSecondsrŒ   r�   Úportsræ   rƒ   r�   i€Q éÿÿÿÿ)zhttps://huggingface.co/spaces/zhttps://hf.co/spaces/zhuggingface.co/spaces/zhf.co/spaces/)	r   r   Ú
isinstancerI   rp   rå   Úto_dictÚ
startswithÚlen)rè   r‡   ré   rŠ   r‹   rŸ   rŒ   r�   ræ   r¾   Útime_units_factorsÚvolÚprefixs   $$$$$$$$$    r9   Ú_create_job_specrù   ä  s<  € ð 	�7Ø�RØ�s—y�y˜bØ�&×1Ð1œK×1Ñ1ð	 €H÷ Ø%�ÑçØ! 1 c¨2¨s°D¸#¸yÐIÐÜ�gœs×#Ò#¨°­Ð7IÔ(IÜ),¬U°7¸3¸B°<Ó-@ÐCUÐ^`ÕVaÕCbÕ-bÓ)cˆHÐ%Ò&ä),¨W«ˆHÐ%Ñ&çØ#�ÑçÙ8?Ó@¹°Ÿ{™{ž}¹Ñ@ˆ�ÑçØ% vÐ.ˆ�Ñóˆð ×Ñ˜F×#Ô#Ø"'¬¨F«¨Ð"6ˆH�YÑØð €Oñð #(�ÑØ€Oùò! As   ÃD+)Údataclassesr   r   Úenumr   Útypingr   Úhuggingface_hubr   Úhuggingface_hub._space_apir   Úhuggingface_hub.utils._datetimer	   rI   r   r;   rC   rU   r]   rs   rw   r›   r¦   r®   rº   rÇ   rÒ   rù   r   r8   r9   Ú<module>r      sŒ  ðõ "Ý Ý Ý å %Ý -Ý :ô(&�#�tô (&ôVˆs�Dô ð* ÷"ð "ó ð"ð ÷ð ó ðð ÷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.ðv2ð %)ð2ð $(ð2ð  $÷2ñ 2r8   