o
    Ďi                  &   @   s	  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(e)Z*dd eD Z+dZ,ee-ej.ddf Z/eee- ej0ddf Z1eee ej0ddf Z2eee3e-  ej0ddddf Z4eee3e-  ej0ddddf Z5eee3e-  ej0ddddf Z6eee- ej0dd df Z7eee- ej0d!df Z8eee- ej0d"df Z9ee:ej0d#d$d%df Z;eee- ej0d&df Z<eee3e-  ej0d'd(df Z=eee- ej0d)d*d+df Z>eee: ej0d,df Z?eee: ej0d-df Z@ee-ej.d.df ZAee-ej.d/df ZBeee3e-  ej.d0df ZCee3e- ej.d1df ZDee-ej.d2df ZEeee3e-  ej.d3df ZFee-ej.d4df ZGe'd5dZHeHjId6d7d8ig d9d:								;		dd<e/d=eDd>e4d?e5d@e6dAe7dBe8dCe2dDe9dEe;dFe<dGe%dHdfdIdJZJeHjIdKdLgdM		ddNeEdFe<dGe%dHdfdOdPZKdQeLe-e-f dRe3eMe-e-e-f  dHe:fdSdTZNdUe3e3ee-eOf   dVe3e- dWe3e- dXee- dHdf
dYdZZPd[eOdHdfd\d]ZQdNe-d^eeLe-ef  d_e3e- dHeeMe:e-e3e3ee-eOf   f  fd`daZReHjIdbdcgdM			dddeFdFe<dGe%dHdfdedfZSeHjIdgdhdigdM	;				ddjee:ej0dkdldmdf dFe<dGe%dneee3e-  ej0dodpdqdf dreee- ej0dsdf dHdfdtduZTeHjIdvdwgdMddxdyZUeHjIdzd{gdM		dddee3e- ej.d|df dFe<dGe%dHdfd}d~ZVeHjIddgdM		ddNeEdFe<dGe%dHdfddZWe'ddZXeHjYeXdd eXjId6d7d8ig dd:										;				ddeBdeCd<e1dCe2d>e4d?e5d@e6dAe7dBe8dDe9dEe;dFe<dGe%de=de>dHdf ddZZe'ddZ[eHjYe[dd e[jId6d7d8idgd:											ddeAd<e/d=eDde?de@d>e4d?e5d@e6dAe7dBe8dCe2dDe9dFe<dGe%dHdfddZ\e[jIdgdgdM	;				ddjee:ej0dkdlddf dFe<dGe%dneee3e-  ej0dodpdqdf dreee- ej0ddsdf dHdfddZ]e[jIdzdgdM		ddee3e- ej.ddf dFe<dGe%dHdfddZ^e[jIddgdM		ddeGdFe<dGe%dHdfddZ_e[jIddgdM		ddeGdFe<dGe%dHdfddZ`e[jIddgdM		ddeGdFe<dGe%dHdfddZae'ddZbe[jYebdd ebjId6d7d8iddgd:															ddeAdeBdeCde?de@d<e1dCe2d>e4d?e5d@e6dAe7dBe8dDe9dFe<dGe%de=de>dHdf$ddZcdee3e-  dHeeLe-e-f  fddZddUe3e3ee-eOf   dVe3e- dHe-fddZedHee-e-f fddZfedZgdeeg dedeeg f deLdHdfddZhdejijjdedeeg f de3eL dHeeg fddZkdS )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_factoryc                 C   s   g | ]
}|j d kr|j qS )z	zero-a10g)value).0item r   T/home/jeff/fluffinator/venv/lib/python3.10/site-packages/huggingface_hub/cli/jobs.py
<listcomp>U   s    r    g?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examplesFimagecommandenvsecretslabelenv_filesecrets_fileflavortimeoutdetach	namespacetokenreturnc              
   C   s  i }|r| tt| tj d |pg D ]}| t|tj d qi }t }|r;| tt| |d |p>g D ]}| t||d q?t|d}|j	| |||t
||||
d}td|j  td|j  |	rsdS |j|j|jjdD ]}t| q}dS )z
Run a Job.environr1   )r&   r'   r(   r)   labelsr-   r.   r0   Job started with ID: 	View at: Njob_idr0   )updater   r   	read_textosr4   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/   r0   r1   env_map	env_valuesecrets_mapextended_environsecretapijoblogr   r   r   jobs_run  s:    

rP   logszhf jobs logs <job_id>)r%   r:   c              
   C   s   t |d}z|j| |dD ]}t| qW dS  tyG } z%|jdur'|jjnd}|dkr2td||dkr;td|td| |d}~ww )	zFetch the logs of a Jobr5   r9   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   rE   rB   r   responsestatus_coder   )r:   r0   r1   rM   rO   estatusr   r   r   	jobs_logs>  s   



rZ   job_propertiesfiltersc                 C   sf   |D ].\}}}|  |}|du r|dkrq dS t| | }|dkr'|r-|dkr0|r0 dS qdS )z5Check if scheduled job matches all specified filters.N!=F=T)getr   lower)r[   r\   keyop_strpatternr   matchr   r   r   _matches_filtersS  s   
re   rowsheadersaliasesfmtc           
      C   sp   |r.|}| D ]%}|}t |D ]\}}d| d}	|	|v r&||	t|| }qt| qdS tt| |d dS )z,Print output according to the chosen format.z{{.z}})rg   N)	enumeratereplacestrrB   	_tabulate)
rf   rg   rh   ri   templaterowlineifieldplaceholderr   r   r   _print_outputa  s   
	rt   nc                 C   s&   d}d}t | D ]}t||d qd S )Nz[1Az[2K)end)rangerB   )ru   LINE_UP
LINE_CLEARrq   r   r   r   _clear_linet  s
   rz   metrics_streamtable_headersc                 c   sz   |D ]}| |d  dt |d d dt d|d  |d  d	 dt|d  d
t|d  dt|d  dt|d  dg}|d rt|d tr|gdgt| gt|d d   }t|t|d D ]2\}}|d | }||d  dt d|d  |d  d	 dt|d  d
t|d  dg7 }qjn|dgt|t|  7 }|g}d| |fV  qd| g fV  d S )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|   metricsro   rf   gpu_idgpur   r   r   _get_jobs_stats_rows{  s.   &r   statszhf jobs stats <job_id>job_idsc              
      s  t |d du r  d | du rdd  jdD } t| dkr*td dS g d	g d
}ztjt| }i | D ]}|g}|dd dd D 7 }|g|< q@t }fddD }t	||d  fdd| D }	t
|t|	dD ]6\}
}}|
r|d n||< t }|| tkrtdt|  fddD }t	||d |}q~W d   W dS 1 sw   Y  W dS  ty } z%|jdur|jjnd}|dkrtd||dkrtd|td| |d}~ww )z7Fetch the resource usage statistics and metrics of Jobsr5   NrG   c                 S   s(   g | ]}|j r|j jnd dv r|jqS )UNKNOWNRUNNINGUPDATING)rY   stagerC   r   rN   r   r   r   r      s
    zjobs_stats.<locals>.<listcomp>r0   r   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)	rC   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_bytesc                 S   s$   g | ]}d |v sd|v rdndqS )/USAGEz-- / --z--r   )r   headerr   r   r   r      s   $ r   c                       g | ]} | D ]}|qqS r   r   r   r:   ro   rows_per_job_idr   r   r          c                    s"   g | ]}| j |d dqS )r9   )r:   r{   r|   )fetch_job_metricsr   r:   )rM   r0   r|   r   r   r      s    )kwargs_listr   c                    r   r   r   r   r   r   r   r      r   rR   rS   rT   rU   zFailed to fetch job stats: )r   whoami	list_jobsr   rB   multiprocessingpool
ThreadPooltimert   iflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALrz   r   rV   rW   r   )r   r0   r1   headers_aliasesr   r:   ro   last_update_time
total_rowsr   donerf   nowrX   rY   r   )rM   r0   r   r|   r   
jobs_stats  s^   

&

r   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                 C   sj  t |d}|j|d}g d}g d}g }	g }
g }|pg D ]}|ds)|dr|drL|tdd }d|v rCtd	| d
 q|dd}}}n*|tdd }d|v ra|dd\}}n|d}}|drtd}|dd }nd}|| || f qd|v r|dd\}}|drd}|dd }nd}|
| || f qtd| d q|D ]V}|j	r|j	j
nd}| s|dvrq|j}|jpd}|jpg }|rd|nd}|jr|jdnd}||| |d}t||
sqt|jpi |sq|	|||||g q|	s,|
r!dddd |
D  nd}td|  dS t|	||| dS )z
List Jobs.r5   r   )r   IMAGE/SPACECOMMANDCREATEDSTATUS)rC   r&   r'   createdrY   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)rC   r&   rY   r'    matching filters: , c                 S   "   g | ]\}}}| | | qS r   r   r   kovr   r   r   r    P     " zjobs_ps.<locals>.<listcomp>r   zNo jobs found)r   r   
startswithr   rB   splitendswithappendr`   rY   r   rC   docker_imager'   join
created_atstrftimere   r6   rt   )r   r0   r1   r   r   rM   jobsr|   r   rf   r\   labels_filtersf
label_part	label_keyoplabel_valuera   r   rN   rY   r:   image_or_spacecmdcommand_strr   propsfilters_msgr   r   r   jobs_ps  sl   








$r   hardwarezhf jobs hardwarec            	   
   C   s   t  } |  }g d}g d}g }|D ]H}d}|jr+|jj d|jj d|jj d}|jdur7d|jd	nd}|jdurGd|jd
 dnd}||j|j	pQd|j
|j|||g q|sdtd dS t|||d dS )z(List available hardware options for Jobs)NAMEzPRETTY NAMECPURAMACCELERATORzCOST/MINz	COST/HOUR)rG   
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   rG   pretty_namer   r   rB   rt   )	rM   hardware_listr|   r   rf   hwaccelerator_infocost_min	cost_hourr   r   r   jobs_hardwareW  s    " &r  inspectzhf jobs inspect <job_id>zThe jobs to inspectc              
      s   t |d z fdd| D }ttjdd |D dtd W dS  tyR } z%|jdur2|jjnd}|dkr=td	||d
krFtd|td| |d}~ww )z0Display detailed information on one or more Jobsr5   c                       g | ]	} j |d qS )r9   )inspect_jobr   rM   r0   r   r   r    |  s    z jobs_inspect.<locals>.<listcomp>c                 S      g | ]}t |qS r   r   r   r   r   r   r    }         indentdefaultNrR   rS   rT   rU   zFailed to inspect job: )	r   rB   jsondumpsrl   r   rV   rW   r   )r   r0   r1   r   rX   rY   r   r
  r   jobs_inspectn  s   
$

r  cancelzhf jobs cancel <job_id>c              
   C   s   t |d}z
|j| |d W dS  ty@ } z%|jdur |jjnd}|dkr+td||dkr4td|td| |d}~ww )	zCancel a Jobr5   r9   NrR   rS   rT   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r   
cancel_jobr   rV   rW   r   )r:   r0   r1   rM   rX   rY   r   r   r   jobs_cancel  s   


r  zFRun UV scripts (Python with inline dependencies) on HF infrastructure.uv)rG   )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                 C   s  i }|r| tt| tj d |pg D ]}| t|tj d qi }t }|r;| tt| |d |p>g D ]}| t||d q?t|d}|j	| |pVg |||||t
|||	|d}td|j  td|j  |
rxdS |j|j|jjdD ]}t| qdS )8Run a UV script (local file or URL) on HF infrastructurer3   r5   )r  r  dependenciesr  r&   r(   r)   r6   r-   r.   r0   r7   r8   Nr9   )r;   r   r   r<   r=   r4   r>   r?   r   
run_uv_jobrA   rB   rC   rD   rE   rF   rG   )r  r  r&   r-   r(   r)   r*   r+   r,   r.   r/   r0   r1   r  r  rH   rI   rJ   rK   rL   rM   rN   rO   r   r   r   jobs_uv_run  s@    

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                 C   s   i }|r| tt| tj d |pg D ]}| t|tj d qi }t }|	r;| tt|	 |d |p>g D ]}| t||d q?t|d}|j	||| ||||t
||
||d}td|j  dS )zSchedule a Job.r3   r5   )r&   r'   r!  r"  r#  r(   r)   r6   r-   r.   r0   Scheduled Job created with ID: N)r;   r   r   r<   r=   r4   r>   r?   r   create_scheduled_jobrA   rB   rC   )r!  r&   r'   r"  r#  r(   r)   r*   r+   r,   r-   r.   r0   r1   rH   rI   rJ   rK   rL   rM   scheduled_jobr   r   r   scheduled_run  s4    
r'  zhf jobs scheduled psz1Show all scheduled Jobs (default hides suspended)z--formatc              
   C   s  t |d}|j|d}g d}g d}g }	g }
|pg D ]3}d|v rF|dd\}}|dr7d}|d	d
 }nd}|
| || f qtd| d q|D ]_}|jpWd}| s]|r]qQ|j}|j	pdd}|j
jpjd}|j
jppg }|rxd|nd}|jjr|jjjdnd}|jjr|jjdnd}||t||d}t||
sqQ|	|||||||g qQ|	s|
rdddd |
D  nd}td|  d	S t|	||| d	S )zList scheduled Jobsr5   r   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPEND)rC   r!  r&   r'   lastnextr"  r^   r   r   r]   Nr   r   r   Fr   r   r   )rC   r&   r"  r'   r   r   c                 S   r   r   r   r   r   r   r   r    ]  r   z scheduled_ps.<locals>.<listcomp>r   zNo scheduled jobs found)r   list_scheduled_jobsr   r   r   r`   rB   r"  rC   r!  job_specr   r'   r   rY   last_jobatr   next_job_run_atrl   re   rt   )r   r0   r1   r   r   rM   scheduled_jobsr|   r   rf   r\   r   ra   r   r   r&  r"  sj_idr!  r   r   r   last_job_atr1  r   r   r   r   r   scheduled_ps  sN   




"r5  zhf jobs scheduled inspect <id>scheduled_job_idszThe scheduled jobs to inspectc                    s@   t |d  fdd| D }ttjdd |D dtd dS )z:Display detailed information on one or more scheduled Jobsr5   c                    r  )scheduled_job_idr0   )inspect_scheduled_job)r   r8  r
  r   r   r    p  s    z%scheduled_inspect.<locals>.<listcomp>c                 S   r  r   r   )r   r&  r   r   r   r    t  r  r  r  N)r   rB   r  r  rl   )r6  r0   r1   r2  r   r
  r   scheduled_inspectc  s
   
"r:  deletezhf jobs scheduled delete <id>r8  c                 C      t |d}|j| |d dS )zDelete a scheduled Job.r5   r7  N)r   delete_scheduled_jobr8  r0   r1   rM   r   r   r   scheduled_deletew     
r?  zhf jobs scheduled suspend <id>c                 C   r<  )z Suspend (pause) a scheduled Job.r5   r7  N)r   suspend_scheduled_jobr>  r   r   r   scheduled_suspend  r@  rB  resumezhf jobs scheduled resume <id>c                 C   r<  )z!Resume (unpause) a scheduled Job.r5   r7  N)r   resume_scheduled_jobr>  r   r   r   scheduled_resume  r@  rE  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                 C   s   i }|
r| tt|
 tj d |pg D ]}| t|tj d qi }t }|r;| tt| |d |p>g D ]}| t||d q?t|d}|j	||pVg | |||||||t
|	|||d}td|j  dS )r  r3   r5   )r  r  r!  r"  r#  r  r  r&   r(   r)   r6   r-   r.   r0   r$  N)r;   r   r   r<   r=   r4   r>   r?   r   create_scheduled_uv_jobrA   rB   rC   )r!  r  r  r"  r#  r&   r-   r(   r)   r*   r+   r,   r.   r0   r1   r  r  rH   rI   rJ   rK   rL   rM   rN   r   r   r   scheduled_uv_run  s:    
rG  r6   c                 C   sB   | sdS i }| D ]}d|v r| ddn|df\}}|||< q|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   )r6   
labels_map	label_varra   r   r   r   r   rA     s   	 
rA   c           	      C   s&  dd t g | |R  D }tt jt|d }t|t| |krW|t|}||  d  < t|t| |krM|t| t| ||  ||< t|t| |ks$dt| j| }g }|	|j|  |	|jdd |D   | D ]}dd t ||D }|	|j|  qyd
|S )	z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c                 S   s   g | ]}t d d |D qS )c                 s   s    | ]	}t t|V  qd S Nr   rl   )r   xr   r   r   	<genexpr>  s    z'_tabulate.<locals>.<listcomp>.<genexpr>)max)r   colr   r   r   r      r   z_tabulate.<locals>.<listcomp>   r   z{{:{}}} c                 S   s   g | ]}d | qS )-r   )r   wr   r   r   r      r  c                 S   s@   g | ]\}}t t||krt|d |d  d nt|qS )N   z...rK  )r   rL  	col_widthr   r   r   r       s    .
)r   rN  r=   get_terminal_sizecolumnsr   sumindexr   r   r   )	rf   rg   
col_widthsterminal_widthcol_to_minimize
row_formatlinesro   row_format_argsr   r   r   rm     s$    
rm   c                  C   s$   t j } t  }d ur|| d< | S )NHF_TOKEN)r=   r4   r>   r   )rK   r1   r   r   r   r?     s   
r?   Tqueuefunc.kwargsc                 C   s"   |di |D ]}|  | qd S )Nr   )put)rb  rc  rd  resultr   r   r   _write_generator_to_queue  s   rg  r   r   c                #   s    t   fdd|D }zGz&	 z	jddV  W n ty3   tdd |D r1 r1Y nY nw qW n	 ty?   Y nw W z
dd |D  W d	S  tjyV   Y d	S w z	dd |D  W w  tjyj   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
    c                    s   g | ]} t |fqS r   )apply_asyncrg  )r   rd  rc  r   rb  r   r   r    '  r   z&iflatmap_unordered.<locals>.<listcomp>T皙?r.   c                 s   s    | ]}|  V  qd S rJ  )readyr   async_resultr   r   r   rM  -  s    z%iflatmap_unordered.<locals>.<genexpr>c                 S   s   g | ]}|j d dqS )rj  rk  )r_   rm  r   r   r   r    4  s    N)r   r_   r   r   emptyKeyboardInterruptr   TimeoutError)r   rc  r   async_resultsr   ri  r   r     s8   r   )
NNNNNNNFNN)NN)NNN)FNNNN)r2   N)NNNNNNNNNFNNNN)NNNNNNNNNNN)NNNNNNNNNNNNNNN)l__doc__r  r   multiprocessing.poolr=   r   dataclassesr   r   pathlibr   rb  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__loggerSUGGESTED_FLAVORSr   rl   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'   rP   rZ   r   tuplere   intrt   rz   r   r   r   r  r  r  uv_app	add_typerr  scheduled_appr'  r5  r:  r?  rB  rE  scheduled_uv_apprG  rA   rm   r?   ra  rg  r   r   r   r   r   r   r   <module>   s  /(

	
	
		
	


	
2,
 
P		

n	
	

6		
.		

L	



	
&7**