
    RЦi              &       Z   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJr  SSKrSS	KJrJr  SS
KJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/  \"R`                  " \15      r2S\3S\\3   S\4\3\\3   4   4S jr5\ V s/ s H   o Rl                  S:w  d  M  U Rl                  PM"     sn r7Sr8\\3\Rr                  " SS94   r:\\\3   \Rv                  " SS94   r<\\\   \Rv                  " SS94   r=\\\>\3      \Rv                  " SSSS94   r?\\\>\3      \Rv                  " SSSS94   r@\\\>\3      \Rv                  " S S!S"S94   rA\\\3   \Rv                  " S#S$S94   rB\\\3   \Rv                  " S%S94   rC\\\3   \Rv                  " S&S94   rD\\E\Rv                  " S'S(S)S94   rF\\\3   \Rv                  " S*S94   rG\\\>\3      \Rv                  " S+S,S94   rH\\\3   \Rv                  " S-S.S/S94   rI\\\E   \Rv                  " S0S94   rJ\\\E   \Rv                  " S1S94   rK\\3\Rr                  " S2S94   rL\\3\Rr                  " S3S94   rM\\\>\3      \Rr                  " S4S94   rN\\>\3   \Rr                  " S5S94   rO\\3\Rr                  " S6S94   rP\\\>\3      \Rr                  " S7S94   rQ\\3\Rr                  " S8S94   rR\/" S9S9rS\SR                  S:S;S<0/ S=QS>9          SS?\:S@\OSA\?SB\@SC\ASD\BSE\CSF\=SG\DSH\FS\GSI\*SS4SJ jj5       rU\SR                  SK/ SLQSM9    SS\PSN\\E\Rv                  " SOSPSQS94   SR\\\V   \Rv                  " SSSTSUS94   S\GSI\*SS4SV jj5       rWSW\X\3\34   SX\>\4\3\3\34      S\E4SY jrYSZ\>\>\\3\V4         S[\>\3   S\\>\3   S]\\3   SS4
S^ jrZS_\VSS4S` jr[S\3Sa\\X\3\4      Sb\>\3   S\\4\E\3\>\>\\3\V4         4      4Sc jr\\SR                  SdSe/SM9   SSf\QS\GSI\*SS4Sg jj5       r]\SR                  ShSiSj/SM9       SSk\\E\Rv                  " SlSmSnS94   S\GSI\*So\\\>\3      \Rv                  " SOSpSqS94   Sr\\\3   \Rv                  " SsS94   St\)Su\\E\Rv                  " SvS<SwSx94   SS4Sy jj5       r^\SR                  SzS{/SM9SS| j5       r_\SR                  S}S~/SM9  SSf\\>\3   \Rr                  " SS94   S\GSI\*SS4S jj5       r`\SR                  SS/SM9  SS\PS\GSI\*SS4S jj5       ra\/" SS9rb\SR                  \bSS9  \bR                  S:S;S<0/ SQS>9              SS\MS\NS?\<SF\=SA\?SB\@SC\ASD\BSE\CSG\DSH\FS\GSI\*S\HS\ISS4 S jj5       rd\/" SS9re\SR                  \eSS9  \eR                  S:S;S<0S/S>9           SS\LS?\:S@\OS\JS\KSA\?SB\@SC\ASD\BSE\CSF\=SG\DS\GSI\*SS4S jj5       rf\eR                  ShS/SM9       SSk\\E\Rv                  " SlSmSS94   S\GSI\*So\\\>\3      \Rv                  " SOSpSqS94   Sr\\\3   \Rv                  " SsS94   St\)Su\\E\Rv                  " SvS<SwSx94   SS4S jj5       rg\eR                  S}S/SM9  SS\\>\3   \Rr                  " SS94   S\GSI\*SS4S jj5       rh\eR                  SS/SM9  SS\RS\GSI\*SS4S jj5       ri\eR                  SS/SM9  SS\RS\GSI\*SS4S jj5       rj\eR                  SS/SM9  SS\RS\GSI\*SS4S jj5       rk\/" SS9rl\eR                  \lSS9  \lR                  S:S;S<0SS/S>9               SS\LS\MS\NS\JS\KS?\<SF\=SA\?SB\@SC\ASD\BSE\CSG\DS\GSI\*S\HS\ISS4$S jj5       rmS\\>\3      S\\X\3\34      4S jrnSZ\>\>\\3\V4         S[\>\3   S\34S jroS\\3\34   4S jrp\" S5      rqS\\q   S\S\\q   4   S\XSS4S jrrS\R                  R                  S\S\\q   4   S\>\X   S\\q   4S jrugs  sn f )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] [--format table|json|TEMPLATE] [-q]

    # 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] [--format table|json] [-q]

    # 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)deque)asdict)fnmatch)Path)EmptyQueue)	AnnotatedAnyCallableDictIterableOptionalTypeVarUnion)SpaceHardware	get_token)CLIErrorHfHubHTTPError)logging)_format_size)load_dotenv   )OutputFormatQuietOptTokenOpt_format_cellapi_object_to_dict
get_hf_apiprint_list_outputtyper_factoryjob_id	namespacereturnc                    U (       d  [        S5      eU R                  S5      S:  a  [        SU  S35      eSU ;  a  X4$ U R                  SS5      u  p#U(       a  U(       d  [        SU  S35      eUb  X:w  a  [        SU SU S35      eX24$ )	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./r   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       W/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/huggingface_hub/cli/jobs.py_parse_namespace_from_job_idr,   d   s     011||C1UV\U]]_`aa
&  )/c1)=&mUV\U]]_`aa!A6ykAabuavvwx
 	
 --    z	zero-a10gg?zThe Docker image to use.)helpz.Use a custom Docker image with `uv` installed.ztFlavor for the hardware, as in HF Spaces. Run 'hf jobs hardware' to list available flavors. Defaults to `cpu-basic`.z-ez--envz/Set environment variables. E.g. --env ENV=valuez-sz	--secretszvSet secret environment variables. E.g. --secrets SECRET=value or `--secrets HF_TOKEN` to pass your Hugging Face token.z-lz--labelz3Set labels. E.g. --label KEY=VALUE or --label LABELz
--env-filez(Read in a file of environment variables.z/Read in a file of secret environment variables.zVMax 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--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)z3hf jobs run python:3.12 python -c 'print("Hello!")'z3hf jobs run -e FOO=foo python:3.12 python script.pyz;hf jobs run --secrets HF_TOKEN python:3.12 python script.py)context_settingsexamplesimagecommandenvsecretslabelenv_filesecrets_fileflavortimeoutdetachtokenc                 Z   0 nU(       aL  UR                  [        [        U5      R                  5       [        R
                  R                  5       S95        U=(       d    /  H8  nUR                  [        U[        R
                  R                  5       S95        M:     0 n[        5       nU(       a0  UR                  [        [        U5      R                  5       US95        U=(       d    /  H  nUR                  [        UUS95        M     [        US9nUR                  U UUU[        U5      UUU
S9n[        SUR                   35        [        SUR                   35        U	(       a  gUR                  UR                  UR                  R                   SS9 H  n[        U5        M     g)	z
Run a Job.environr=   )r3   r4   r5   r6   labelsr:   r;   r"   Job started with ID: 	View at: NTr!   r"   follow)updater   r   	read_textosr@   copy_get_extended_environr   run_job_parse_labels_mapprintidurlfetch_job_logsownername)r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r"   r=   env_map	env_valuesecrets_mapextended_environsecretapijoblogs                       r+   jobs_runr\   .  s^   0 )+G{4>#;#;#=rzzGXYZYBY	{9bjjoo6GHI  -/K,.;tL'9'C'C'EO_`a-R-;v7GHI   5
!C
++ '  	C 
!#&&
*+	IcggY
 !!399>>RV!Wc
 Xr-   logs)zhf jobs logs <job_id>zhf jobs logs -f <job_id>zhf jobs logs --tail 20 <job_id>)r2   rF   z-fz--followzqFollow log output (stream until the job completes). Without this flag, only currently available logs are printed.tailz-nz--tailz1Number of lines to show from the end of the logs.c                    [        X5      u  pU(       a  Ub  [        S5      e[        US9n UR                  XUS9nUb	  [	        XbS9nU H  n[        U5        M     g! [         a]  nUR                  b  UR                  R                  OSn	U	S:X  a  [        S5      UeU	S:X  a  [        S	5      Ue[        S
U 35      UeSnAff = f)zFetch 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.
NzcCannot use --follow and --tail together. Use --follow to stream logs or --tail to show recent logs.rA   rE   )maxlen  '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   r   rQ   r   rN   r   responsestatus_code)
r!   rF   r^   r"   r=   rY   r]   r[   estatuss
             r+   	jobs_logsri   i  s    : 5VGF$"q
 	
 5
!CD!!V!T+DC#J  D+,::+A''tS=DE1Ls]YZ`aa7s;<!CDs   0A 
C(AC  Cjob_propertiesfiltersc                     U Hj  u  p#nU R                  U5      nUc
  US:X  a  M"    g[        UR                  5       UR                  5       5      nUS:X  a  U(       a  US:X  d  Ma  U(       d  Mj    g   g)z5Check if scheduled job matches all specified filters.!=F=T)getr   lower)rj   rk   keyop_strpatternvaluematchs          r+   _matches_filtersrv     sf     'W""3'=~w}}7cM%Vt^ !( r-   rowsheadersaliasesfmtc           	          U(       aW  UnU  HN  nUn[        U5       H/  u  pxSU S3n	X;   d  M  UR                  U	[        XW   5      5      nM1     [        U5        MP     g[        [	        XS95        g)z,Print output according to the chosen format.z{{.z}})rx   N)	enumeratereplacestrrN   	_tabulate)
rw   rx   ry   rz   templaterowlineifieldplaceholders
             r+   _print_outputr     sn     CD%g. %eWD1&<<S[AD / $K  	i./r-   nc                 B    SnSn[        U 5       H  n[        XS9  M     g )Nz[1Az[2K)end)rangerN   )r   LINE_UP
LINE_CLEARr   s       r+   _clear_liner     s"    GJ1Xg& r-   metrics_streamtable_headersc              #     #    U GHU  nU US    S3[        US   S-  S5      [        SUS   -  US   -  S	5       S3[        US   5       S
[        US   5       S3[        US   5       S[        US   5       S3/nUS   (       a  [        US   [        5      (       a  U/S/[	        U5      -  /[	        US   5      S-
  -  -   n[        U[        US   5      5       HR  u  pFUS   U   nUUS    S3[        SUS   -  US   -  S	5       S3[        US   5       S
[        US   5       S3/-  nMT     O!US/[	        U5      [	        U5      -
  -  -  nU/nSX4v   GMX     SU / 4v   g 7f)Ncpu_usage_pct%cpu_millicoresg     @@r   d   memory_used_bytesmemory_total_bytes   zB / Brx_bpszbps / tx_bpsbpsgpus utilizationN/AFT)roundr   
isinstancedictlenzipsorted)r!   r   r   metricsr   rw   gpu_idgpus           r+   _get_jobs_stats_rowsr     s     "'(*'*+f4a8S7#677'BV:WWYZ[\\]^G$789:$|GThLi?j>kklmGH-./vl78CT6U5VVYZ
 6?z'&/4@@5RD3s8O,GFO0Dq0HIID"4)@Afof-=)*!,S3':#;;cBV>WWYZ[\\]^#C(;$<=>d<PSThPiCjBkklm   B E7c-03s8;<<C5DV!!+ ", 
s   E%E'statszhf jobs stats <job_id>job_idsc           
         U b+  / nU  H!  n[        XA5      u  pAUR                  U5        M#     Un [        US9nUc  UR                  5       S   nU cX  UR	                  US9 Vs/ s H>  nUR
                  (       a  UR
                  R                  OSS;   d  M2  UR                  PM@     n n[        U 5      S:X  a  [        S5        g/ S	Qn/ S
Qn [        R                  R                  [        U 5      5       n	0 n
U  H1  nU/nXSS  Vs/ s H  nSU;   d  SU;   a  SOSPM     sn-  nU/X'   M3     [        R                  " 5       nU
 VVs/ s H  oJU     H  oPM     M     nnn[        XUS5        U  Vs/ s H  nUUR                  XAS9US.PM     nn[!        U	["        US9 H  u  nnnU(       a  U
R%                  US5        OUX'   [        R                  " 5       nUU-
  [&        :  d  MI  [)        S[        U5      -   5        U
 VVs/ s H  oJU     H  oPM     M     nnn[        XUS5        UnM     SSS5        gs  snf s  snf s  snnf s  snf s  snnf ! , (       d  f       g= f! [*         a]  nUR,                  b  UR,                  R.                  OSnUS:X  a  [1        S5      UeUS:X  a  [1        S5      Ue[1        SU 35      UeSnAff = f)z7Fetch the resource usage statistics and metrics of JobsNrA   rS   r"   UNKNOWNRUNNINGUPDATINGr   zNo running jobs found)	JOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGE)	rO   r   r   memory_used_bytes_pct!memory_used_bytes_and_total_bytesrx_bps_and_tx_bpsgpu_utilizationgpu_memory_used_bytes_pct%gpu_memory_used_bytes_and_total_bytesr   r%   USAGEz-- / --z--r!   r"   )r!   r   r   )kwargs_listr   ra   rb   rc   rd   zFailed to fetch job stats: )r,   appendr   whoami	list_jobsrh   stagerO   r   rN   multiprocessingpool
ThreadPooltimer   fetch_job_metricsiflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALr   r   re   rf   r   )r   r"   r=   
parsed_idsr!   rY   rZ   r   headers_aliasesr   rows_per_job_idr   headerlast_update_time
total_rowsr   donerw   nowrg   rh   s                        r+   
jobs_statsr     s    
F <V OFf%  
5
!CJJL(	 }}y}9
9$'JJ

  IBYY CFF9 	 

 7|q%&
M
O%E!!,,S\:dFHO!.4XpqprbstbsX^cVmw&7H	tSbstt+.%' "  $yy{,;_O&W]G^#G^#OJ_*_dK & &F	 %&)&;&;6&;&_%2
 &   '9?Sal&m"fd#''5.2O+iik))-FFC
O 344C!gO&_eOf#Of#OJ!g!*_dS'*$ 'n% ;:?
F u `  "h5 ;::  E+,::+A''tS=DE1Ls]YZ`aa8<=1DEs   "1H=H=(I) 5II
!(I	I I4IAI+II
I4I) I
I&"I) &I) )
K3AKKpsz
hf jobs pszhf jobs ps -aallz-az--allz*Show all Jobs (default shows just running)filterz--filterz>Filter output based on conditions provided (format: key=value)formatzKOutput format: 'table' (default), 'json', or a Go template (e.g. '{{.id}}')quiet	json_flagz--jsonz)Output as JSON (alias for --format json).)hiddenr.   c                    U(       a  Sn[        US9nUR                  US9n/ n	/ n
U=(       d    /  GHk  nUR                  S5      (       d  UR                  S5      (       a  UR                  S5      (       a+  U[        S5      S nSU;   a  [	        SU S	35        Mk  US
SpnOLU[        S5      S nSU;   a  UR                  SS5      u  pOUSpUR                  S5      (       a  S
nUSS nOSnU
R                  UR                  5       XR                  5       45        M  SU;   ah  UR                  SS5      u  nnUR                  S5      (       a  S
nUSS nOSnU	R                  UR                  5       UUR                  5       45        GM\  [	        SU S35        GMn     / nU H  nUR                  (       a  UR                  R                  OSnU (       d  US;  a  M;  UR                  =(       d    SnUR                  =(       d    / nU(       a  SR                  U5      OSnUR                  UUR                  5       US.n[        UU	5      (       d  M  [        UR                   =(       d    0 U
5      (       d  M  UR                  U5        M     U(       dj  U(       dQ  US:w  aK  U	(       a3  SSR                  U	 VVVs/ s H  u  nnnU U U 3PM     snnn5       3OSn[	        SU 35        gUS:X  a  [	        S5        g/ SQn/ SQnU Vs/ s H  n[#        U5      PM     nnS[$        [&        [(        4   S[*        [&           4S jn U(       a,  US ;  a&  [-        U V!s/ s H  n!U " U!5      PM     sn!UUU5        gUS:X  a  [.        R0                  O[.        R2                  n"[5        UU"US!UU S"9  gs  snnnf s  snf s  sn!f )#z
List Jobs.jsonrA   r   zlabel!=zlabel=Nrn   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.rm   *r   !)Warning: Ignoring invalid filter format ''. Use key=value format.r   r   r    )rO   r3   rh   r4    matching filters: , r   zNo jobs found[])r   IMAGE/SPACECOMMANDCREATEDSTATUS)rO   r3   r4   createdrh   itemr#   c           
         U R                  S0 5      nU R                  S5      =(       d    / nU(       a  SR                  U5      OSn[        U R                  SS5      5      [        U R                  S5      =(       d    S5      [        U5      U R                  S5      (       a  U S   S S	 R	                  S
S5      OS[        UR                  SS5      5      /$ )Nrh   r4   r   r   rO   r   docker_image
created_at   Tr   r   )ro   joinr~   r   r}   )r   rh   cmdcommand_strs       r+   row_fnjobs_ps.<locals>.row_fn  s    (B'hhy!'R'*chhsmr"#.1:U;%9=,9O9ODs#++C5UZ

7I./
 	
r-   tabler   rO   itemsr   r   id_keyrx   r   )r   r   
startswithr   rN   r(   endswithr   rp   rh   r   r   r4   r   rO   rv   rB   r   r   r~   r
   listr   r   r   r   r   )#r   r"   r=   r   r   r   r   rY   jobsrk   labels_filtersf
label_part	label_keyoplabel_valuerq   rt   filtered_jobsrZ   rh   image_or_spacer   r   propskovfilters_msgrx   ry   r   r   r   output_formats#                                      r+   jobs_psr
  8  s   < 
5
!C==9=-D*,G13N\r\<<	""all8&<&<||I&&s9~/0
*$PQ[P\\uv -7s{	{s8}/
*$-7-=-=c1-E*I{-7{%%c**B )#2IB!!9??#4b:K:K:M"NOAXaJC||C  #2hNNCIIKU[[];<=aS@XYZC H M%(ZZ!!Yv%<<))2UkkR'*chhsmvv&,,.]hiw//

 0b.AAS!  6)fm/		W^:_W^GAqRSaSA3<W^:_0`/absuKM+/0 	 v$KGG=G0=>$E>

T#s(^ 

S	 

 & 116vd|6&Q-3v-=))<CUCU 	
7 ;` ?  7s   >N2N9 N>hardwarezhf jobs hardwarec            
      d   [        5       n U R                  5       n/ SQn/ SQn/ nU H  nSnUR                  (       aG  UR                  R                   SUR                  R                   SUR                  R
                   S3nUR                  b  SUR                  S	 3OSnUR                  b  SUR                  S
-  S 3OSnUR                  UR                  UR                  =(       d    SUR                  UR                  XgU/5        M     U(       d  [        S5        g[        XBUS5        g)z(List available hardware options for Jobs)NAMEzPRETTY NAMECPURAMACCELERATORzCOST/MINz	COST/HOUR)rS   
prettyNamecpuramacceleratorcostMincostHourr   zx z ()N$z.4f<   z.2fzNo hardware options found)r   list_jobs_hardwarer  quantitymodelvramunit_cost_usdr   rS   pretty_namer  r  rN   r   )	rY   hardware_listr   r   rw   hwaccelerator_infocost_min	cost_hours	            r+   jobs_hardwarer%    s    ,C**,MaM`O(*D >>"$.."9"9!:"R^^=Q=Q<RRTUWUcUcUhUhTiijk131A1A1MQr'',-SX797G7G7Sa((2-c23Y^	RWWbnn5rvvrvvGWclmn  )*$=r-   inspectzhf jobs inspect <job_id>z*Job IDs to inspect (or 'namespace/job_id')c           
         / nU  H!  n[        XA5      u  pAUR                  U5        M#     Un [        US9n U  Vs/ s H  oER                  XAS9PM     nn[	        [
        R                  " U Vs/ s H  n[        U5      PM     snS[        S95        gs  snf s  snf ! [         a]  nUR                  b  UR                  R                  OSn	U	S:X  a  [        S5      UeU	S:X  a  [        S	5      Ue[        S
U 35      UeSnAff = f)z0Display detailed information on one or more JobsrA   r      indentdefaultNra   rb   rc   rd   zFailed to inspect job: )r,   r   r   inspect_jobrN   r   dumpsr   r~   r   re   rf   r   )
r   r"   r=   r   r!   rY   r   rZ   rg   rh   s
             r+   jobs_inspectr.    s    J8K&!  G
5
!C
ARYZRYvCRYZdjj6#&+6q#NO [6 A+,::+A''tS=DE1Ls]YZ`aa4QC89q@As5   B BB -BB 
B 
D&AC>>Dcancelzhf jobs cancel <job_id>c                 $   [        X5      u  p[        US9n UR                  XS9  g! [         a]  nUR                  b  UR                  R
                  OSnUS:X  a  [        S5      UeUS:X  a  [        S5      Ue[        SU 35      UeSnAff = f)	zCancel a JobrA   r   Nra   rb   rc   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r,   r   
cancel_jobr   re   rf   r   )r!   r"   r=   rY   rg   rh   s         r+   jobs_cancelr2    s     5VGF
5
!C	@f: @+,::+A''tS=DE1Ls][\bcc3A378a?@s   ( 
BAB

BzFRun UV scripts (Python with inline dependencies) on HF infrastructure.uv)rS   )zhf jobs uv run my_script.pyz1hf jobs uv run ml_training.py --flavor a10g-smallz+hf jobs uv run --with transformers train.pyscriptscript_argswith_pythonc                 r   0 nU(       aL  UR                  [        [        U5      R                  5       [        R
                  R                  5       S95        U=(       d    /  H8  nUR                  [        U[        R
                  R                  5       S95        M:     0 n[        5       nU(       a0  UR                  [        [        U5      R                  5       US95        U=(       d    /  H  nUR                  [        UUS95        M     [        US9nUR                  U U=(       d    / UUUUU[        U5      UU	US9n[        SUR                   35        [        SUR                   35        U
(       a  gUR                  UR                  UR                  R                   SS9 H  n[        U5        M     g)	8Run a UV script (local file or URL) on HF infrastructurer?   rA   )r4  r5  dependenciesr7  r3   r5   r6   rB   r:   r;   r"   rC   rD   NTrE   )rG   r   r   rH   rI   r@   rJ   rK   r   
run_uv_jobrM   rN   rO   rP   rQ   rR   rS   )r4  r5  r3   r:   r5   r6   r7   r8   r9   r;   r<   r"   r=   r6  r7  rT   rU   rV   rW   rX   rY   rZ   r[   s                          r+   jobs_uv_runr<    sj   6 )+G{4>#;#;#=rzzGXYZYBY	{9bjjoo6GHI ,.K,.;tL'9'C'C'EO_`a-R-;v7GHI   5
!C
..%2 '  C 
!#&&
*+	IcggY
 !!399>>RV!Wc
 Xr-   z,Create and manage scheduled Jobs on the Hub.	scheduledz>hf jobs scheduled run "0 0 * * *" python:3.12 python script.pyschedulesuspendconcurrencyc                    0 nU(       aL  UR                  [        [        U5      R                  5       [        R
                  R                  5       S95        U=(       d    /  H8  nUR                  [        U[        R
                  R                  5       S95        M:     0 n[        5       nU	(       a0  UR                  [        [        U	5      R                  5       US95        U=(       d    /  H  nUR                  [        UUS95        M     [        US9nUR                  UUU UUUU[        U5      U
UUS9n[        SUR                   35        g)zSchedule a Job.r?   rA   )r3   r4   r>  r?  r@  r5   r6   rB   r:   r;   r"   Scheduled Job created with ID: N)rG   r   r   rH   rI   r@   rJ   rK   r   create_scheduled_jobrM   rN   rO   )r>  r3   r4   r?  r@  r5   r6   r7   r8   r9   r:   r;   r"   r=   rT   rU   rV   rW   rX   rY   scheduled_jobs                        r+   scheduled_runrE  K  s    , )+G{4>#;#;#=rzzGXYZYBY	{9bjjoo6GHI ,.K,.;tL'9'C'C'EO_`a-R-;v7GHI   5
!C,, ' - M 
+M,<,<+=
>?r-   zhf jobs scheduled psz1Show all scheduled Jobs (default hides suspended)c                 P   U(       a  Sn[        US9nUR                  US9n/ n	U=(       d    /  H}  n
SU
;   ae  U
R                  SS5      u  pUR                  S5      (       a  SnUSS	 nOSnU	R	                  UR                  5       XR                  5       45        Mn  [        S
U
 S35        M     / nU H  nUR                  =(       d    SnU (       d	  U(       a  M(  UR                  R                  =(       d    SnUR                  R                  =(       d    / nU(       a  SR                  U5      OSnUR                  U[        U5      US.n[        UU	5      (       d  M  UR	                  U5        M     U(       dj  U(       dQ  US:w  aK  U	(       a3  SSR                  U	 VVVs/ s H  u  nnnU U U 3PM     snnn5       3OSn[        SU 35        gUS:X  a  [        S5        g/ SQn/ SQnU Vs/ s H  n[        U5      PM     nnS[         [        ["        4   S[$        [           4S jnU(       a,  US;  a&  ['        U Vs/ s H  nU" U5      PM     snUUU5        gUS:X  a  [(        R*                  O[(        R,                  n[/        UUUSUUS9  gs  snnnf s  snf s  snf )zList scheduled Jobsr   rA   r   rn   r   r   rm   Nr   r   r   Fr   r   )rO   r3   r?  r4   r   r   r   zNo scheduled jobs foundr   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPEND)rO   r>  r3   r4   lastnextr?  r   r#   c                    U R                  S0 5      nU R                  S0 5      nUR                  S5      nUR                  S5      =(       d    / nSnU(       a.  UR                  S5      (       a  US   S S R                  SS	5      nSnUR                  S
5      (       a  US
   S S R                  SS	5      nU(       a  S	R                  U5      OSn[        U R                  SS5      5      [        U R                  S5      =(       d    S5      [	        UR                  S5      =(       d    S5      [	        U5      UU[        U R                  SS5      5      /$ )Njob_specrh   last_jobr4   r   atr   r   r   next_job_run_atrO   r   r>  r   r?  F)ro   r}   r   r~   r   )r   rM  rh   rN  r   last_job_atnext_runr   s           r+   r   scheduled_ps.<locals>.row_fn  s%   88J+(B'::j)ll9%+T**"4."-55c3?K::'((/0"5==c3GH'*chhsmr"#$-.n5>?%E*+
 	
r-   r   rO   r   )r   list_scheduled_jobsr(   r   r   rp   rN   r?  rM  r   r4   r   rO   r~   rv   r   r   r
   r   r   r   r   r   r   ) r   r"   r=   r   r   r   r   rY   scheduled_jobsrk   r   rq   rt   r   r  rD  r?  r  r   r   r  r  r  r  r  rx   ry   sjr   r   r   r	  s                                    r+   scheduled_psrW  ~  sw   < 
5
!C,,y,AN*,G\r\!8aJC||C  #2hNNCIIK[[];<=aS@XYZ  M'''05w&//<<E$$,,2'*chhsm$''.SQX\fqrw//]+ ( 6)fm/		W^:_W^GAqRSaSA3<W^:_0`/absuK+K=9: 	 v$K]GOG.;<m#mE<
T#s(^ 
S	 
. & 116vd|6&Q-3v-=))<CUCU 	
K ;` =4 7s   #J3JJ#zhf jobs scheduled inspect <id>scheduled_job_idsz>Scheduled Job IDs to inspect (or 'namespace/scheduled_job_id')c           
      8   / nU  H!  n[        XA5      u  pAUR                  U5        M#     Un [        US9nU  Vs/ s H  nUR                  XaS9PM     nn[	        [
        R                  " U Vs/ s H  n[        U5      PM     snS[        S95        gs  snf s  snf )z:Display detailed information on one or more scheduled JobsrA   scheduled_job_idr"   r(  r)  N)	r,   r   r   inspect_scheduled_jobrN   r   r-  r   r~   )	rX  r"   r=   r   r!   rY   r[  rU  rD  s	            r+   scheduled_inspectr]    s     J#8K&! $ #
5
!C !2 1 	!!3C!Y 1   
$**Pf]+PYZdg
hi	 Qs   B-Bdeletezhf jobs scheduled delete <id>r[  c                 N    [        X5      u  p[        US9nUR                  XS9  g)zDelete a scheduled Job.rA   rZ  N)r,   r   delete_scheduled_jobr[  r"   r=   rY   s       r+   scheduled_deleterb    /     #??O"[
5
!C.>Tr-   zhf jobs scheduled suspend <id>c                 N    [        X5      u  p[        US9nUR                  XS9  g)z Suspend (pause) a scheduled Job.rA   rZ  N)r,   r   suspend_scheduled_jobra  s       r+   scheduled_suspendrf    s/     #??O"[
5
!C/?Ur-   resumezhf jobs scheduled resume <id>c                 N    [        X5      u  p[        US9nUR                  XS9  g)z!Resume (unpause) a scheduled Job.rA   rZ  N)r,   r   resume_scheduled_jobra  s       r+   scheduled_resumerj    rc  r-   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                    0 nU
(       aL  UR                  [        [        U
5      R                  5       [        R
                  R                  5       S95        U=(       d    /  H8  nUR                  [        U[        R
                  R                  5       S95        M:     0 n[        5       nU(       a0  UR                  [        [        U5      R                  5       US95        U=(       d    /  H  nUR                  [        UUS95        M     [        US9nUR                  UU=(       d    / U UUUUUUU[        U	5      UUUS9n[        SUR                   35        g)r9  r?   rA   )r4  r5  r>  r?  r@  r:  r7  r3   r5   r6   rB   r:   r;   r"   rB  N)rG   r   r   rH   rI   r@   rJ   rK   r   create_scheduled_uv_jobrM   rN   rO   )r>  r4  r5  r?  r@  r3   r:   r5   r6   r7   r8   r9   r;   r"   r=   r6  r7  rT   rU   rV   rW   rX   rY   rZ   s                           r+   scheduled_uv_runrm  /  s+   8 )+G{4>#;#;#=rzzGXYZYBY	{9bjjoo6GHI ,.K,.;tL'9'C'C'EO_`a-R-;v7GHI   5
!C

%
%%2 ' & C  
+CFF8
45r-   rB   c                 p    U (       d  g0 nU  H%  nSU;   a  UR                  SS5      OUS4u  p4XAU'   M'     U$ )zParse 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.
Nrn   r   r   )r(   )rB   
labels_map	label_varrq   rt   s        r+   rM   rM   n  sH     !#J	03y0@Y__S!,yRTo
3  r-   c           
         [        / U QUP76  Vs/ s H  n[        S U 5       5      PM     nn[        [        R                  " 5       R                  [        U5      S-  5      n[        U5      [        U5      -   U:  a  UR                  [        U5      5      nX5==   S-  ss'   [        U5      [        U5      -   U::  a!  U[        U5      -
  [        U5      -
  X5   -   X5'   [        U5      [        U5      -   U:  a  M  S[        U5      -  R                  " U6 n/ nUR                  UR                  " U6 5        UR                  UR                  " U Vs/ s H  nSU-  PM
     sn6 5        U  Hu  n	[        X5       V
Vs/ s H<  u  p[        [        U
5      5      U:  a  [        U
5      SUS-
   S-   O
[        U
5      PM>     nn
nUR                  UR                  " U6 5        Mw     S	R                  U5      $ s  snf s  snf s  snn
f )
zy
Inspired by:

- stackoverflow.com/a/8356620/593036
- stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
c              3   J   #    U  H  n[        [        U5      5      v   M     g 7fN)r   r~   ).0xs     r+   	<genexpr>_tabulate.<locals>.<genexpr>  s     /3ac#a&kk3s   !#   r   z{{:{}}} -N   z...
)r   maxshutilget_terminal_sizecolumnsr   sumindexr   r   r~   r   )rw   rx   col
col_widthsterminal_widthcol_to_minimize
row_formatlineswr   ru  	col_widthrow_format_argss                r+   r   r     s    <?;N;Ng;NO;NC#/3//;NJO113;;S\B=NON
g,Z
(>
9$**3z?;#)#w<#j/)^;*83z?*JSQX\*Y\f\w*wJ'	 g,Z
(>
9
 s7|+33Z@JE	LL""G,-	LL""j$AjS1Wj$ABC !$C 4
 4 033q6{Y/FCF?Y]#e+CPQFR 4 	 
 	Z&&89  99U# P %B
s   G6G;=AH c                  d    [         R                  R                  5       n [        5       =nb  XS'   U $ )NHF_TOKEN)rI   r@   rJ   r   )rW   r=   s     r+   rK   rK     s.    zz()',$r-   r   queuefunc.kwargsc                 D    U" S0 UD6 H  nU R                  U5        M     g )N )put)r  r  r  results       r+   _write_generator_to_queuer    s    ..		& !r-   r   r   c          	   #   F  #    [        5       nU Vs/ s H  o@R                  [        X1U45      PM     nn   UR                  SS9v   M  s  snf ! [         a1    [        S U 5       5      (       a  UR                  5       (       a   O NAf = f! [         a     Of = f U Vs/ s H  ofR                  SS9PM     Os  snf   ng! [        R                   a     gf = f!  U Vs/ s H  ofR                  SS9PM     Os  snf   nf ! [        R                   a     f f = f= f7f)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
g?)r;   c              3   @   #    U  H  oR                  5       v   M     g 7frs  )ready)rt  async_results     r+   rv  %iflatmap_unordered.<locals>.<genexpr>  s     N))++s   N)
r   apply_asyncr  ro   r   r   emptyKeyboardInterruptr   TimeoutError)r   r  r   r  r  async_resultsr  s          r+   r   r     s     gEfqrfq\b%%&?%vAVWfqMriii--  s
  NNNNSXS^S^S`S`  	@MNd+N++ 			@MNd+N++ 		s   D!!A
D!B A B 
D!6B
B C B 	B

B 
BC BC C "B;:C D!CD!CD!DD#C<;DDDDDDD!)
NNNNNNNFNN)FNNN)NNN)FNNNNFF)r#   N)NN)NNNNNNNNNFNNNN)NNNNNNNNNNN)NNNNNNNNNNNNNNN)v__doc__r   r   multiprocessing.poolrI   r}  r   collectionsr   dataclassesr   r   pathlibr   r  r   r   typingr	   r
   r   r   r   r   r   r   typerhuggingface_hubr   r   huggingface_hub.errorsr   r   huggingface_hub.utilsr   $huggingface_hub.utils._cache_managerr   huggingface_hub.utils._dotenvr   
_cli_utilsr   r   r   r   r   r   r   r    
get_logger__name__loggerr~   tupler,   rt   SUGGESTED_FLAVORSr   ArgumentImageArgOptionImageOpt	FlavorOptr   EnvOpt
SecretsOpt	LabelsOpt
EnvFileOptSecretsFileOpt
TimeoutOptbool	DetachOptNamespaceOptWithOpt	PythonOpt
SuspendOptConcurrencyOptScheduleArg	ScriptArgScriptArgsArg
CommandArgJobIdArg	JobIdsArgScheduledJobIdArgjobs_clir4   r\   intri   r   rv   r   r   r   r   r
  r%  r.  r2  uv_app	add_typerr<  scheduled_apprE  rW  r]  rb  rf  rj  scheduled_uv_apprm  rM   r   rK   r   r  r   r   r   )r   s   0r+   <module>r     s  0d    	        U U U  4 ; ) = 5	 	 	 
		H	%. .# .5QTV^_bVcQcKd .8 -:WMDZZ;=VZTZZMW   	NN' SM	LL= ]	LL D	 
T#Y	LL>
 T#Y	LL F
 T#Y	LLB	 SM	LL7
 SM	LL> SM	LLe
 	LLB	 SM	LLe T#Y	LL4 SM	LLD	 TN	LL0
 TN	LLG 	NNf 	NN3	 T#Y	NN' I	NN"
 	NN- T#Y	NN.	 	NNA  ?@ 
	.5   #'"/// 
/ 	/
 / / !/ / / / / / 
//d 

m   	 	"'.D.D E	
	.D D	
	.D$ %.D& '.D( 
).D.DbT#s(^ d5cSVCW>X ]a 0
tE#s(O$
%004S	0DHI0T\]`Ta0	0&'3 '4 '!)$sCx.!9JNs)eD#tDsCx$9::;<8 
'%=$>?"SESESE SE 
	SE @SEl 
$,!@A 	" 	 	 	5}
	=	
	
}
 }
 }
 cQ	
	}
& gh	j'}
. /}
0 ell8D7bcc1}
6 
7}
 B}
@ 
*(:';<> =>, 
)'A&BC #AS	=	
	A A A 
A DA< 
(&?%@A #@@@ @ 
	@ B@( 
d	e   6  % 	.5   "&#'"333 3 	3
 
3 3 3 3 !3 3 3 3 3 3 3  
!33l #QR   ={  3 	.5NO   "&#'"+@+@+@ +@ 	+@
  +@ 
+@ +@ +@ +@ !+@ +@ +@ +@ +@ 
+@
+@\ t'=&>? 	" 	 	 	5l
	D	
	
l
 l
 l
 cQ	
	l
& gh	j'l
. /l
0 ell8D7bcc1l
6 
7l
 @l
^ y,L+MN #j S	Q	
	j j j 
j Oj0 x+J*KL #U'UU U 
	U MU y,L+MN #V'VV V 
	V OV x+J*KL #U'UU U 
	U MU !&QR    (t  4 	.58F   "&"&#'"#161616 16 	16
  16 16 16 
16 16 16 16 !16 16 16 16  !16" #16$ 
%1616nhtCy1 htCH~6N $DeCHo./ $s)  6tCH~  CLU1X Xc8A;>N5O Y] bf 




)
)
3#
$ d	
 a[U! Xs   5`(`(