
    Wi              &          d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlZddlmZmZ dd	lmZmZ dd
lmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'  ejP                  e)      Z*eD  cg c]  } | jV                  dk7  s| jV                    c} Z,dZ-ee. ej^                  d      f   Z0eee.    ejb                  d      f   Z2eee    ejb                  d      f   Z3eee4e.       ejb                  ddd      f   Z5eee4e.       ejb                  ddd      f   Z6eee4e.       ejb                  ddd      f   Z7eee.    ejb                  dd      f   Z8eee.    ejb                  d       f   Z9eee.    ejb                  d!      f   Z:ee; ejb                  d"d#d$      f   Z<eee.    ejb                  d%      f   Z=eee4e.       ejb                  d&d'      f   Z>eee.    ejb                  d(d)d*      f   Z?eee;    ejb                  d+      f   Z@eee;    ejb                  d,      f   ZAee. ej^                  d-      f   ZBee. ej^                  d.      f   ZCeee4e.       ej^                  d/      f   ZDee4e.    ej^                  d0      f   ZEee. ej^                  d1      f   ZFeee4e.       ej^                  d2      f   ZGee. ej^                  d3      f   ZH e'd4      ZIeIj                  d5d6d7ig d89      	 	 	 	 	 	 	 	 	 	 dd:e0d;eEd<e5d=e6d>e7d?e8d@e9dAe3dBe:dCe<dDe=dEe%dFdfdG       ZKeIj                  dHdIgJ      	 	 ddKeFdDe=dEe%dFdfdL       ZLdMeMe.e.f   dNe4eNe.e.e.f      dFe;fdOZOdPe4e4ee.ePf         dQe4e.   dRe4e.   dSee.   dFdf
dTZQdUePdFdfdVZRdKe.dWeeMe.ef      dXe4e.   dFeeNe;e.e4e4ee.ePf         f      fdYZSeIj                  dZd[gJ      	 	 	 dd\eGdDe=dEe%dFdfd]       ZTeIj                  d^d_d`gJ      	 	 	 	 	 ddaee; ejb                  dbdcdd      f   dDe=dEe%deeee4e.       ejb                  dfdgdh      f   dieee.    ejb                  dj      f   dFdfdk       ZUeIj                  dldmgJ      ddn       ZVeIj                  dodpgJ      	 	 dd\ee4e.    ej^                  dq      f   dDe=dEe%dFdfdr       ZWeIj                  dsdtgJ      	 	 ddKeFdDe=dEe%dFdfdu       ZX e'dv      ZYeIj                  eYdwx       eYj                  d5d6d7ig dy9      	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddzeCd{eDd:e2dAe3d<e5d=e6d>e7d?e8d@e9dBe:dCe<dDe=dEe%d|e>d}e?dFdf d~       Z[ e'd      Z\eIj                  e\dx       e\j                  d5d6d7idg9      	 	 	 	 	 	 	 	 	 	 	 ddeBd:e0d;eEde@deAd<e5d=e6d>e7d?e8d@e9dAe3dBe:dDe=dEe%dFdfd       Z]e\j                  d^dgJ      	 	 	 	 	 ddaee; ejb                  dbdcd      f   dDe=dEe%deeee4e.       ejb                  dfdgdh      f   dieee.    ejb                  ddj      f   dFdfd       Z^e\j                  dodgJ      	 	 ddee4e.    ej^                  d      f   dDe=dEe%dFdfd       Z_e\j                  ddgJ      	 	 ddeHdDe=dEe%dFdfd       Z`e\j                  ddgJ      	 	 ddeHdDe=dEe%dFdfd       Zae\j                  ddgJ      	 	 ddeHdDe=dEe%dFdfd       Zb e'd      Zce\j                  ecdwx       ecj                  d5d6d7iddg9      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeBdzeCd{eDde@deAd:e2dAe3d<e5d=e6d>e7d?e8d@e9dBe:dDe=dEe%d|e>d}e?dFdf$d       Zddee4e.      dFeeMe.e.f      fdZedPe4e4ee.ePf         dQe4e.   dFe.fdZfdFee.e.f   fdZg ed      Zhdeeh   dedeeh   f   deMdFdfdZidej                  j                  dedeeh   f   de4eM   dFeeh   fdZlyc c} w )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 TEMPLATE]

    # Stream logs from a job
    hf jobs logs <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 TEMPLATE]

    # 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)asdict)fnmatch)Path)EmptyQueue)	AnnotatedAnyCallableDictIterableOptionalTypeVarUnion)SpaceHardware	get_token)CLIErrorHfHubHTTPError)logging)_format_size)load_dotenv   )TokenOpt
get_hf_apityper_factoryz	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 IDzJob IDszScheduled Job IDz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	namespacetokenreturnc           
      D   i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  | |||t        |      |||
      }t        d|j                          t        d|j                          |	ry|j                  |j                  |j                  j                         D ]  }t        |        y)z
Run a Job.environr+   )r    r!   r"   r#   labelsr'   r(   r*   Job started with ID: 	View at: Njob_idr*   )updater   r   	read_textosr/   copy_get_extended_environr   run_job_parse_labels_mapprintidurlfetch_job_logsownername)r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   env_map	env_valuesecrets_mapextended_environsecretapijoblogs                       d/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/huggingface_hub/cli/jobs.pyjobs_runrL     si   0 )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ -/K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C
++ '  	C 
!#&&
*+	IcggY
 !!399>>!J c
    logszhf jobs logs <job_id>)r   r5   c                 0   t        |      }	 |j                  | |      D ]  }t        |        y# t        $ rZ}|j                  |j                  j
                  nd}|dk(  rt        d      ||dk(  rt        d      |t        d|       |d}~ww xY w)	zFetch the logs of a Jobr0   r4   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@   r=   r   responsestatus_coder   )r5   r*   r+   rH   rJ   estatuss          rK   	jobs_logsrX   >  s     5
!C
D%%Vy%I 	C#J	 D+,::+A''tS=DE1Ls]YZ`aa7s;<!CDs   #2 	BABBjob_propertiesfiltersc                     |D ]Z  \  }}}| j                  |      }||dk(  r  yt        |j                         |j                               }|dk(  r|r	|dk(  sW|sZ y y)z5Check if scheduled job matches all specified filters.!=F=T)getr   lower)rY   rZ   keyop_strpatternvaluematchs          rK   _matches_filtersre   S  sk     ' VW""3'=~w}}7cM%Vt^ rM   rowsheadersaliasesfmtc           	          |rS|}| D ]K  }|}t        |      D ].  \  }}d| d}	|	|v s|j                  |	t        ||               }0 t        |       M yt        t	        | |             y)z,Print output according to the chosen format.z{{.z}})rg   N)	enumeratereplacestrr=   	_tabulate)
rf   rg   rh   ri   templaterowlineifieldplaceholders
             rK   _print_outputru   a  s      	CD%g. B5 %eWD1$&<<SQ[ADB $K	 	ig./rM   nc                 F    d}d}t        |       D ]  }t        ||        y )Nz[1Az[2K)end)ranger=   )rv   LINE_UP
LINE_CLEARrr   s       rK   _clear_liner|   t  s)    GJ1X 'g:&'rM   metrics_streamtable_headersc              #     K   |D ]J  }| |d    dt        |d   dz  d      t        d|d   z  |d   z  d	       dt        |d          d
t        |d          dt        |d          dt        |d          dg}|d   rt        |d   t              r|gdgt	        |      z  gt	        |d         dz
  z  z   }t        |t        |d               D ]R  \  }}|d   |   }||d    dt        d|d   z  |d   z  d	       dt        |d          d
t        |d          dgz  }T n!|dgt	        |      t	        |      z
  z  z  }|g}d| |f M d| g f y w)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)r5   r}   r~   metricsrp   rf   gpu_idgpus           rK   _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 Vfof-=)*!,S3':#;;cBV>WWYZ[\\]^#C(;$<=>d<PSThPiCjBkklm  E7c-03s8;<<C5DVT!!+", 
s   EEstatszhf jobs stats <job_id>job_idsc           	         t        |      }||j                         d   }| O|j                  |      D cg c]4  }|j                  r|j                  j                  nddv r|j
                  6 } }t        |       dk(  rt        d       yg d	}g d
}	 t        j                  j                  t        |             5 }i }| D ]+  }	|	g}
|
|dd D cg c]  }d|v sd|v rdnd c}z  }
|
g||	<   - t        j                         }|D 	
cg c]  }	||	   D ]  }
|
  }}	}
t        |||d       | D 	cg c]  }	|	|j                  |	|      |d }}	t        |t        |      D ]  \  }}	}|r|j!                  |	d       n|||	<   t        j                         }||z
  t"        k\  sBt%        dt        |      z          |D 	
cg c]  }	||	   D ]  }
|
  }}	}
t        |||d       |} 	 ddd       yc c}w c c}w c c}
}	w c c}	w c c}
}	w # 1 sw Y   yxY w# t&        $ rZ}|j(                  |j(                  j*                  nd}|dk(  rt-        d      ||dk(  rt-        d      |t-        d|       |d}~ww xY w)z7Fetch the resource usage statistics and metrics of Jobsr0   NrB   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)	r>   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   /USAGEz-- / --z--r4   )r5   r}   r~   )kwargs_listr   rP   rQ   rR   rS   zFailed to fetch job stats: )r   whoami	list_jobsrW   stager>   r   r=   multiprocessingpool
ThreadPooltimeru   fetch_job_metricsiflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALr|   r   rT   rU   r   )r   r*   r+   rH   rI   r~   headers_aliasesr   rows_per_job_idr5   rp   headerlast_update_time
total_rowsr   donerf   nowrV   rW   s                       rK   
jobs_statsr     s    5
!CJJL(	 }}y}9
$'JJ

  IBYY FF
 

 7|q%&
M
O%E!!,,S\: 	+dFHO! 0.4XbopqprbstX^cVmw&7H	tStt+.%'0  $yy{,;_&W]G^_#_#_J_*m_dK & 	 %&)&;&;6U^&;&_%2K  '9?Sal&m 
+"fd#''5.2OF+iik))-FFC
O 344C!g&_eOf!g#!g#!gJ!g!*m_dS'*$
+%	+ 	+?
F u `  "h5	+ 	+:  E+,::+A''tS=DE1Ls]YZ`aa8<=1DEsy   9G4(H >HG9
$&H
G>H2HAH&HH	
H+H 9HHH H 	I>$AI99I>psz
hf jobs pszhf jobs ps -aallz-az--allz*Show all Jobs (default shows just running)filterz-fz--filterz>Filter output based on conditions provided (format: key=value)formatz%Format output using a custom templatec                    t        |      }|j                  |      }g d}g d}g }	g }
g }|xs g D ]L  }|j                  d      s|j                  d      r|j                  d      r)|t        d      d }d|v rt	        d	| d
       Y|dd}}}nG|t        d      d }d|v r|j                  dd      \  }}n|d}}|j                  d      rd}|dd }nd}|j                  |j                         ||j                         f       d|v rb|j                  dd      \  }}|j                  d      rd}|dd }nd}|
j                  |j                         ||j                         f       >t	        d| d       O |D ]  }|j                  r|j                  j                  nd}| s|dvr.|j                  }|j                  xs d}|j                  xs g }|rdj                  |      nd}|j                  r|j                  j!                  d      nd}|||j                         |d}t#        ||
      st#        |j$                  xs i |      s|	j                  |||||g        |	sC|
r0ddj                  |
D cg c]  \  }}}| | |  c}}}       nd}t	        d|        yt'        |	|||       yc c}}}w )z
List Jobs.r0   r   )r   IMAGE/SPACECOMMANDCREATEDSTATUS)r>   r    r!   createdrW   zlabel!=zlabel=Nr]   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.r\   *r   !)Warning: Ignoring invalid filter format ''. Use key=value format.r   r   r    %Y-%m-%d %H:%M:%S)r>   r    rW   r!    matching filters: , r   zNo jobs found)r   r   
startswithr   r=   splitendswithappendr_   rW   r   r>   docker_imager!   join
created_atstrftimere   r1   ru   )r   r*   r+   r   r   rH   jobsr~   r   rf   rZ   labels_filtersf
label_part	label_keyoplabel_valuer`   rc   rI   rW   r5   image_or_spacecmdcommand_strr   propskovfilters_msgs                                  rK   jobs_psr     s   8 5
!C==9=-DMMEO(*D*,G13N\r ![<<	"all8&<||I&s9~/0
*$PQ[P\\uv -7s{2	s8}/
*$-7-=-=c1-E*I{-7{I%%c*B )#2IB!!9??#4b+:K:K:M"NOAXaJC||C #2hNNCIIKU[[];<=aS@XYZC![F  O%(ZZ!!Yv%<< ))2U kkR'*chhsm FI^^S^^,,-@AY^
 &,,.]hiw/

 0b.A 	V^[*fMN7O< bi+DIISZ6[6[1a!QCs|6[,\+]^oqk]+,$?	 7\s   Khardwarezhf jobs hardwarec            
      B   t               } | j                         }g d}g d}g }|D ]  }d}|j                  rG|j                  j                   d|j                  j                   d|j                  j
                   d}|j                  d|j                  d	nd}|j                  d|j                  d
z  dnd}|j                  |j                  |j                  xs d|j                  |j                  |||g        |st        d       yt        |||d       y)z(List available hardware options for Jobs)NAMEzPRETTY NAMECPURAMACCELERATORzCOST/MINz	COST/HOUR)rB   
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   rB   pretty_namer   r   r=   ru   )	rH   hardware_listr~   r   rf   hwaccelerator_infocost_min	cost_hours	            rK   jobs_hardwarer  W  s"    ,C**,MaM`O(*D o >>"$.."9"9!:"R^^=Q=Q<RRTUWUcUcUhUhTiijk131A1A1MQr'',-SX797G7G7Sa((2-c23Y^	RWWbnn5rvvrvvGWYaclmno )*$=rM   inspectzhf jobs inspect <job_id>zThe jobs to inspectc           
         t        |      }	 | D cg c]  }|j                  ||       }}t        t        j                  |D cg c]  }t        |       c}dt                     yc c}w c c}w # t        $ rZ}|j                  |j                  j                  nd}|dk(  rt        d      ||dk(  rt        d	      |t        d
|       |d}~ww xY w)z0Display detailed information on one or more Jobsr0   r4      indentdefaultNrP   rQ   rR   rS   zFailed to inspect job: )r   inspect_jobr=   jsondumpsr   rm   r   rT   rU   r   )	r   r*   r+   rH   r5   r   rI   rV   rW   s	            rK   jobs_inspectr  n  s     5
!C
ARYZvCZZdjj6#&+6q#NO [6 A+,::+A''tS=DE1Ls]YZ`aa4QC89q@As4   A5 A+A5 A0A5 +
A5 5	C>ACCcancelzhf jobs cancel <job_id>c                    t        |      }	 |j                  | |       y# t        $ rZ}|j                  |j                  j                  nd}|dk(  rt        d      ||dk(  rt        d      |t        d|       |d}~ww xY w)	zCancel a Jobr0   r4   NrP   rQ   rR   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r   
cancel_jobr   rT   rU   r   )r5   r*   r+   rH   rV   rW   s         rK   jobs_cancelr    s     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)rB   )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   i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  | |xs g |||||t        |      ||	|      }t        d|j                          t        d|j                          |
ry|j                  |j                  |j                  j                         D ]  }t        |        y)8Run a UV script (local file or URL) on HF infrastructurer.   r0   )r  r  dependenciesr  r    r"   r#   r1   r'   r(   r*   r2   r3   Nr4   )r6   r   r   r7   r8   r/   r9   r:   r   
run_uv_jobr<   r=   r>   r?   r@   rA   rB   )r  r  r    r'   r"   r#   r$   r%   r&   r(   r)   r*   r+   r  r  rC   rD   rE   rF   rG   rH   rI   rJ   s                          rK   jobs_uv_runr    su   6 )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C
..%2 '  C 
!#&&
*+	IcggY
 !!399>>!J c
rM   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                    i }|rO|j                  t        t        |      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|	r3|j                  t        t        |	      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  ||| ||||t        |      |
||      }t        d|j                          y)zSchedule a Job.r.   r0   )r    r!   r  r  r  r"   r#   r1   r'   r(   r*   Scheduled Job created with ID: N)r6   r   r   r7   r8   r/   r9   r:   r   create_scheduled_jobr<   r=   r>   )r  r    r!   r  r  r"   r#   r$   r%   r&   r'   r(   r*   r+   rC   rD   rE   rF   rG   rH   scheduled_jobs                        rK   scheduled_runr$    s*   , )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C,, ' - M 
+M,<,<+=
>?rM   zhf jobs scheduled psz1Show all scheduled Jobs (default hides suspended)z--formatc                    t        |      }|j                  |      }g d}g d}g }	g }
|xs g D ]v  }d|v ra|j                  dd      \  }}|j                  d      rd}|d	d
 }nd}|
j	                  |j                         ||j                         f       ht        d| d       x |D ]7  }|j                  xs d}| s|r|j                  }|j                  xs d}|j                  j                  xs d}|j                  j                  xs g }|rdj                  |      nd}|j                  j                  r/|j                  j                  j                   j#                  d      nd}|j                  j$                  r%|j                  j$                  j#                  d      nd}||t'        |      |d}t)        ||
      s |	j	                  |||||||g       : |	sC|
r0ddj                  |
D cg c]  \  }}}| | |  c}}}       nd}t        d|        y	t+        |	|||       y	c c}}}w )zList scheduled Jobsr0   r   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPEND)r>   r  r    r!   lastnextr  r]   r   r   r\   Nr   r   r   Fr   r   r   )r>   r    r  r!   r   r   r   zNo scheduled jobs found)r   list_scheduled_jobsr   r   r   r_   r=   r  r>   r  job_specr   r!   r   rW   last_jobatr   next_job_run_atrm   re   ru   )r   r*   r+   r   r   rH   scheduled_jobsr~   r   rf   rZ   r   r`   rc   r   r#  r  sj_idr  r   r   r   last_job_atr/  r   r   r   r   r   s                                rK   scheduled_psr3    sO   : 5
!C,,y,ANcMWO(*D*,G\r [!8aJC||C #2hNNCIIKU[[];<=aS@XYZ[ ( k''05w   ))2U&//<<E$$,,2'*chhsmN[NbNbNkNkM  )),,556IJqv 	
 ##33   0099:MN 	
 ~#g,[fgw/UHnk;P_ahij)k, bi+DIISZ6[6[1a!QCs|6[,\+]^oq'}56$? 7\s   =H;zhf jobs scheduled inspect <id>scheduled_job_idszThe scheduled jobs to inspectc           
          t        |      }| D cg c]  }|j                  ||       }}t        t        j                  |D cg c]  }t        |       c}dt                     yc c}w c c}w )z:Display detailed information on one or more scheduled Jobsr0   scheduled_job_idr*   r  r  N)r   inspect_scheduled_jobr=   r  r  r   rm   )r4  r*   r+   rH   r7  r0  r#  s          rK   scheduled_inspectr9  c  sr     5
!C !2 	!!3Cy!YN  
$**Pf]+PYZdg
hi	 Qs   A*A/deletezhf jobs scheduled delete <id>r7  c                 B    t        |      }|j                  | |       y)zDelete a scheduled Job.r0   r6  N)r   delete_scheduled_jobr7  r*   r+   rH   s       rK   scheduled_deleter>  w  "     5
!C.>)TrM   zhf jobs scheduled suspend <id>c                 B    t        |      }|j                  | |       y)z Suspend (pause) a scheduled Job.r0   r6  N)r   suspend_scheduled_jobr=  s       rK   scheduled_suspendrB    s"     5
!C/?9UrM   resumezhf jobs scheduled resume <id>c                 B    t        |      }|j                  | |       y)z!Resume (unpause) a scheduled Job.r0   r6  N)r   resume_scheduled_jobr=  s       rK   scheduled_resumerF    r?  rM   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                    i }|
rO|j                  t        t        |
      j                         t        j
                  j                                      |xs g D ]:  }|j                  t        |t        j
                  j                                      < i }t               }|r3|j                  t        t        |      j                         |             |xs g D ]  }|j                  t        ||               t        |      }|j                  ||xs g | |||||||t        |	      |||      }t        d|j                          y)r  r.   r0   )r  r  r  r  r  r  r  r    r"   r#   r1   r'   r(   r*   r!  N)r6   r   r   r7   r8   r/   r9   r:   r   create_scheduled_uv_jobr<   r=   r>   )r  r  r  r  r  r    r'   r"   r#   r$   r%   r&   r(   r*   r+   r  r  rC   rD   rE   rF   rG   rH   rI   s                           rK   scheduled_uv_runrI    s5   8 )+G{4>#;#;#=rzzGXYZYB J	{9bjjoo6GHIJ,.K,.;tL'9'C'C'EO_`a-R J;v7GHIJ 5
!C

%
%%2 ' & C  
+CFF8
45rM   r1   c                 b    | syi }| D ]$  }d|v r|j                  dd      n|df\  }}|||<   & |S )a  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   )r   )r1   
labels_map	label_varr`   rc   s        rK   r<   r<     sQ     !#J  	03y0@Y__S!,yRTo
U
3  rM   c           
         t        g | | D cg c]  }t        d |D               }}t        t        j                         j                  t        |      dz        }t        |      t        |      z   |kD  r|j                  t        |            }||xx   dz  cc<   t        |      t        |      z   |k  r#|t        |      z
  t        |      z
  ||   z   ||<   t        |      t        |      z   |kD  r dt        |      z  j                  | }g }|j                   |j                  |        |j                   |j                  |D cg c]  }d|z  	 c}        | D ]r  }	t        |	|      D 
cg c];  \  }
}t        t        |
            |kD  rt        |
      d|dz
   dz   n
t        |
      = }}
}|j                   |j                  |        t d	j                  |      S c c}w c c}w c c}}
w )
z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c              3   D   K   | ]  }t        t        |              y wN)r   rm   ).0xs     rK   	<genexpr>z_tabulate.<locals>.<genexpr>  s     /ac#a&k/s       r   z{{:{}}} -N   z...
)r   maxr8   get_terminal_sizecolumnsr   sumindexr   r   rm   r   )rf   rg   col
col_widthsterminal_widthcol_to_minimize
row_formatlineswrp   rQ  	col_widthrow_format_argss                rK   rn   rn     s    <?;N;Ng;NOC#/3//OJO--/77W9JKN
g,Z
(>
9$**3z?;?#)#w<#j/)^;*83z?*JSQX\*Y\fgv\w*wJ'	 g,Z
(>
9
 4*s7|+33Z@JE	LL"""G,-	LL"""j$AS1W$ABC : !$C 4
9 033q6{Y/FCF?Y]#e+CPQFR
 
 	&Z&&89: 99U# P %B
s   G*G/6A G4c                  d    t         j                  j                         } t               x}|| d<   | S )NHF_TOKEN)r8   r/   r9   r   )rF   r+   s     rK   r:   r:     s1    zz()',$rM   Tqueuefunc.kwargsc                 @     |di |D ]  }| j                  |        y )N )put)rh  ri  rj  results       rK   _write_generator_to_queuero    s#    .. 		&rM   r   r   c          	   #   6  K   t               }|D cg c]  }| j                  t        |||f       }}	 	 	 |j                  d       c c}w # t        $ r' t        d |D              r|j                         rY nY 5w xY wn# t        $ r Y nw xY w	 |D cg c]  }|j                  d       nc c}w c} y# t        j                  $ r Y yw xY w# 	 |D cg c]  }|j                  d       nc c}w c} w # t        j                  $ r Y w w xY wxY ww)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   <   K   | ]  }|j                           y wrO  )ready)rP  async_results     rK   rR  z%iflatmap_unordered.<locals>.<genexpr>-  s     N|))+Ns   N)
r   apply_asyncro  r^   r   r   emptyKeyboardInterruptr   TimeoutError)r   ri  r   rh  rj  async_resultsrs  s          rK   r   r     s     gEfqr\bT%%&?%vAVWrMriii--  s
  NNNSXS^S^S` 	@MN\d+NN++ 			@MN\d+NN++ 		s   D ADB A 
B D+B ;B ?B  B C 	BC BC B; B21	B; :D;CDCDDC=C43	C=<D=DDDDD)
NNNNNNNFNN)NN)NNN)FNNNN)r,   N)NNNNNNNNNFNNNN)NNNNNNNNNNN)NNNNNNNNNNNNNNN)m__doc__r  r   multiprocessing.poolr8   r   dataclassesr   r   pathlibr   rh  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   
get_logger__name__loggerrc   SUGGESTED_FLAVORSr   rm   ArgumentImageArgOptionImageOpt	FlavorOptlistEnvOpt
SecretsOpt	LabelsOpt
EnvFileOptSecretsFileOpt
TimeoutOptbool	DetachOptNamespaceOptWithOpt	PythonOpt
SuspendOptConcurrencyOptScheduleArg	ScriptArgScriptArgsArg
CommandArgJobIdArg	JobIdsArgScheduledJobIdArgjobs_clir!   rL   rX   r   tuplere   intru   r|   r   r   r   r  r  r  uv_app	add_typerr  scheduled_appr$  r3  r9  r>  rB  rF  scheduled_uv_apprI  r<   rn   r:   rg  ro  r   r   r   )items   0rK   <module>r     s  -^    	      U U U  4 ; ) = 5 ; ; 
		H	%,9WDTZZ;=VTZZW   ENN' SMELL= ]ELL D	 
T#YELL>
 T#YELL F
 T#YELLB	 SMELL7
 SMELL> SMELLe
 ELLB	 SMELLe T#YELL4 SMELLD	 TNELL0
 TNELLG ENNf ENN3	 T#YENN' IENN"
 ENN T#YENN	 ENN  ?@ 
	.5   #'"/// 
/ 	/
 / / !/ / / / / / 
//d 
&$;#<= #DDD D 
	D >D(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 
'%=$>?"MEMEME ME 
	ME @ME` 
$,!@A 	" 	 	1k@	=	
	
k@ k@ k@ cQ	
	k@& 8	
	'k@2 
3k@ Bk@\ 
*(:';<> =>, 
)'A&BC #AS	&	
	A A A 
A DA2 
(&?%@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'=&>? 	" 	 	3I@	D	
	
I@ I@ I@ cQ	
	I@& 8	
	'I@4 
5I@ @I@X y,L+MN #j S	0	
	j j j 
j Oj& 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[E Xs   ` `