+
    QV-jÐ�  ã                   óÊ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
Ht ^ RIHtHtHt ^ RIt^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHt ^RIHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't' ^RI(H)t)H*t* ]PV                  ! ],4      t-R R lt.Rt/]]0]Pb                  ! RR7      3,          t2]]0R,          ]Pf                  ! RR7      3,          t4]]0R,          ]Pf                  ! R]!! ]4      R7      3,          t5]]6]0,          R,          ]Pf                  ! RRRR7      3,          t7]]0R,          ]Pf                  ! RR7      3,          t8]]9]Pf                  ! RRRR7      3,          t:]]0R,          ]Pf                  ! RR7      3,          t;]]6]<,          R,          ]Pf                  ! RRR7      3,          t=]]6]0,          R,          ]Pf                  ! RR R7      3,          t>]]0R,          ]Pf                  ! R!R"R#R7      3,          t?]]9R,          ]Pf                  ! R$R7      3,          t@]]9R,          ]Pf                  ! R%R7      3,          tA]]0]Pb                  ! R&R7      3,          tB]]0]Pb                  ! R'R7      3,          tC]]6]0,          R,          ]Pb                  ! R(R7      3,          tD]]6]0,          ]Pb                  ! R)R7      3,          tE]]0]Pb                  ! R*R7      3,          tF]]6]0,          R,          ]Pb                  ! R+R7      3,          tG]]0]Pb                  ! R,R7      3,          tH]'! R-R7      tI]IP•                  R.R/R0/. R†OR17      R‡R2 R3 ll4       tK]IP•                  R4. RˆOR57      R‰R6 R7 ll4       tLR8 R9 ltMR: R; ltNR< R= ltO]IP•                  R>R?.R57      RŠR@ RA ll4       tP]IP•                  RBRCRD.R57      R‰RE RF ll4       tQ]IP•                  RGRH.R57      RI RJ l4       tR]IP•                  RKRL.R57      R‹RM RN ll4       tS]IP•                  RORP.R57      R‹RQ RR ll4       tT]IP•                  RSRTRU.R57      RŒRV RW ll4       tU]'! RXR7      tV]IP¯                  ]VRYRZ7       ]VP•                  R.R/R0/. R�OR17      RŽR[ R\ ll4       tX]'! R]R7      tY]IP¯                  ]YR^RZ7       ]YP•                  R.R/R0/R_.R17      R�R` Ra ll4       tZ]YP•                  RBRb.R57      R‰Rc Rd ll4       t[]YP•                  RKRe.R57      R‹Rf Rg ll4       t\]YP•                  RhRi.R57      R‹Rj Rk ll4       t]]YP•                  RlRm.R57      R‹Rn Ro ll4       t^]YP•                  RpRq.R57      R‹Rr Rs ll4       t_]YP•                  RSRtRu.R57      RŒRv Rw ll4       t`]'! RxR7      ta]YP¯                  ]aRYRZ7       ]aP•                  R.R/R0/RyRz.R17      R�R{ R| ll4       tbR} R~ ltcR R€ ltd]! R�4      teR‚ Rƒ ltfR„ R… ltgR# )‘aƒ  Contains commands to interact with jobs on the Hugging Face Hub.

Usage:
    # run a job
    hf jobs run <image> <command>

    # List running or completed jobs
    hf jobs ps [-a] [-f key=value]

    # Print logs from a job (non-blocking)
    hf jobs logs <job-id>

    # Stream logs from a job (blocking, like `docker logs -f`)
    hf jobs logs -f <job-id>

    # Stream resources usage stats and metrics from a job
    hf jobs stats <job-id>

    # Inspect detailed information about a job
    hf jobs inspect <job-id>

    # Cancel a running job
    hf jobs cancel <job-id>

    # List available hardware options
    hf jobs hardware

    # Run a UV script
    hf jobs uv run <script>

    # Schedule a job
    hf jobs scheduled run <schedule> <image> <command>

    # List scheduled jobs
    hf jobs scheduled ps [-a] [-f key=value]

    # Inspect a scheduled job
    hf jobs scheduled inspect <scheduled_job_id>

    # Suspend a scheduled job
    hf jobs scheduled suspend <scheduled_job_id>

    # Resume a scheduled job
    hf jobs scheduled resume <scheduled_job_id>

    # Delete a scheduled job
    hf jobs scheduled delete <scheduled_job_id>

N)ÚCallableÚIterable)Úfnmatch)ÚEmptyÚQueue)Ú	AnnotatedÚAnyÚTypeVar)ÚJobHardware)ÚCLIErrorÚHfHubHTTPError)Úlogging)Ú_format_size)Úformat_duration)Ú
EnvFileOptÚEnvOptÚSecretsFileOptÚ
SecretsOptÚ
SoftChoiceÚTokenOptÚ
VolumesOptÚ
get_hf_apiÚparse_env_mapÚparse_volumesÚtyper_factory)Ú_dataclass_to_dictÚoutc          	      óz   € V ^8„  d   QhR\         R\         R,          R\        \         \         R,          3,          /# )é   Újob_idÚ	namespaceNÚreturn)ÚstrÚtuple)Úformats   "Úi/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/huggingface_hub/cli/jobs.pyÚ__annotate__r&   d   s5   € ÷ .ñ .¬ð .¼¸t½ð .ÌÌcÔSVÐY]ÕS]ÈoÕH^ñ .ó    c                ó*  € V '       g   \        R4      hV P                  R4      ^8”  d   \        RV  R24      hRV 9  d   W3# V P                  R^4      w  r#V'       d	   V'       g   \        RV  R24      hVe   W8w  d   \        RV RV R24      hW23# )a  Extract namespace from job_id if provided in 'namespace/job_id' format.

Allows users to pass job IDs copied from the Hub UI (e.g. 'username/job_id')
instead of only bare job IDs. If the namespace is also provided explicitly via
--namespace and conflicts, a CLIError is raised.
zJob ID cannot be empty.Ú/z<Job ID must be in the form 'job_id' or 'namespace/job_id': 'z'.z(Conflicting namespace: got --namespace='z ' but job ID implies namespace='Ú')r   ÚcountÚsplit)r   r    Úextracted_namespaceÚparsed_job_ids   &&  r%   Ú_parse_namespace_from_job_idr/   d   s·   € ÷ ÜÐ0Ó1Ð1à‡|�|�CÓ˜1ÔÜÐUÐV\ÐU]Ð]_Ð`ÓaÐaà
�&ÔØÐ Ð à)/¯©°c¸1Ó)=Ñ&Ðß§mÜÐUÐV\ÐU]Ð]_Ð`ÓaÐaàÒ Ô!AÜØ6°y°kÐAaÐbuÐavÐvwÐxó
ð 	
ð Ð-Ð-r'   gš™™™™™¹?zThe Docker image to use.©Úhelpz.Use a custom Docker image with `uv` installed.zcFlavor for the hardware. Run 'hf jobs hardware' to list available flavors. Defaults to `cpu-basic`.)r1   Ú
click_typez-lz--labelz3Set labels. E.g. --label KEY=VALUE or --label LABELzVMax duration: int/float with s (seconds, default), m (minutes), h (hours) or d (days).z-dz--detachz3Run the Job in the background and print the Job ID.zVThe namespace where the job will be running. Defaults to the current user's namespace.z--exposez÷Expose a container port through the jobs proxy. Repeat the flag for multiple ports (e.g. `--expose 8000 --expose 8001`). Each exposed port is reachable on the public jobs domain; access requires an HF token with read access to the job's namespace.z--withz%Run with the given packages installedz-pz--pythonz5The Python interpreter to use for the run environmentz!Suspend (pause) the scheduled Jobz8Allow multiple instances of this Job to run concurrentlyzWOne of annually, yearly, monthly, weekly, daily, hourly, or a CRON schedule expression.z$UV script to run (local file or URL)zArguments for the scriptzThe command to run.zJob ID (or 'namespace/job_id')zJob IDs (or 'namespace/job_id')z2Scheduled Job ID (or 'namespace/scheduled_job_id')zRun and manage Jobs on the Hub.ÚrunÚignore_unknown_optionsT)Úcontext_settingsÚexamplesc                óÄ   € V ^8„  d   QhR\         R\        R\        R\        R\        R\
        R\        R\        R	\        R
\        R\        R\        R\        R\        RR/# )r   ÚimageÚcommandÚenvÚsecretsÚlabelÚvolumeÚenv_fileÚsecrets_fileÚflavorÚtimeoutÚdetachÚexposer    Útokenr!   N)ÚImageArgÚ
CommandArgr   r   Ú	LabelsOptr   r   r   Ú	FlavorOptÚ
TimeoutOptÚ	DetachOptÚ	ExposeOptÚNamespaceOptr   )r$   s   "r%   r&   r&   !  sž   € ÷ *ñ *Üð*äð*ô 
ð*ô ð	*ô
 ð*ô ð*ô ð*ô !ð*ô ð*ô ð*ô ð*ô ð*ô ð*ô ð*ð 
ñ*r'   c                ó  € \        W&4      p\        W74      p\        VR7      pVP                  V VVV\        V4      \	        V4      VV	VVR7
      p\
        P                  ! RVP                  VP                  R7       \        VP                  P                  \        4      '       dF   RP                  R VP                  P                   4       4      p\
        P                  ! RV 24       V
'       dE   VP                  P                    RVP                   2p\
        P                  ! R	V R
V R24       R# VP#                  VP                  VP                  P                   RR7       F  p\
        P$                  ! V4       K  	  R# )z
Run a Job.©rD   )
r8   r9   r:   r;   ÚlabelsÚvolumesr@   rA   rC   r    úJob started©ÚidÚurlÚ
c              3   ó,   "  € T F
  pR V 2x € K  	  R# 5i©z  N© ©Ú.0rT   s   & r%   Ú	<genexpr>Újobs_run.<locals>.<genexpr>D  ó   é € ÐFÑ/E¨˜2˜c˜U�Ó/Eùó   ‚úSExposed ports are reachable at (requires an HF token with read access to the job):
r)   úUse `hf jobs logs -f ú&` to stream logs, or `hf jobs inspect ú` to check status.NT©r   r    Úfollow)r   r   Úrun_jobÚ_parse_labels_mapr   r   ÚresultrS   rT   Ú
isinstanceÚstatusÚexpose_urlsÚlistÚjoinÚhintÚownerÚnameÚfetch_job_logsÚtext)r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r    rD   Úenv_mapÚsecrets_mapÚapiÚjobÚurlsÚjob_refÚlogs   &&&&&&&&&&&&&&       r%   Újobs_runry     s:  € ô8 ˜CÓ*€GÜ Ó6€Kä
˜5Ô
!€CØ
�+‰+ØØØØÜ  Ó'Ü˜fÓ%ØØØØð ó €Cô ‡J‚Jˆ} §¡¨S¯W©WÕ5Ü�#—*‘*×(Ñ(¬$×/Ò/Ø�y‰yÑF¨s¯z©z×/EÒ/EÓFÓFˆÜ�ŠÐgÐhlÐgmÐnÔoßØ—Y‘Y—^‘^Ð$ A c§f¡f XÐ.ˆÜ�ŠÐ(¨¨	Ð1WÐX_ÐW`Ð`rÐsÔtÙØ×!Ñ!¨¯©¸3¿9¹9¿>¹>ÐRVÐ!ÖWˆÜ�Š�Žó Xr'   Úlogs)r6   c                óö   € V ^8„  d   QhR\         R\        \        \        P                  ! RRRR7      3,          R\        \
        R,          \        P                  ! R	R
RR7      3,          R\        R\        RR/# )r   r   rd   ú-fz--followzqFollow log output (stream until the job completes). Without this flag, only currently available logs are printed.r0   ÚtailNz-nz--tailzvNumber of lines to show from the end of the logs. When combined with --follow, starts streaming from the last N lines.r    rD   r!   )ÚJobIdArgr   ÚboolÚtyperÚOptionÚintrL   r   )r$   s   "r%   r&   r&   W  sš   € ÷ 1Dñ 1DÜð1DäÜÜ�ŠØØð Eô	
ð	õð1Dô Üˆd�
Ü�ŠØØð Jô	
ð	õð1Dô$ ð%1Dô& ð'1Dð( 
ñ)1Dr'   c                óä  € \        W4      w  r\        VR7      p VP                  WWR7      pV F  p\        P                  ! V4       K  	  V'       d.   V'       d   V RV  2MT p\        P
                  ! RV R24       R# R#   \         da   p	T	P                  e   T	P                  P                  MRp
T
R8X  d   \        R4      T	hT
R	8X  d   \        R
4      T	h\        RT	 24      T	hRp	?	ii ; i)a•  Fetch the logs of a Job.

By default, prints currently available logs and exits (non-blocking).
Use --follow/-f to stream logs in real-time until the job completes.
Use --tail/-n to limit the number of lines returned (server-side when supported).

Note: following exits when the log stream ends, regardless of whether the Job
succeeded or failed. Run `hf jobs inspect <job_id>` to check the final status.
rN   )r   r    rd   r}   r)   z#Stream ended. Run `hf jobs inspect z6` to check the final status (e.g. COMPLETED or ERROR).Né”  ú'Job not found. Please check the job ID.é“  ú<Access denied. You may not have permission to view this job.zFailed to fetch job logs: )
r/   r   rp   r   rq   rm   r   ÚresponseÚstatus_coder   )r   rd   r}   r    rD   rt   rz   rx   rw   Úeri   s   &&&&&      r%   Ú	jobs_logsr‹   N  sï   € ôN 5°VÓGÑ€Fä
˜5Ô
!€CðDØ×!Ñ!¨ÈVÐ!Ó_ˆÛˆCÜ�HŠH�SŽMñ çß1:˜˜ 1 V HÑ-ÀˆGÜ�HŠHØ5°g°YÐ>tÐuöñ øô
 ô DØ+,¯:©:Ò+A�—‘×'Ò'ÀtˆØ�SŒ=ÜÐDÓEÈ1ÐLØ�sŒ]ÜÐYÓZÐ`aÐaäÐ7¸°sÐ;Ó<À!ÐCûðDús$   ›9B ÁB Á#B ÂC/ÂAC*Ã*C/c                ó    € V ^8„  d   QhR\         \        \        3,          R\        \        \        \        \        3,          ,          R\        /# )r   Újob_propertiesÚfiltersr!   )Údictr"   rk   r#   r   )r$   s   "r%   r&   r&   ‹  s;   € ÷ ñ ¤T¬#¬s¨(¥^ð ¼dÄ5ÌÌcÔSVÈÕCWÕ>Xð Ô]añ r'   c                óö   € V Fr  w  r#pV P                  V4      pVf   VR8X  d   K$   R# \        VP                  4       VP                  4       4      pVR8X  d	   V'       d   VR8X  g   Kg  V'       g   Kq   R# 	  R# )z5Check if scheduled job matches all specified filters.ú!=FÚ=T)Úgetr   Úlower)r�   rŽ   ÚkeyÚop_strÚpatternÚvalueÚmatchs   &&     r%   Ú_matches_filtersrš   ‹  sf   € ã 'Ñˆ�WØ×"Ñ" 3Ó'ˆØŠ=Ø˜Œ~ÙÚÜ˜Ÿ™› w§}¡}£Ó7ˆØ�cŒM§%¨V°t®^ÇÁÚñ !(ñ r'   c                ó(   € V ^8„  d   QhR\         RR/# )r   Únr!   N)r‚   )r$   s   "r%   r&   r&   ™  s   € ÷ 'ñ '”3ð '˜4ñ 'r'   c                 óJ   € R pRp\        V 4       F  p\        WR7       K  	  R# )z[1Az[2K)ÚendN)ÚrangeÚprint)rœ   ÚLINE_UPÚ
LINE_CLEARÚis   &   r%   Ú_clear_liner¤   ™  s"   € Ø€GØ€JÜ�1ŽXˆÜˆg×&ó r'   c                ó  € V ^8„  d   QhR\         R\        \        \         \        3,          ,          R\        \         ,          R\        \
        \        \         \        \        \         \        ,          ,          ,          3,          ,          /# )r   r   Úmetrics_streamÚtable_headersr!   )r"   r   r�   r   rk   r#   r   r‚   )r$   s   "r%   r&   r&      s[   € ÷ ñ ÜðÜ!)¬$¬s´C¨x­.Õ!9ðÜJNÌsÍ)ðäŒe”Dœ#œt¤D¬¬s­¥OÕ4Ð4Õ5Õ6ñr'   c              #   óØ  "  € V EF×  pV VR ,           R2\        VR,          R,          ^4      \        ^dVR,          ,          VR,          ,          ^4       R2\        VR,          4       R\        VR,          4       R2\        VR,          4       R	\        VR
,          4       R2.pVR,          '       dó   \        VR,          \        4      '       dÖ   V.R.\	        V4      ,          .\	        VR,          4      ^,
          ,          ,           p\        V\        VR,          4      4       Fz  w  rFVR,          V,          pVVR,           R2\        ^dVR,          ,          VR,          ,          ^4       R2\        VR,          4       R\        VR,          4       R2.,          pK|  	  M-VR.\	        V4      \	        V4      ,
          ,          ,          pV.pRW3x € EKÚ  	  RV . 3x € R# 5i)Úcpu_usage_pctÚ%Úcpu_millicoresg     @�@Úmemory_used_bytesÚmemory_total_byteszB / ÚBÚrx_bpszbps / Útx_bpsÚbpsÚgpusÚ ÚutilizationúN/AFTN)Úroundr   rh   r�   ÚlenÚzipÚsorted)r   r¦   r§   ÚmetricsÚrowÚrowsÚgpu_idÚgpus   &&&     r%   Ú_get_jobs_stats_rowsr¿      sá  é € ô "ˆàØ�Õ'Ð(¨Ð*Ü�'Ð*Õ+¨fÕ4°aÓ8Ü�S˜7Ð#6Õ7Õ7¸'ÐBVÕ:WÕWÐYZÓ[Ð\Ð\]Ð^Ü˜GÐ$7Õ8Ó9Ð:¸$¼|ÈGÐThÕLiÓ?jÐ>kÐklÐmÜ˜G HÕ-Ó.Ð/¨v´lÀ7È8ÕCTÓ6UÐ5VÐVYÐZð
ˆð �6�?Œ?œz¨'°&­/¼4×@Ò@Ø�5˜R˜D¤3 s£8�OÐ,´°G¸FµOÓ0DÀqÕ0HÕIÕIˆDÜ" 4¬°¸µÓ)@ÖA‘�Ø˜f•o fÕ-�ØØ˜=Õ)Ð*¨!Ð,Ü˜S 3Ð':Õ#;Õ;¸cÐBVÕ>WÕWÐYZÓ[Ð\Ð\]Ð^Ü# CÐ(;Õ$<Ó=Ð>¸dÄ<ÐPSÐThÕPiÓCjÐBkÐklÐmðõ ’ò  Bð �E�7œc -Ó0´3°s³8Õ;Õ<Õ<ˆCØ�5ˆDØ�VÐ!Õ!ñ+ "ð, �˜Ð
Ôùs   ‚G(G*Ústatszhf jobs stats <job_id>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# )r   Újob_idsr    rD   r!   N)Ú	JobIdsArgrL   r   )r$   s   "r%   r&   r&   ½  s<   € ÷ JEñ JEÜðJEäðJEô ðJEð 
ñ	JEr'   c                óN  € V e,   . pV  F!  p\        WA4      w  rAVP                  V4       K#  	  Tp \        VR7      pVf   VP                  4       R,          pV f]   VP	                  VR7       Uu. uF@  pVP
                  '       d   VP
                  P                  MRR9   g   K4  VP                  NKB  	  p p\        V 4      ^ 8X  d   \        P                  ! R4       R# . ROp \        P                  P                  \        V 4      4      ;_uu_ 4       p/ p	V  F:  pV.p
Y§R,           Uu. uF  pRV9   g   R	V9   d   R
MRNK  	  up,          p
V
.W”&   K<  	  \        P                  ! 4       pV	 UU
u. uF  qIV,           F  qªNK  	  K  	  ppp
\        \!        W×R7      4       V  Uu. uF  pRVRVP#                  WAR7      RV/NK  	  pp\%        V\&        VR7       F¡  w  rôpV'       d   V	P)                  VR4       MVW”&   \        P                  ! 4       pVV,
          \*        8¼  g   KN  \-        ^\        V4      ,           4       V	 UU
u. uF  qIV,           F  qªNK  	  K  	  ppp
\        \!        W×R7      4       TpK£  	  RRR4       R# u upi u upi u up
pi u upi u up
pi   + '       g   i     R# ; i  \.         da   pTP0                  e   TP0                  P2                  MRpTR8X  d   \5        R4      ThTR8X  d   \5        R4      Th\5        RT 24      ThRp?ii ; i)z7Fetch the resource usage statistics and metrics of JobsNrN   ro   ©r    ÚUNKNOWNzNo running jobs found:é   NNr)   ÚUSAGEz-- / --z--)Úheadersr   r¦   ©r   r    r§   )Úkwargs_listr„   r…   r†   r‡   zFailed to fetch job stats: ©ÚRUNNINGÚUPDATING)	zJOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGE)r/   Úappendr   ÚwhoamiÚ	list_jobsri   ÚstagerS   r·   r   rq   ÚmultiprocessingÚpoolÚ
ThreadPoolÚtimer    Ú	_tabulateÚfetch_job_metricsÚiflatmap_unorderedr¿   ÚpopÚSTATS_UPDATE_MIN_INTERVALr¤   r   rˆ   r‰   r   )rÂ   r    rD   Ú
parsed_idsr   rt   ru   r§   rÔ   Úrows_per_job_idr»   ÚheaderÚlast_update_timeÚ
total_rowsrË   Údoner¼   ÚnowrŠ   ri   s   &&&                 r%   Ú
jobs_statsrã   ¼  s  € ð ÒØˆ
ÛˆFÜ <¸VÓ OÑˆFØ×Ñ˜fÖ%ñ ð ˆÜ
˜5Ô
!€CØÒØ—J‘J“L Õ(ˆ	Ø‚ð —}‘}¨y�}Ô9ó
á9�Ø$'§J§J J�—
‘
× Ò °IÐBYÑYô ˆC�FŒFÙ9ð 	ð 
ô
 ˆ7ƒ|�qÔÜ�ŠÐ(Ô)Ùò
€Mð'EÜ×!Ñ!×,Ñ,¬S°«\×:Ô:¸dØ@BˆOÛ!�Ø(. x�ØÐprÖbsÓtÑbsÐX^ c¨V¤m°wÀ&Ô7H™	ÈtÒSÑbsÑtÕt�Ø+.¨%�Ó'ñ "ô  $Ÿyšy›{ÐÙ,;Ô_©O &ÐW]×G^ÐG^Àš#ÑG^™#©OˆJÑ_ô ”)˜JÔ>Ô?ñ &óñ &�Fð	 ˜fØ$ c×&;Ñ&;À6Ð&;Ó&_Ø# ]óñ
 &ð ð ô '9¸Ô?SÐal×&mÑ"�˜dßØ#×'Ñ'¨°Õ5à.2�OÑ+Ü—i’i“k�ØÐ)Õ)Ô-FÖFÜ ¤C¨
£OÕ 3Ô4Ù4CÔ!g±O¨&Ð_e×OfÐOfÈ¢#ÑOf¡#±O�JÑ!gÜœ) JÔFÔGØ'*Ò$ñ 'n÷) ;Ñ:ùò)
ùò0 uùó `ùò
ùó  "h÷9 ;×:Ð:ûô> ô EØ+,¯:©:Ò+A�—‘×'Ò'ÀtˆØ�SŒ=ÜÐDÓEÈ1ÐLØ�sŒ]ÜÐYÓZÐ`aÐaäÐ8¸¸Ð<Ó=À1ÐDûðEús†   Á/J
ÂJ
Â%J
Ã$0J9 ÄJ%Ä*JÅ,J%Å1J
Æ
J%Æ&!JÇAJ%È) J%É	JÉ"J%Ê J9 ÊJ%Ê%J6	Ê0J9 Ê6J9 Ê9L$ËALÌL$Úpsz
hf jobs pszhf jobs ps -ac                ó   € V ^8„  d   QhR\         \        \        P                  ! RRRR7      3,          R\        R\
        R\         \        \        ,          R	,          \        P                  ! R
RRR7      3,          RR	/# )r   Úallú-aú--allz*Show all Jobs (default shows just running)r0   r    rD   ÚfilterNr|   ú--filterú>Filter output based on conditions provided (format: key=value)r!   ©r   r   r€   r�   rL   r   rk   r"   )r$   s   "r%   r&   r&     s—   € ÷ cañ caÜ	ÜÜ�ŠØØØ=ô	
ð	õ
ðcaô ðcaô ðcaô ÜŒS�	�DÕÜ�ŠØØØQô	
ð	õðcað& 
ñ'car'   c           	     óô  € \        VR7      pVP                  VR7      p. p. pT;'       g    .  EF‡  pVP                  R4      '       g   VP                  R4      '       dÎ   VP                  R4      '       d8   V\        R4      R p	RV	9   d   \        P
                  ! RV	 R24       Kz  T	R	R
rËp
MNV\        R4      R p	RV	9   d   V	P                  R^4      w  r¬MT	R
rÊV
P                  R4      '       d	   R	pV
RR& p
MRpVP                  V
P                  4       W¼P                  4       34       Kÿ  RV9   dh   VP                  R^4      w  rÞVP                  R4      '       d	   R	pVRR& pMRpVP                  VP                  4       W¾P                  4       34       EKm  \        P
                  ! RV R24       EKŠ  	  . pV Fô  pVP                  '       d   VP                  P                  MRpV '       g
   VR'9  d   K>  VP                  ;'       g    RpVP                  ;'       g    . pV'       d   RP                  V4      MRpRVP                  RVRVP                  4       RV/p\!        VV4      '       g   K»  \!        VP"                  ;'       g    / V4      '       g   Kã  VP                  V4       Kö  	  . pV EF.  p\%        V4      pVP'                  R4      ;'       g    / pVP'                  R4      ;'       g    . pVP'                  RR4      VR&   VP'                  R4      ;'       g    RVR&   V'       d   RP                  V4      MRVR&   VP'                  R4      '       d!   VR,          R,          P)                  RR4      MRVR&   VP'                  R4      ;'       g    / P'                  RR4      VR&   \+        VP'                  R4      4      VR &   VP                  V4       EK1  	  \        P,                  ! V. R(ORR!7       V'       gh   V'       d4   R"P                  R# V 4       4      p\        P.                  ! R$V 24       R# V '       g#   V'       g   \        P0                  ! R%4       R# R# R# R# ))z
List Jobs.rN   rÅ   zlabel!=zlabel=Nr’   z-Ignoring invalid label filter format 'label!=z'. Use label!=key format.r‘   Ú*Ú!ú Ignoring invalid filter format 'ú'. Use key=value format.rÆ   rµ   Ú rS   r8   ri   r9   Ú	durationsr³   r   Údocker_imageúimage/spaceÚ
created_atºNé   NÚTÚcreatedrÒ   Úrunning_secsÚruntime©rÉ   Úid_keyú, c              3   ó6   "  € T F  w  rq1 V V 2x € K  	  R # 5i©NrX   ©rZ   ÚkÚoÚvs   &   r%   r[   Újobs_ps.<locals>.<genexpr>k  s   é € Ð#HÁ±W°Q¸1 c¨!¨¨Q¨C¥LÃùó   ‚zNo jobs matched filters: zHNo running jobs. Use `-a`/`--all` to include finished (and failed) jobs.éÿÿÿÿrÌ   )r   rõ   r9   rú   ri   rü   )r   rÑ   Ú
startswithr·   r   Úwarningr,   ÚendswithrÏ   r”   ri   rÒ   rô   r9   rl   rS   rš   rO   r   r“   Úreplacer   Útablerq   rm   )ræ   r    rD   ré   rt   ÚjobsrŽ   Úlabels_filtersÚfÚ
label_partÚ	label_keyÚopÚlabel_valuer•   r˜   Úfiltered_jobsru   ri   Úimage_or_spaceÚcmdÚcommand_strÚpropsÚitemsÚitemró   Úfilters_msgs   &&&&                      r%   Újobs_psr  
  sÌ  € ô, ˜5Ô
!€CØ�=‰= 9ˆ=Ó-€Dà*,€GØ13€NØ�\ˆ\�r‹\ˆØ�<‰<˜	×"Ò" a§l¡l°8×&<Ò&<Ø�|‰|˜I×&Ò&Øœs 9›~Ð/Ð0�
Ø˜*Ô$Ü—K’KÐ"OÐPZÈ|Ð[tÐ uÔvÙØ-7¸¸s˜{�	˜{àœs 8›}˜Ð/�
Ø˜*Ô$Ø-7×-=Ñ-=¸cÀ1Ó-EÑ*�I˜{à-7¸˜{à×%Ñ% c×*Ò*Ø�BØ )¨#¨2 ‘Ià�BØ×!Ñ! 9§?¡?Ó#4°b×:KÑ:KÓ:MÐ"NÖOØ�AŒXØŸ™  a›‰JˆCà�|‰|˜C× Ò Ø�Ø˜#˜2�h‘à�Ø�N‰N˜CŸI™I›K¨¯[©[«]Ð;×<ä�KŠKÐ:¸1¸#Ð=UÐV×Wñ? ðD €MÛˆØ%(§Z§Z Z�—‘×!Ò!°Yˆß�vÐ%<Ô<ÙØ×)Ñ)×2Ð2¨UˆØ�k‰k×Ð˜Rˆß'*�c—h‘h˜s”m°ˆØ�s—v‘v˜w¨¸À&Ç,Á,Ã.ÐR[Ð]hÐiˆÜ  w×/Ò/ÙÜ §
¡
× 0Ð 0¨b°.×AÒAÙØ×Ñ˜SÖ!ñ ð #%€EÜˆÜ! #Ó&ˆØ—H‘H˜[Ó)×/Ð/¨Rˆ	Ø�h‰h�yÓ!×'Ð' RˆØŸ™ $¨Ó+ˆˆX‰Ø"Ÿh™h ~Ó6×?Ð?¸%ˆˆ]Ñß+.˜#Ÿ(™( 3œ-°EˆˆY‰ØGKÇxÁxÐP\×G]ÒG]˜$˜|Õ,¨SÕ1×9Ñ9¸#¸sÔCÐchˆˆY‰ØŸ(™( 8Ó,×2Ð2°×7Ñ7¸ÀÓKˆˆX‰Ü)¨)¯-©-¸Ó*GÓHˆˆY‰Ø�‰�T×ñ ô ‡I‚IØÚTØõ÷
 ßØŸ)™)Ñ#HÁÓ#HÓHˆKÜ�HŠHÐ0°°Ð>Ö?ßŸ^Ü�HŠHÐ_Ö`ñ ,‘ñ	 r'   Úhardwarezhf jobs hardwarec                ó   € V ^8„  d   QhRR/# )r   r!   NrX   )r$   s   "r%   r&   r&   r  s   € ÷ ]ñ ]�tñ ]r'   c                 ó¦  € \        4       p V P                  4       p. pV EF  pRpVP                  '       dH   VP                  P                   RVP                  P                   RVP                  P
                   R2pVP                  '       d   RVP                  R 2MRpVP                  '       d   RVP                  ^<,          R 2MRpVP                  R	VP                  R
VP                  RVP                  RVP                  RVP                  RVRVRV/4       EK  	  \        P                  ! V4       \        P                  ! R4       R# )z(List available hardware options for Jobsr³   zx z (Ú)Ú$z.4fÚfreez.2fro   zpretty nameÚcpuÚramÚstorageÚacceleratorzcost/minz	cost/hourzLUse `hf jobs run --flavor <name> ...` to request a specific hardware flavor.N)r   Úlist_jobs_hardwarer'  ÚquantityÚmodelÚvramÚunit_cost_usdrÏ   ro   Úpretty_namer$  r%  Úephemeral_storager   r  rm   )rt   Úhardware_listr  ÚhwÚaccelerator_infoÚcost_minÚ	cost_hours          r%   Újobs_hardwarer4  q  s*  € ô ‹,€CØ×*Ñ*Ó,€MØ€EÜˆØÐØ�>�>ˆ>Ø"$§.¡.×"9Ñ"9Ð!:¸"¸R¿^¹^×=QÑ=QÐ<RÐRTÐUW×UcÑUc×UhÑUhÐTiÐijÐkÐØ13×1A×1AÐ1A�Q�r×'Ñ'¨Ð,Ñ-ÀvˆØ79×7G×7GÐ7G�a˜×(Ñ(¨2Õ-¨cÐ2Ñ3ÈVˆ	Ø�‰à˜Ÿ™Ø˜rŸ~™~Ø�r—v‘vØ�r—v‘vØ˜2×/Ñ/ØÐ/Ø˜HØ˜Yð	÷	
ñ ô$ ‡I‚IˆeÔÜ‡H‚HÐ[Ö\r'   Úinspectzhf jobs inspect <job_id>c                óš   € V ^8„  d   QhR\         \        \        ,          \        P                  ! RR7      3,          R\
        R\        RR/# )r   rÂ   z*Job IDs to inspect (or 'namespace/job_id')r0   r    rD   r!   N©r   rk   r"   r€   ÚArgumentrL   r   )r$   s   "r%   r&   r&   Ž  sR   € ÷ 9ñ 9ÜÜŒS�	Ü�ŠØ=ô	
ð	õð9ô ð9ô ð9ð 
ñ9r'   c                ó  € . pV  F!  p\        WA4      w  rAVP                  V4       K#  	  Tp \        VR7      p V  Uu. uF  qEP                  WAR7      NK  	  pp\        P                  ! T U	u. uF  p	\        T	4      NK  	  up	4       R# u upi   \         da   pTP
                  e   TP
                  P                  MRpTR8X  d   \        R4      ThTR8X  d   \        R4      Th\        RT 24      ThRp?ii ; iu up	i )	z0Display detailed information on one or more JobsrN   rÊ   Nr„   r…   r†   r‡   zFailed to inspect job: )r/   rÏ   r   Úinspect_jobr   rˆ   r‰   r   r   r  r   )
rÂ   r    rD   rÜ   r   rt   r  rŠ   ri   ru   s
   &&&       r%   Újobs_inspectr;  �  sý   € ð €JÛˆÜ8¸ÓKÑˆØ×Ñ˜&Ö!ñ ð €GÜ
˜5Ô
!€Cð	AÙRYÓZÑRYÈ—‘ v�ÖCÑRYˆÐZô ‡I‚I±$Ó7±$¨3Ô! #Ö&±$Ñ7Ö8ùò [øÜô AØ+,¯:©:Ò+A�—‘×'Ò'ÀtˆØ�SŒ=ÜÐDÓEÈ1ÐLØ�sŒ]ÜÐYÓZÐ`aÐaäÐ4°Q°CÐ8Ó9¸qÐ@ûðAüò 8s/   ¹B ½B
ÁB Á-C=Â
B ÂC:ÂAC5Ã5C:Úcancelzhf jobs cancel <job_id>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# )r   r   r    rD   r!   N)r~   rL   r   )r$   s   "r%   r&   r&   ­  s0   € ÷ +ñ +Üð+äð+ô ð+ð 
ñ	+r'   c                ój  € \        W4      w  r\        VR7      p VP                  WR7       \        P                  ! R	T R
7       R#   \         da   pTP                  e   TP                  P
                  MRpTR8X  d   \        R4      ThTR8X  d   \        R4      Th\        RT 24      ThRp?ii ; i)zCancel a JobrN   rÊ   Nr„   r…   r†   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: zJob cancelled©rS   )	r/   r   Ú
cancel_jobr   rˆ   r‰   r   r   rg   )r   r    rD   rt   rŠ   ri   s   &&&   r%   Újobs_cancelrA  ¬  s­   € ô 5°VÓGÑ€FÜ
˜5Ô
!€Cð	@Ø�‰˜fˆÔ:ô ‡J‚Jˆ 6×*øô ô @Ø+,¯:©:Ò+A�—‘×'Ò'ÀtˆØ�SŒ=ÜÐDÓEÈ1ÐLØ�sŒ]ÜÐ[Ó\ÐbcÐcäÐ3°A°3Ð7Ó8¸aÐ?ûð@ús   ›A ÁB2ÁAB-Â-B2rO   z8hf jobs labels <job_id> --label env=prod --label team=mlzhf jobs labels <job_id> --clearc                óž   € V ^8„  d   QhR\         R\        R\        \        \        P
                  ! RRR7      3,          R\        R\        R	R
/# )r   r   r<   Úclearú--clearzRemove all labels from the job.r0   r    rD   r!   N)r~   rG   r   r   r€   r�   rL   r   )r$   s   "r%   r&   r&   É  sZ   € ÷ ,ñ ,Üð,äð,ô ”Tœ5Ÿ<š<¨	Ð8YÔZÐZÕ[ð,ô ð	,ô
 ð,ð 
ñ,r'   c                ó8  € V'       g   V'       g   \        R4      hV'       d   V'       d   \        R4      h\        W4      w  r\        V4      ;'       g    / p\        VR7      pVP	                  WVR7      p\
        P                  ! RVP                  R7       R# )z5Update labels on a Job. Replaces all existing labels.úOPlease set at least one label with --label. To remove all labels, pass --clear.úbCannot set labels and clear them at the same time. Please use either --label or --clear, not both.rN   )r   rO   r    úLabels updatedr?  N)r   r/   rf   r   Úupdate_job_labelsr   rg   rS   )r   r<   rC  r    rD   rO   rt   ru   s   &&&&&   r%   Újobs_labelsrJ  Â  s}   € ÷ ŸÜÐhÓiÐiß—ÜØpó
ð 	
ô 5°VÓGÑ€FÜ˜uÓ%×+Ð+¨€FÜ
˜5Ô
!€CØ
×
Ñ
 vÈ	Ð
Ó
R€CÜ‡J‚JÐ C§F¡F×+r'   zFRun UV scripts (Python with inline dependencies) on HF infrastructure.Úuv)ro   c          $      óè   € V ^8„  d   QhR\         R\        R\        R\        R\        R\
        R\        R\        R	\        R
\        R\        R\        R\        R\        R\        R\        R\         RR/# )r   ÚscriptÚscript_argsr8   r@   r:   r;   r<   r=   r>   r?   rA   rB   rC   r    rD   Úwith_Úpythonr!   N)Ú	ScriptArgÚScriptArgsArgÚImageOptrH   r   r   rG   r   r   r   rI   rJ   rK   rL   r   ÚWithOptÚ	PythonOpt)r$   s   "r%   r&   r&   í  s¼   € ÷ 0ñ 0Üð0äð0ô ð0ô ð	0ô
 
ð0ô ð0ô ð0ô ð0ô ð0ô !ð0ô ð0ô ð0ô ð0ô ð0ô ð0ô  ð!0ô" ð#0ð$ 
ñ%0r'   c                ó,  € \        WH4      p\        WY4      p\        VR7      pTP                  T T;'       g    . VVVVV\        V4      \	        V4      VV
VVR7      p\
        P                  ! RVP                  VP                  R7       \        VP                  P                  \        4      '       dF   RP                  R VP                  P                   4       4      p\
        P                  ! RV 24       V'       dE   VP                  P                    RVP                   2p\
        P                  ! R	V R
V R24       R# VP#                  VP                  VP                  P                   RR7       F  p\
        P$                  ! V4       K  	  R# )ú8Run a UV script (local file or URL) on HF infrastructurerN   )rM  rN  ÚdependenciesrP  r8   r:   r;   rO   rP   r@   rA   rC   r    rQ   rR   rU   c              3   ó,   "  € T F
  pR V 2x € K  	  R# 5irW   rX   rY   s   & r%   r[   Újobs_uv_run.<locals>.<genexpr>  r]   r^   r_   r)   r`   ra   rb   NTrc   )r   r   Ú
run_uv_jobrf   r   r   rg   rS   rT   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   )rM  rN  r8   r@   r:   r;   r<   r=   r>   r?   rA   rB   rC   r    rD   rO  rP  rr   rs   rt   ru   rv   rw   rx   s   &&&&&&&&&&&&&&&&&       r%   Újobs_uv_runr\  â  sK  € ô> ˜CÓ*€GÜ Ó6€Kä
˜5Ô
!€CØ
�.‰.ØØ×%Ð% 2ØØØØØÜ  Ó'Ü˜fÓ%ØØØØð ó €Cô ‡J‚Jˆ} §¡¨S¯W©WÕ5Ü�#—*‘*×(Ñ(¬$×/Ò/Ø�y‰yÑF¨s¯z©z×/EÒ/EÓFÓFˆÜ�ŠÐgÐhlÐgmÐnÔoßØ—Y‘Y—^‘^Ð$ A c§f¡f XÐ.ˆÜ�ŠÐ(¨¨	Ð1WÐX_ÐW`Ð`rÐsÔtÙØ×!Ñ!¨¯©¸3¿9¹9¿>¹>ÐRVÐ!ÖWˆÜ�Š�Žó Xr'   z,Create and manage scheduled Jobs on the Hub.Ú	scheduledz>hf jobs scheduled run "0 0 * * *" python:3.12 python script.pyc          "      óÜ   € V ^8„  d   QhR\         R\        R\        R\        R\        R\
        R\        R\        R	\        R
\        R\        R\        R\        R\        R\        R\        RR/# )r   Úscheduler8   r9   ÚsuspendÚconcurrencyr:   r;   r<   r=   r>   r?   r@   rA   rC   r    rD   r!   N)ÚScheduleArgrE   rF   Ú
SuspendOptÚConcurrencyOptr   r   rG   r   r   r   rH   rI   rK   rL   r   )r$   s   "r%   r&   r&   )  sÅ   € ÷ 'Yñ 'YÜð'Yäð'Yô ð'Yô ð	'Yô
  ð'Yô 
ð'Yô ð'Yô ð'Yô ð'Yô ð'Yô !ð'Yô ð'Yô ð'Yô ð'Yô ð'Yô  ð!'Yð" 
ñ#'Yr'   c                ó6  € \        WY4      p\        Wj4      p\        VR7      pVP                  VVV VVVV\        V4      \	        V4      VVVVR7      p\
        P                  ! RVP                  R7       \
        P                  ! RVP                   R24       R# )zSchedule a Job.rN   )r8   r9   r_  r`  ra  r:   r;   rO   rP   r@   rA   rC   r    úScheduled Job createdr?  úUse `hf jobs scheduled inspect ú` to view its details.N)	r   r   Úcreate_scheduled_jobrf   r   r   rg   rS   rm   )r_  r8   r9   r`  ra  r:   r;   r<   r=   r>   r?   r@   rA   rC   r    rD   rr   rs   rt   Úscheduled_jobs   &&&&&&&&&&&&&&&&    r%   Úscheduled_runrk  $  s�   € ô0 ˜CÓ*€GÜ Ó6€Kä
˜5Ô
!€CØ×,Ñ,ØØØØØØØÜ  Ó'Ü˜fÓ%ØØØØð -ó €Mô ‡J‚JÐ&¨=×+;Ñ+;Õ<Ü‡H‚HÐ.¨}×/?Ñ/?Ð.@Ð@VÐWÖXr'   zhf jobs scheduled psc                ó   € V ^8„  d   QhR\         \        \        P                  ! RRRR7      3,          R\        R\
        R\         \        \        ,          R	,          \        P                  ! R
RRR7      3,          RR	/# )r   ræ   rç   rè   z1Show all scheduled Jobs (default hides suspended)r0   r    rD   ré   Nr|   rê   rë   r!   rì   )r$   s   "r%   r&   r&   T  s—   € ÷ KFñ KFÜ	ÜÜ�ŠØØØDô	
ð	õ
ðKFô ðKFô ðKFô ÜŒS�	�DÕÜ�ŠØØØQô	
ð	õðKFð& 
ñ'KFr'   c           	     ó¤  € \        VR7      pVP                  VR7      p. pT;'       g    .  FŠ  pRV9   dg   VP                  R^4      w  r‰VP                  R4      '       d	   Rp
VRR pMRp
VP	                  VP                  4       W©P                  4       34       Kp  \        P                  ! RV R24       KŒ  	  . pV FÈ  pVP                  ;'       g    R	pV '       g   V'       d   K+  VP                  P                  ;'       g    R
pVP                  P                  ;'       g    . pV'       d   RP                  V4      MR
pRVP                  RVR\        V4      RV/p\        VV4      '       g   K·  VP	                  V4       KÊ  	  . pV EF\  p\!        V4      pVP#                  R4      ;'       g    / pVP#                  R4      ;'       g    / pVP#                  R4      pVP#                  R4      ;'       g    . pVP#                  R4      ;'       g    R
VR&   V'       d   RP                  V4      MR
VR&   V'       d8   VP#                  R4      '       d!   VR,          R,          P%                  RR4      MR
VR&   VP#                  R4      '       d!   VR,          R,          P%                  RR4      MR
VR&   VP#                  R4      ;'       g    R	VR&   VP	                  V4       EK_  	  \        P&                  ! V. R ORR7       V'       g>   V'       d4   RP                  R V 4       4      p\        P(                  ! RV 24       R# R# R# )!zList scheduled JobsrN   rÅ   r’   rï   r‘   Nrð   rñ   Frµ   rò   rS   r8   r`  r9   Újob_specri   Úlast_jobrô   rõ   Úatr÷   rù   Úlast_runÚnext_job_run_atÚnext_runrý   rÿ   c              3   ó6   "  € T F  w  rq1 V V 2x € K  	  R # 5ir  rX   r  s   &   r%   r[   Úscheduled_ps.<locals>.<genexpr>ž  s   é € ÐD¹G±°°q # a S¨¨¥»Gùr  z#No scheduled jobs matched filters: r  )rS   r_  rõ   r9   rq  rs  r`  )r   Úlist_scheduled_jobsr,   r  rÏ   r”   r   r
  r`  rn  rô   r9   rl   rS   r"   rš   r   r“   r  r  rq   )ræ   r    rD   ré   rt   Úscheduled_jobsrŽ   r  r•   r˜   r  r  rj  r`  r  r  r  r  r  Úsjr  rn  Ústatus_dictro  r  s   &&&&                     r%   Úscheduled_psrz  S  sÖ  € ô, ˜5Ô
!€CØ×,Ñ,°yÐ,ÓA€NØ*,€GØ�\ˆ\�rŠ\ˆØ�!Œ8ØŸ™  a›‰JˆCà�|‰|˜C× Ò Ø�Ø˜#˜2�h‘à�Ø�N‰N˜CŸI™I›K¨¯[©[«]Ð;Ö<ä�KŠKÐ:¸1¸#Ð=UÐVÖWñ ð €MÛ'ˆØ×'Ñ'×0Ð0¨5ˆß—wÙØ&×/Ñ/×<Ñ<×EÐEÀˆØ×$Ñ$×,Ñ,×2Ð2°ˆß'*�c—h‘h˜s”m°ˆØ�}×'Ñ'¨°.À)ÌSÐQXË\Ð[dÐfqÐrˆÜ  w×/Ò/ÙØ×Ñ˜]Ö+ñ (ð #%€EÜˆÜ! "Ó%ˆØ—8‘8˜JÓ'×-Ð-¨2ˆØ—h‘h˜xÓ(×.Ð.¨BˆØ—?‘? :Ó.ˆØ�l‰l˜9Ó%×+Ð+¨ˆØ&Ÿl™l¨>Ó:×CÐC¸eˆˆ]Ñß+.˜#Ÿ(™( 3œ-°EˆˆY‰ßDLÐQY×Q]ÑQ]Ð^b×QcÒQc˜8 D�>¨#Õ.×6Ñ6°s¸CÔ@ÐinˆˆZÑàEPÇ_Á_ÐUf×EgÒEgˆKÐ)Õ*¨3Õ/×7Ñ7¸¸SÔAÐmrð 	ˆZÑð Ÿ(™( 9Ó-×6Ð6°ˆˆY‰Ø�‰�T×ñ ô ‡I‚IØÚ_Øõ÷
 —WØ—i‘iÑD¹GÓDÓDˆÜ�ŠÐ6°{°mÐDÖEñ ‰5r'   zhf jobs scheduled inspect <id>c                óš   € V ^8„  d   QhR\         \        \        ,          \        P                  ! RR7      3,          R\
        R\        RR/# )r   Úscheduled_job_idsz>Scheduled Job IDs to inspect (or 'namespace/scheduled_job_id')r0   r    rD   r!   Nr7  )r$   s   "r%   r&   r&   £  sX   € ÷ Wñ WÜ ÜŒS�	Ü�ŠØQô	
ð	õðWô ðWô ðWð 
ñWr'   c                ó(  € . pV  F!  p\        WA4      w  rAVP                  V4       K#  	  Tp \        VR7      pV  Uu. uF  pVP                  WaR7      NK  	  pp\        P
                  ! V Uu. uF  p\        V4      NK  	  up4       R# u upi u upi )z:Display detailed information on one or more scheduled JobsrN   ©Úscheduled_job_idr    N)r/   rÏ   r   Úinspect_scheduled_jobr   r  r   )	r|  r    rD   rÜ   r   rt   r  rw  rj  s	   &&&      r%   Úscheduled_inspectr�  ¢  s    € ð €JÛ#ˆÜ8¸ÓKÑˆØ×Ñ˜&Ö!ñ $ð #ÐÜ
˜5Ô
!€Cñ !2óá 1Ðð 	×!Ñ!Ð3CÐ!ÖYÙ 1ð ð ô ‡I‚IÁnÓUÁn°]Ô! -Ö0ÁnÑUÖVùò	ùò Vs   ¼B
Á-BÚdeletezhf jobs scheduled delete <id>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# ©r   r  r    rD   r!   N©ÚScheduledJobIdArgrL   r   )r$   s   "r%   r&   r&   ¼  ó0   € ÷ 	=ñ 	=Ü'ð	=äð	=ô ð	=ð 
ñ		=r'   c                óŒ   € \        W4      w  r\        VR7      pVP                  WR7       \        P                  ! RV R7       R# )zDelete a scheduled Job.rN   r~  zScheduled Job deletedr?  N)r/   r   Údelete_scheduled_jobr   rg   ©r  r    rD   rt   s   &&& r%   Úscheduled_deleter‹  »  ó?   € ô #?Ð?OÓ"[ÑÐÜ
˜5Ô
!€CØ×ÑÐ.>ÐÔTÜ‡J‚JÐ&Ð+;×<r'   r`  zhf jobs scheduled suspend <id>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# r„  r…  )r$   s   "r%   r&   r&   É  s6   € ÷ 
Qñ 
QÜ'ð
Qäð
Qô ð
Qð 
ñ	
Qr'   c                óÀ   € \        W4      w  r\        VR7      pVP                  WR7       \        P                  ! RV R7       \        P
                  ! RV  R24       R# )z Suspend (pause) a scheduled Job.rN   r~  zScheduled Job suspendedr?  zUse `hf jobs scheduled resume z` to resume it.N)r/   r   Úsuspend_scheduled_jobr   rg   rm   rŠ  s   &&& r%   Úscheduled_suspendr�  È  sW   € ô #?Ð?OÓ"[ÑÐÜ
˜5Ô
!€CØ×ÑÐ/?ÐÔUÜ‡J‚JÐ(Ð-=Õ>Ü‡H‚HÐ-Ð.>Ð-?¸ÐOÖPr'   Úresumezhf jobs scheduled resume <id>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# r„  r…  )r$   s   "r%   r&   r&   ×  r‡  r'   c                óŒ   € \        W4      w  r\        VR7      pVP                  WR7       \        P                  ! RV R7       R# )z!Resume (unpause) a scheduled Job.rN   r~  zScheduled Job resumedr?  N)r/   r   Úresume_scheduled_jobr   rg   rŠ  s   &&& r%   Úscheduled_resumer•  Ö  rŒ  r'   z>hf jobs scheduled labels <id> --label env=prod --label team=mlz%hf jobs scheduled labels <id> --clearc                óž   € V ^8„  d   QhR\         R\        R\        \        \        P
                  ! RRR7      3,          R\        R\        R	R
/# )r   r  r<   rC  rD  z)Remove all labels from the scheduled job.r0   r    rD   r!   N)r†  rG   r   r   r€   r�   rL   r   )r$   s   "r%   r&   r&   ê  sZ   € ÷ 6ñ 6Ü'ð6äð6ô ”Tœ5Ÿ<š<¨	Ð8cÔdÐdÕeð6ô ð	6ô
 ð6ð 
ñ6r'   c                ó8  € V'       g   V'       g   \        R4      hV'       d   V'       d   \        R4      h\        W4      w  r\        V4      ;'       g    / p\        VR7      pVP	                  WVR7      p\
        P                  ! RVP                  R7       R# )z?Update labels on a scheduled Job. Replaces all existing labels.rF  rG  rN   )r  rO   r    rH  r?  N)r   r/   rf   r   Úupdate_scheduled_job_labelsr   rg   rS   )r  r<   rC  r    rD   rO   rt   rj  s   &&&&&   r%   Úscheduled_labelsr™  ã  sˆ   € ÷ ŸÜÐhÓiÐiß—ÜØpó
ð 	
ô #?Ð?OÓ"[ÑÐÜ˜uÓ%×+Ð+¨€FÜ
˜5Ô
!€CØ×3Ñ3Ø)ÀIð 4ó €Mô ‡J‚JÐ M×$4Ñ$4×5r'   z)Schedule UV scripts on HF infrastructure.z.hf jobs scheduled uv run "0 0 * * *" script.pyz<hf jobs scheduled uv run "0 0 * * *" script.py --with pandasc          (      ó   € V ^8„  d   QhR\         R\        R\        R\        R\        R\
        R\        R\        R	\        R
\        R\        R\        R\        R\        R\        R\        R\         R\"        R\$        RR/# )r   r_  rM  rN  r`  ra  r8   r@   r:   r;   r<   r=   r>   r?   rA   rC   r    rD   rO  rP  r!   N)rb  rQ  rR  rc  rd  rS  rH   r   r   rG   r   r   r   rI   rK   rL   r   rT  rU  )r$   s   "r%   r&   r&     sæ   € ÷ -Oñ -OÜð-Oäð-Oô ð-Oô ð	-Oô
  ð-Oô ð-Oô ð-Oô 
ð-Oô ð-Oô ð-Oô ð-Oô ð-Oô !ð-Oô ð-Oô ð-Oô  ð!-Oô" ð#-Oô$ ð%-Oô& ð'-Oð( 
ñ)-Or'   c                óP  € \        W{4      p\        WŒ4      p\        VR7      pTP                  TT;'       g    . V VVVVVVV\        V	4      \	        V
4      VVVVR7      p\
        P                  ! RVP                  R7       \
        P                  ! RVP                   R24       R# )rW  rN   )rM  rN  r_  r`  ra  rX  rP  r8   r:   r;   rO   rP   r@   rA   rC   r    rf  r?  rg  rh  N)	r   r   Úcreate_scheduled_uv_jobrf   r   r   rg   rS   rm   )r_  rM  rN  r`  ra  r8   r@   r:   r;   r<   r=   r>   r?   rA   rC   r    rD   rO  rP  rr   rs   rt   ru   s   &&&&&&&&&&&&&&&&&&&    r%   Úscheduled_uv_runr�    s©   € ô< ˜CÓ*€GÜ Ó6€Kä
˜5Ô
!€CØ
×
%Ñ
%ØØ×%Ð% 2ØØØØØØØØÜ  Ó'Ü˜fÓ%ØØØØð! &ó €Cô$ ‡J‚JÐ&¨3¯6©6Õ2Ü‡H‚HÐ.¨s¯v©v¨hÐ6LÐMÖNr'   c                ó„   € V ^8„  d   QhR\         \        ,          R,          R\        \        \        3,          R,          /# )r   rO   Nr!   )rk   r"   r�   )r$   s   "r%   r&   r&   @  s0   € ÷ ñ œd¤3�i¨$Õ.ð ´4¼¼S¸µ>ÀDÕ3Hñ r'   c                óv   € V '       g   R# / pV  F&  pRV9   d   VP                  R^4      MVR3w  r4WAV&   K(  	  V# )zôParse label key-value pairs from CLI arguments.

Args:
    labels: List of label strings in KEY=VALUE format. If KEY only, then VALUE is set to empty string.

Returns:
    Dictionary mapping label keys to values, or None if no labels provided.
Nr’   r³   )r,   )rO   Ú
labels_mapÚ	label_varr•   r˜   s   &    r%   rf   rf   @  sH   € ÷ ÙØ!#€JÛˆ	Ø03°yÔ0@�Y—_‘_ S¨!Ô,ÀyÐRTÀo‰
ˆØ�3‹ñ ð Ðr'   c                ó”   € V ^8„  d   QhR\         \         \        \        ,          ,          ,          R\         \        ,          R\        /# )r   r¼   rÉ   r!   )rk   r"   r‚   )r$   s   "r%   r&   r&   R  s2   € ÷ ñ ”Dœœc¤C�i�Õ)ð ´D¼µIð Ä#ñ r'   c           
     óL  € \        . V OVN5!   Uu. uF  p\        R V 4       4      NK  	  pp\        \        P                  ! 4       P                  \        V4      ^,          4      p\        V4      \        V4      ,           V8”  d„   VP                  \        V4      4      pW5;;,          ^,          uu&   \        V4      \        V4      ,           V8:  g   Kp  V\        V4      ,
          \        V4      ,
          W5,          ,           W5&   K£  R\        V4      ,          P                  ! V!  p. pVP                  VP                  ! V!  4       TP                  VP                  ! V Uu. uF  pRV,          NK  	  up!  4       V  F~  p	\        W“4       U
Uu. uFE  w  r«\        \        V
4      4      V8”  d   \        V
4      RV^,
           R,           M
\        V
4      NKG  	  pp
pVP                  VP                  ! V!  4       K€  	  RP                  V4      # u upi u upi u upp
i )zy
Inspired by:

- stackoverflow.com/a/8356620/593036
- stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
c              3   óJ   "  € T F  p\        \        V4      4      x € K  	  R # 5ir  )r·   r"   )rZ   Úxs   & r%   r[   Ú_tabulate.<locals>.<genexpr>Y  s   é € Ð/©3 a”cœ#˜a›&—k�k«3ùs   ‚!#z{{:{}}} Ú-Nz...rU   )r¸   ÚmaxÚshutilÚget_terminal_sizeÚcolumnsr·   ÚsumÚindexr$   rÏ   r"   rl   )r¼   rÉ   ÚcolÚ
col_widthsÚterminal_widthÚcol_to_minimizeÚ
row_formatÚlinesÚwr»   r¥  Ú	col_widthÚrow_format_argss   &&           r%   r×   r×   R  sÂ  € ô <?Ð;NÀÐ;NÀgÔ;NÓOÑ;N°C”#Ñ/©3Ó/Ö/Ñ;N€JÐOÜœ×1Ò1Ó3×;Ñ;¼SÀ»\ÈBÕ=NÓO€NÜ
ˆg‹,œ˜Z›Õ
(¨>Ô
9Ø$×*Ñ*¬3¨z«?Ó;ˆØ×#¨Õ)Ó#Üˆw‹<œ#˜j›/Õ)¨^Ö;Ø*8¼3¸z»?Õ*JÌSÐQXË\Õ*YÐ\fÕ\wÕ*wˆJÓ'Øœs 7›|Õ+×3Ò3°ZÑ@€JØ€EØ	‡L�L�×"Ò" GÑ,Ô-Ø	‡L�L�×"Ò"±jÓ$A±j° S¨1§W W±jÑ$AÑBÔCÛˆô !$ CÔ 4ô
á 4‘�ô 03´3°q³6«{¸YÔ/FŒC�‹F�?�Y •]Ð# eÖ+ÌCÐPQËFÒRÙ 4ð 	ñ 
ð 	�‰�Z×&Ò&¨Ñ8Ö9ñ ð �9‰9�UÓÐùò# Pùò %Bùó
s   ‘HÅ&HÆAH rù   c                ó†   € V ^8„  d   QhR\         \        ,          R\        R\        \        ,          3,          R\        RR/# )r   ÚqueueÚfunc.Úkwargsr!   N)r   rù   r   r   r�   )r$   s   "r%   r&   r&   p  s<   € ÷ ñ ¤U¬1¥Xð ´X¸cÄ8ÌAÅ;Ð>NÕ5Oð ÔY]ð Ðbfñ r'   c                 óF   € V! R/ VB  F  pV P                  V4       K  	  R # )NrX   )Úput)r¸  r¹  rº  rg   s   &&& r%   Ú_write_generator_to_queuer½  p  s   € Ù‘.˜”.ˆØ�	‰	�&Öó !r'   c          	      óÌ   € V ^8„  d   QhR\         P                  P                  R\        R\        \
        ,          3,          R\        \        ,          R\        \
        ,          /# )r   rÔ   r¹  .rË   r!   )rÓ   rÔ   rÕ   r   r   rù   rk   r�   )r$   s   "r%   r&   r&   u  sR   € ÷ ñ Ü
×
Ñ
×
)Ñ
)ðä
�3œ¤�Ð#Õ
$ðô ”d•ð	ô
 Œa…[ñr'   c          	   #  ó®  "  € \        4       pV Uu. uF  q@P                  \        W1V34      NK  	  pp   VP                  RR7      x € K  u upi   \         dZ    \
        ;QJ d    R T 4       F  '       d   K   RM	  RM! R T 4       4      '       d   TP                  4       '       d    M K}   K€  i ; i  \         d     Mi ; i T Uu. uF  qfP                  RR7      NK  	  Mu upi  pR#   \        P                   d     R# i ; i   T Uu. uF  qfP                  RR7      NK  	  Mu upi  pi   \        P                   d     i i ; i; i5i)a#  
Takes a function that returns an iterable of items, and run it in parallel using threads to return the flattened iterable of items as they arrive.

This is inspired by those three `map()` variants, and is the mix of all three:

* `imap()`: like `map()` but returns an iterable instead of a list of results
* `imap_unordered()`: like `imap()` but the output is sorted by time of arrival
* `flatmap()`: like `map()` but given a function which returns a list, `flatmap()` returns the flattened list that is the concatenation of all the output lists
Tgš™™™™™©?)rA   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir  )Úready)rZ   Úasync_results   & r%   r[   Ú%iflatmap_unordered.<locals>.<genexpr>‹  s   é € ÐNÁ°×)Ñ)×+Ð+Ãùs   ‚FN)
r   Úapply_asyncr½  r“   r   ræ   ÚemptyÚKeyboardInterruptrÓ   ÚTimeoutError)rÔ   r¹  rË   r¸  rº  Úasync_resultsrÂ  s   &&$    r%   rÙ   rÙ   u  s0  é € ô “g€EÙfqÓrÑfqÐ\b×%Ñ%Ô&?À%ÈvÐAVÖWÑfq€MÐrðØðØ—i‘i¨�iÓ-Ô-ùò	 søô
 ô ß“3ÑNÁÓN—3—3’3ÑNÁÓN×NÒNÐSX×S^ÑS^×S`ÒS`Ùò TaÒNðûô ô Ùðúð	Ù@MÓNÁ°×Ñ dÐÖ+ÂùÖNøÜ×+Ñ+ô 	Úð	ûð	Ù@MÓNÁ°×Ñ dÐÖ+ÂùÕNøÜ×+Ñ+ô 	Ùð	ÿsß   ‚E‘ A±E´B8 ¶A Á
B8 ÁEÁB5Á'B5Á;B5ÂB5Â,B8 Â-D Â.B8 Â4B5Â5B8 Â8CÃD ÃCÃD Ã
C2 ÃC)Ã(C2 Ã0EÃ2DÄEÄ
DÄEÄEÄD7ÄD/Ä.D7Ä6EÄ7EÅEÅEÅEÅE)z3hf jobs run python:3.12 python -c 'print("Hello!")'z1hf jobs run --detach python:3.12 python script.pyz3hf jobs run -e FOO=foo python:3.12 python script.pyz;hf jobs run --secrets HF_TOKEN python:3.12 python script.pyz^hf jobs run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt python:3.12 python script.py)NNNNNNNNFNNN)zhf jobs logs <job_id>zhf jobs logs -f <job_id>zhf jobs logs --tail 20 <job_id>z#hf jobs logs -f --tail 100 <job_id>)FNNN)NNN)NN)NFNN)zhf jobs uv run my_script.pyz$hf jobs uv run --detach my_script.pyz1hf jobs uv run ml_training.py --flavor a10g-smallz+hf jobs uv run --with transformers train.pyzNhf jobs uv run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt script.py)NNNNNNNNNNFNNNNN)NNNNNNNNNNNNN)NNNNNNNNNNNNNNNNN)hÚ__doc__rÓ   Úmultiprocessing.poolr©  rÖ   Úcollections.abcr   r   r   r¸  r   r   Útypingr   r   r	   r€   Úhuggingface_hubr
   Úhuggingface_hub.errorsr   r   Úhuggingface_hub.utilsr   Ú$huggingface_hub.utils._cache_managerr   Úhuggingface_hub.utils._parsingr   Ú
_cli_utilsr   r   r   r   r   r   r   r   r   r   r   Ú_outputr   r   Ú
get_loggerÚ__name__Úloggerr/   rÛ   r"   r8  rE   r�   rS  rH   rk   rG   rI   r   rJ   rL   r‚   rK   rT  rU  rc  rd  rb  rQ  rR  rF   r~   rÃ   r†  Újobs_clir9   ry   r‹   rš   r¤   r¿   rã   r  r4  r;  rA  rJ  Úuv_appÚ	add_typerr\  Úscheduled_apprk  rz  r�  r‹  r�  r•  r™  Úscheduled_uv_appr�  rf   r×   rù   r½  rÙ   rX   r'   r%   Ú<module>rÜ     s8  ðñ0ód Û Û Û ß .Ý ß ß *Ñ *ã å 'ß ;Ý )Ý =Ý :÷÷ ÷ ñ ÷ -ð 
×	Ò	˜HÓ	%€õ.ð8  Ð ð ØØ	‡N‚NØ'ôðõ€ð Øˆ$…JØ	‡L‚LØ=ôðõ€ð Øˆ$…JØ	‡L‚LØrÙ˜kÓ*ôðõ€	ð Øˆ…I�ÕØ	‡L‚LØØØBôðõ€	ð Øˆ$…JØ	‡L‚LØeôðõ€
ð ØØ	‡L‚LØØØBôðõ€	ð Øˆ$…JØ	‡L‚LØeôðõ€ð Øˆ…I�ÕØ	‡L‚LØð Gôðõ€	ð Øˆ…I�ÕØ	‡L‚LØØ4ôðõ€ð Øˆ$…JØ	‡L‚LØØØDôðõ€	ð Øˆ4…KØ	‡L‚LØ0ôðõ€
ð Øˆ4…KØ	‡L‚LØGôðõ€ð ØØ	‡N‚NØfôðõ€ð ØØ	‡N‚NØ3ôðõ€	ð Øˆ…I�ÕØ	‡N‚NØ'ôðõ€ð Øˆ…IØ	‡N‚NØ"ôðõ€
ð ØØ	‡N‚NØ-ôðõ€ð Øˆ…I�ÕØ	‡N‚NØ.ôðõ€	ð ØØ	‡N‚NØAôðõÐ ñ Ð?Ô@€ð 
×ÑØ	Ø.°Ð5òð ó 
ö*ó
ð*ðZ 
×ÑØ
òð ó ö1Dóð1Dõhõ'õð8 
×Ñ�'Ð%=Ð$>ÐÓ?öJEó @ðJEðZ 
×Ñ�$ ,°Ð!@ÐÓAöcaó BðcaðL 
×Ñ�*Ð(:Ð';ÐÓ<ô]ó =ð]ð6 
×Ñ�)Ð'AÐ&BÐÓCö9ó Dð9ð< 
×Ñ�(Ð&?Ð%@ÐÓAö+ó Bð+ð* 
×ÑØàBØ)ðð ó ö,óð,ñ* 
ÐdÔ	e€Ø × Ñ �6 Ð Ô %ð ‡�Ø	Ø.°Ð5òð ó 
ö0ó
ð0ñf Ð#QÔR€Ø × Ñ �= {Ð Ô 3ð ×ÑØ	Ø.°Ð5ØNÐOð ó ö
'Yóð
'YðT ×Ñ�tÐ'=Ð&>ÐÓ?öKFó @ðKFð\ ×Ñ�yÐ,LÐ+MÐÓNöWó OðWð0 ×Ñ�xÐ+JÐ*KÐÓLö	=ó Mð	=ð ×Ñ�yÐ,LÐ+MÐÓNö
Qó Oð
Qð ×Ñ�xÐ+JÐ*KÐÓLö	=ó Mð	=ð ×ÑØàHØ/ðð ó ö6óð6ñ. !Ð&QÔRÐ Ø × Ñ Ð(¨tÐ Ô 4ð ×ÑØ	Ø.°Ð5à8ØFðð ó ö-Oóð-Oõfõ$ñ6 ˆCƒL€õ÷
r'   