
    _j              (          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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 ddlZddl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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.  ej/        e0          Z1de2de2dz  de3e2e2dz  f         fdZ4d eD             Z5dZ6ee2 ej7        d          f         Z8ee2dz   ej9        d          f         Z:eedz   ej9        d          f         Z;ee<e2         dz   ej9        ddd          f         Z=ee2dz   ej9        d          f         Z>ee? ej9        ddd          f         Z@ee2dz   ej9        d           f         ZAee<e2         dz   ej9        d!d"          f         ZBee2dz   ej9        d#d$d%          f         ZCee?dz   ej9        d&          f         ZDee?dz   ej9        d'          f         ZEee2 ej7        d(          f         ZFee2 ej7        d)          f         ZGee<e2         dz   ej7        d*          f         ZHee<e2          ej7        d+          f         ZIee2 ej7        d,          f         ZJee<e2         dz   ej7        d-          f         ZKee2 ej7        d.          f         ZL e.d/          ZMeMN                    d0d1d2ig d34          	 	 	 	 	 	 	 	 	 	 	 dd6e8d7eId8e!d9e%d:e=d;e'd<e d=e$d>e;d?e>d@e@deAdAe&ddfdB            ZOeMN                    dCg dDE          	 	 	 	 ddeJdFee? ej9        dGdHdI          f         dJeePdz   ej9        dKdLdM          f         deAdAe&ddfdN            ZQdOeRe2e2f         dPe<e3e2e2e2f                  de?fdQZSdRe<e<e2ePz                    dSe<e2         dTe<e2         dUe2dz  ddf
dVZTdWePddfdXZUde2dYeeRe2ef                  dZe<e2         dee3e?e2e<e<e2ePz                    f                  fd[ZVeMN                    d\d]gE          	 	 	 dd^eKdeAdAe&ddfd_            ZWeMN                    d`dadbgE          	 	 	 	 	 	 ddcee? ej9        dddedf          f         deAdAe&dgee<e2         dz   ej9        dGdhdi          f         djee2dz   ej9        dk          f         dle#ddfdm            ZXeMN                    dndogE          ddp            ZYeMN                    dqdrgE          	 	 dd^ee<e2          ej7        ds          f         deAdAe&ddfdt            ZZeMN                    dudvgE          	 	 ddeJdeAdAe&ddfdw            Z[ e.dx          Z\eM]                    e\dyz           e\N                    d0d1d2ig d{4          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd|eGd}eHd6e:d>e;d8e!d9e%d:e=d;e'd<e d=e$d?e>d@e@deAdAe&d~eBdeCddf"d            Z^ e.d          Z_eM]                    e_dz           e_N                    d0d1d2idg4          	 	 	 	 	 	 	 	 	 	 	 	 ddeFd6e8d7eIdeDdeEd8e!d9e%d:e=d;e'd<e d=e$d>e;d?e>deAdAe&ddf d            Z`e_N                    d`dgE          	 	 	 	 	 	 ddcee? ej9        ddded          f         deAdAe&dgee<e2         dz   ej9        dGdhdi          f         djee2dz   ej9        dk          f         dle#ddfd            Zae_N                    dqdgE          	 	 ddee<e2          ej7        d          f         deAdAe&ddfd            Zbe_N                    ddgE          	 	 ddeLdeAdAe&ddfd            Zce_N                    ddgE          	 	 ddeLdeAdAe&ddfd            Zde_N                    ddgE          	 	 ddeLdeAdAe&ddfd            Ze e.d          Zfe_]                    efdyz           efN                    d0d1d2iddg4          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeFd|eGd}eHdeDdeEd6e:d>e;d8e!d9e%d:e=d;e'd<e d=e$d?e>deAdAe&d~eBdeCddf&d            Zgde<e2         dz  deRe2e2f         dz  fdZhdRe<e<e2ePz                    dSe<e2         de2fdZi ed          Zjdeej         dedeej         f         deRddfdZkdejl        jm        dedeej         f         de<eR         deej         fdZnd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 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)CallableIterableasdict)fnmatch)EmptyQueue)	AnnotatedAnyTypeVar)SpaceHardware)CLIErrorHfHubHTTPError)logging)_format_size)format_duration   )
EnvFileOptEnvOptOutputFormatQuietOptSecretsFileOpt
SecretsOptTokenOpt
VolumesOpt_format_cellapi_object_to_dict
get_hf_apiparse_env_mapparse_volumesprint_list_outputtyper_factoryjob_id	namespacereturnc                 0   | st          d          |                     d          dk    rt          d|  d          d| vr| |fS |                     dd          \  }}|r|st          d|  d          |||k    rt          d| d| d	          ||fS )
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'.Nz(Conflicting namespace: got --namespace='z ' but job ID implies namespace='')r   countsplit)r#   r$   extracted_namespaceparsed_job_ids       U/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/huggingface_hub/cli/jobs.py_parse_namespace_from_job_idr.   i   s      20111||C1`V\```aaa
&y  )/c1)=)=& bm b`V\```aaa.A!A!Axyxxbuxxx
 
 	
 ---    c                 2    g | ]}|j         d k    |j         S )z	zero-a10g)value).0items     r-   
<listcomp>r4      s&    WWWDTZ;=V=VTZ=V=V=Vr/   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-lz--labelz3Set labels. E.g. --label KEY=VALUE or --label LABELzVMax duration: int/float with s (seconds, default), m (minutes), h (hours) or d (days).z-dz--detachz3Run the Job in the background and print the Job ID.zVThe namespace where the job will be running. Defaults to the current user's namespace.z--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.pyz^hf jobs run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt python:3.12 python script.py)context_settingsexamplesFimagecommandenvsecretslabelvolumeenv_filesecrets_fileflavortimeoutdetachtokenc                    t          ||          }t          ||          }t          |          }|                    | |||t          |          t	          |          ||	|	  	        }t          d|j                    t          d|j                    |
rdS |                    |j        |j	        j
        d          D ]}t          |           dS )z
Run a Job.rE   )	r:   r;   r<   r=   labelsvolumesrB   rC   r$   Job started with ID: 	View at: NTr#   r$   follow)r   r   run_job_parse_labels_mapr    printidurlfetch_job_logsownername)r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r$   rE   env_mapsecrets_mapapijoblogs                     r-   jobs_runr[     s    4 C**G66K
5
!
!
!C
++ ''f%%  
 
C 

*#&
*
*+++	
cg

    !!39>RV!WW  c



 r/   logs)zhf jobs logs <job_id>zhf jobs logs -f <job_id>zhf jobs logs --tail 20 <job_id>z#hf jobs logs -f --tail 100 <job_id>)r9   rM   z-fz--followzqFollow log output (stream until the job completes). Without this flag, only currently available logs are printed.tailz-nz--tailzvNumber of lines to show from the end of the logs. When combined with --follow, starts streaming from the last N lines.c                 t   t          | |          \  } }t          |          }	 |                    | |||          }|D ]}t          |           dS # t          $ rY}|j        |j        j        nd}	|	dk    rt          d          ||	dk    rt          d          |t          d|           |d}~ww xY w)	a  Fetch the logs of a Job.

    By default, prints currently available logs and exits (non-blocking).
    Use --follow/-f to stream logs in real-time until the job completes.
    Use --tail/-n to limit the number of lines returned (server-side when supported).
    rG   )r#   r$   rM   r]   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   rS   rP   r   responsestatus_coder   )
r#   rM   r]   r$   rE   rX   r\   rZ   estatuss
             r-   	jobs_logsrg   G  s    H 5VYGGFI
5
!
!
!CD!!9VZ^!__ 	 	C#JJJJ	 	 D D D+,:+A''tS==DEE1Ls]]YZZ`aa;;;<<!CDs   -A 
B7AB22B7job_propertiesfiltersc                     |D ]n\  }}}|                      |          }|
|dk    r$ dS t          |                                |                                          }|dk    r|r|dk    r|r dS odS )z5Check if scheduled job matches all specified filters.N!=F=T)getr   lower)rh   ri   keyop_strpatternr1   matchs          r-   _matches_filtersrs   |  s     '  VW""3''=~~55w}}77cMM%MVt^^^554r/   rowsheadersaliasesfmtc           	      
   |rb|}| D ][}|}t          |          D ]8\  }}d| d}	|	|v r)|                    |	t          ||                             }9t          |           \dS t          t	          | |                     dS )z,Print output according to the chosen format.z{{.z}})ru   N)	enumeratereplacestrrP   	_tabulate)
rt   ru   rv   rw   templaterowlineifieldplaceholders
             r-   _print_outputr     s    
 0 	 	CD%g.. B B51e111$&&<<SQ[[AAD$KKKK	 	 	ig.../////r/   nc                 T    d}d}t          |           D ]}t          ||           d S )Nz[1Az[2K)end)rangerP   )r   LINE_UP
LINE_CLEARr   s       r-   _clear_liner     sA    GJ1XX ' 'g:&&&&&' 'r/   metrics_streamtable_headersc              #     K   |D ]}| |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 ]s\  }}|d         |         }||d          dt          d|d         z  |d         z  d	           dt          |d                    d
t          |d                    dgz  }tn)|dgt	          |          t	          |          z
  z  z  }|g}d| |fV  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   metricsr~   rt   gpu_idgpus           r-   _get_jobs_stats_rowsr     sA      " " "'***'*+f4a88S7#677'BV:WWYZ[[^^^G$7899mm|GThLi?j?jmmmGH-..ZZl78CT6U6UZZZ
 6? 	z'&/4@@ 	5RD3s88O,GFO0D0Dq0HIID"4)@)@AA  Vfof-=),,,S3':#;;cBV>WWYZ[[^^^#C(;$<==mm<PSThPiCjCjmmm  E7c-003s88;<<C5DVT!!!!!

r/   statszhf jobs stats <job_id>job_idsc                    | 1g }| D ]*}t          |          \  }|                    |           +|} t          |                                          d         |  d                               D             } t          |           dk    rt          d           dS g dg d	}	 t          j        	                    t          |                     5 }i | D ]"}|g}|d
 dd         D             z  }|g|<   #t          j
                    }fdD             }	t          |	|d           fd| D             }
t          |t          |
          D ]\  }}}|r                    |d           n||<   t          j
                    }||z
  t          k    rAt!          dt          |	          z              fdD             }	t          |	|d           |}	 ddd           dS # 1 swxY w Y   dS # t"          $ rY}|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 JobsNrG   rU   c                 J    g | ] }|j         r|j         j        nd dv |j        !S )UNKNOWNRUNNINGUPDATING)rf   stagerQ   r2   rY   s     r-   r4   zjobs_stats.<locals>.<listcomp>  sA     
 
 
$'J=
  IBYYY FYYYr/   r$   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)	rQ   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                 &    g | ]}d |v sd|v rdndS )r'   USAGEz-- / --z-- )r2   headers     r-   r4   zjobs_stats.<locals>.<listcomp>  s/    tttX^cVmmw&7H7H		ttttr/   r   c                 *    g | ]}|         D ]}|S r   r   r2   r#   r~   rows_per_job_ids      r-   r4   zjobs_stats.<locals>.<listcomp>  s,    ___&W]G^__#____r/   c                 F    g | ]}|                     |           dS )r#   r$   )r#   r   r   )fetch_job_metrics)r2   r#   rX   r$   r   s     r-   r4   zjobs_stats.<locals>.<listcomp>  sO        	 %&)&;&;6U^&;&_&_%2   r/   )kwargs_listr   c                 *    g | ]}|         D ]}|S r   r   r   s      r-   r4   zjobs_stats.<locals>.<listcomp>  s,    !g!g!g&_eOf!g!g#!g!g!g!gr/   r_   r`   ra   rb   zFailed to fetch job stats: )r.   appendr   whoami	list_jobsr   rP   multiprocessingpool
ThreadPooltimer   iflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALr   r   rc   rd   r   )r   r$   rE   
parsed_idsr#   headers_aliasesr   r~   last_update_time
total_rowsr   donert   nowre   rf   rX   r   r   s    `              @@@r-   
jobs_statsr     s    
 	& 	&F <VY O OFIf%%%%
5
!
!
!CJJLL(	
 
}}y}99
 
 

 7||q%&&&
 
 
M
 
 
O%E!,,S\\:: 	+d@BO! 0 0(.xttbopqprprbstttt+.%''#y{{____O___J*m_dKKK      &  K '9?Sal&m&m&m 
+ 
+"fd 3#''5555.2OF+ikk))-FFFC
OO 3444!g!g!g!gO!g!g!gJ!*m_dSSS'*$
+%	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+:  E E E+,:+A''tS==DEE1Ls]]YZZ`aa<<<==1DEs>   3,H D	G6)H 6G::H =G:>H 
I&AI!!I&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}}')quietc                    t          |          }|                    |          }g }g }	|pg D ]}
|
                    d          s|
                    d          r|
                    d          r6|
t          d          d         }d|v rt	          d| d           q|d	d
}}}n]|
t          d          d         }d|v r|                    dd          \  }}n|d
}}|                    d          rd	}|dd         }nd}|	                    |                                ||                                f           d|
v r{|
                    dd          \  }}|                    d          rd	}|dd         }nd}|                    |                                ||                                f           t	          d|
 d           g }|D ]}|j	        r|j	        j
        nd}| s|dvr|j        pd}|j        pg }|rd                    |          nd}|j        ||                                |d}t          ||          sxt          |j        pi |	          s|                    |           |sX|s?|dk    r9|r"dd                    d |D                        nd}t	          d|            n|dk    rt	          d           dS g d}g d}d |D             }dt"          t$          t&          f         d t(          t$                   fd!|r$|d"vr t+          fd#|D             |||           dS |dk    rt,          j        nt,          j        }t3          |||d$|%           dS )&z
List Jobs.rG   r   zlabel!=zlabel=Nrl   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.rk   *r   !)Warning: Ignoring invalid filter format ''. Use key=value format.r   r   r    )rQ   r:   rf   r;   json matching filters: , c                 &    g | ]\  }}}| | | S r   r   r2   kovs       r-   r4   zjobs_ps.<locals>.<listcomp>k  +    :_:_:_GAqRSa<<A<<:_:_:_r/   r   zNo jobs found[])r   IMAGE/SPACECOMMANDCREATEDSTATUSRUNTIME)rQ   r:   r;   createdrf   runtimec                 ,    g | ]}t          |          S r   r   r   s     r-   r4   zjobs_ps.<locals>.<listcomp>s  s!    >>>$$>>>r/   r3   r%   c           
      `   |                      di           }|                      d          pi }|                      d          pg }|rd                    |          nd}t          |                      dd                    t          |                      d          pd          t          |          |                      d	          r$| d	         d d
                             dd          ndt          |                     dd                    t          |                     d                    gS )Nrf   	durationsr;   r   r   rQ   r   docker_image
created_at   Tr   r   running_secs)rm   joinr{   r   rz   r   )r3   rf   r   cmdcommand_strs        r-   row_fnzjobs_ps.<locals>.row_fnu  s   (B''HH[))/R	hhy!!'R'*5chhsmmmr""##.11:U;;%%9=,9O9OZDss#++C555UZ

7I..//IMM.99::
 	
r/   tabler   c                 &    g | ]} |          S r   r   r2   r3   r   s     r-   r4   zjobs_ps.<locals>.<listcomp>  !    666vvd||666r/   rQ   itemsr   r   id_keyru   r   )r   r   
startswithr   rP   r*   endswithr   rn   rf   r   r   r;   r   rQ   rs   rH   r   r{   r   listr   r   r   r  r!   )r   r$   rE   r   r   r   rX   jobsri   labels_filtersf
label_part	label_keyoplabel_valuero   r1   filtered_jobsrY   rf   image_or_spacer   r   propsfilters_msgru   rv   r  output_formatr   s                                @r-   jobs_psr    sX   6 5
!
!
!C==9=--D*,G13N\r ![ ![<<	""  	[all8&<&<  	[||I&& s9~~//0
*$$vQ[vvv   -7s{2		s8}}/
*$$-7-=-=c1-E-E*I{{-7{I%%c** B )#2#IIB!!9??#4#4b+:K:K:M:M"NOOOOAXXaJC||C   #2#hNNCIIKKU[[]];<<<<YaYYYZZZZ M " "%(Z>!!Y 	v%<<<)2UkR'*5chhsmmmv&,,..]hiiw// 	
 0b.AA 	S!!!!  	6))fmub		:_:_W^:_:_:_0`0`bbbsuK/+//0000v$KKKRRRGHHHG>>>>>E
T#s(^ 
S	 
 
 
 
  
& 1116666666&QQQQQ-3v-=-=))<CU 	
 	
 	
 	
 	
 	
r/   hardwarezhf jobs hardwarec                     t                      } |                                 }g d}g d}g }|D ]}d}|j        r)|j        j         d|j        j         d|j        j         d}|j        rd|j        dnd	}|j        rd|j        d
z  dnd	}|                    |j        |j	        pd|j
        |j        |j        |||g           |st          d           dS t          |||d           dS )z(List available hardware options for Jobs)NAMEzPRETTY NAMECPURAMSTORAGEACCELERATORzCOST/MINz	COST/HOUR)rU   
prettyNamecpuramephemeralStorageacceleratorcostMincostHourr   zx z ()$z.4ffree<   z.2fzNo hardware options foundN)r   list_jobs_hardwarer#  quantitymodelvramunit_cost_usdr   rU   pretty_namer   r!  ephemeral_storagerP   r   )	rX   hardware_listr   r   rt   hwaccelerator_infocost_min	cost_hours	            r-   jobs_hardwarer6    sP    ,,C**,,MlllMtttO"$D 
 
> 	l"$."9kkR^=QkkUWUcUhkkk131AM-r'----v797GS3(2-3333V	$"$ 		
 	
 	
 	
  )***$=====r/   inspectzhf jobs inspect <job_id>z*Job IDs to inspect (or 'namespace/job_id')c                    g }| D ]*}t          |          \  }|                    |           +|} t          |          	 fd| D             }t          t	          j        d |D             dt                               dS # t          $ rY}|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 JobsrG   c                 >    g | ]}                     |           S )r   )inspect_job)r2   r#   rX   r$   s     r-   r4   z jobs_inspect.<locals>.<listcomp>  s)    ZZZvCCZZZr/   c                 ,    g | ]}t          |          S r   r   r   s     r-   r4   z jobs_inspect.<locals>.<listcomp>  s    666#&++666r/      indentdefaultNr_   r`   ra   rb   zFailed to inspect job: )r.   r   r   rP   r   dumpsr{   r   rc   rd   r   )	r   r$   rE   r   r#   r  re   rf   rX   s	    `      @r-   jobs_inspectrA    s8    J " "8KK	&!!!!G
5
!
!
!C
AZZZZZRYZZZdj66666q#NNNOOOOO A A A+,:+A''tS==DEE1Ls]]YZZ`aa8Q8899q@As   AB	 	
C,AC''C,cancelzhf jobs cancel <job_id>c                 H   t          | |          \  } }t          |          }	 |                    | |           dS # t          $ rY}|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 JobrG   r   Nr_   r`   ra   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r.   r   
cancel_jobr   rc   rd   r   )r#   r$   rE   rX   re   rf   s         r-   jobs_cancelrE    s     5VYGGFI
5
!
!
!C	@f	::::: @ @ @+,:+A''tS==DEE1Ls]][\\bcc7A7788a?@s   > 
B!ABB!zFRun UV scripts (Python with inline dependencies) on HF infrastructure.uv)rU   )zhf jobs uv run my_script.pyz1hf jobs uv run ml_training.py --flavor a10g-smallz+hf jobs uv run --with transformers train.pyzNhf jobs uv run -v hf://org/my-model:/data -v hf://buckets/org/b:/mnt script.pyscriptscript_argswith_pythonc                    t          ||          }t          ||	          }t          |          }|                    | |pg |||||t          |          t	          |          ||
|          }t          d|j                    t          d|j                    |rdS |                    |j        |j	        j
        d          D ]}t          |           dS )8Run a UV script (local file or URL) on HF infrastructurerG   )rG  rH  dependenciesrJ  r:   r<   r=   rH   rI   rB   rC   r$   rJ   rK   NTrL   )r   r   
run_uv_jobrO   r    rP   rQ   rR   rS   rT   rU   )rG  rH  r:   rB   r<   r=   r>   r?   r@   rA   rC   rD   r$   rE   rI  rJ  rV   rW   rX   rY   rZ   s                        r-   jobs_uv_runrO    s   : C**G66K
5
!
!
!C
..%2 ''f%%   C 

*#&
*
*+++	
cg

    !!39>RV!WW  c



 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                 
   t          ||	          }t          ||
          }t          |          }|                    ||| ||||t          |          t	          |          |||          }t          d|j                    dS )zSchedule a Job.rG   )r:   r;   rQ  rR  rS  r<   r=   rH   rI   rB   rC   r$   Scheduled Job created with ID: N)r   r   create_scheduled_jobrO   r    rP   rQ   )rQ  r:   r;   rR  rS  r<   r=   r>   r?   r@   rA   rB   rC   r$   rE   rV   rW   rX   scheduled_jobs                      r-   scheduled_runrX  )  s    . C**G66K
5
!
!
!C,, ''f%% -  M 

>M,<
>
>?????r/   zhf jobs scheduled psz1Show all scheduled Jobs (default hides suspended)c                    t          |          }|                    |          }g }|pg D ]}	d|	v rz|	                    dd          \  }
}|
                    d          rd}|
dd         }
nd}|                    |
                                ||                                f           t          d	|	 d
           g }|D ]}|j        pd}| s|r|j        j	        pd}|j        j
        pg }|rd                    |          nd}|j        |t          |          |d}t          ||          so|                    |           |sX|s?|dk    r9|r"dd                    d |D                        nd}t          d|            n|dk    rt          d           dS g d}g d}d |D             }dt          t          t           f         dt"          t                   fd|r$|dvr t%          fd|D             |||           dS |dk    rt&          j        nt&          j        }t-          |||d|           dS ) zList scheduled JobsrG   r   rl   r   r   rk   Nr   r   r   Fr   r   )rQ   r:   rR  r;   r   r   r   c                 &    g | ]\  }}}| | | S r   r   r   s       r-   r4   z scheduled_ps.<locals>.<listcomp>  r   r/   r   zNo scheduled jobs foundr   )IDSCHEDULEr   r   zLAST RUNzNEXT RUNSUSPEND)rQ   rQ  r:   r;   lastnextrR  c                 ,    g | ]}t          |          S r   r   )r2   sjs     r-   r4   z scheduled_ps.<locals>.<listcomp>  s!    <<<##<<<r/   r3   r%   c                    |                      di           }|                      di           }|                     d          }|                     d          pg }d}|r9|                     d          r$|d         d d                             dd	          }d}|                     d
          r$|d
         d d                             dd	          }|rd	                    |          nd}t          |                      dd                    t          |                      d          pd          t	          |                     d          pd          t	          |          ||t          |                      dd                    gS )Njob_specrf   last_jobr;   r   atr   r   r   next_job_run_atrQ   r   rQ  r   rR  F)rm   rz   r   r{   r   )r3   rc  rf   rd  r   last_job_atnext_runr   s           r-   r   zscheduled_ps.<locals>.row_fn  so   88J++(B''::j))ll9%%+ 	@T** 	@"4."-55c3??K::'(( 	H/0"5==c3GGH'*5chhsmmmr""##$$-..n55>??%%E**++
 	
r/   r   c                 &    g | ]} |          S r   r   r  s     r-   r4   z scheduled_ps.<locals>.<listcomp>  r  r/   rQ   r  )r   list_scheduled_jobsr*   r	  r   rn   rP   rR  rc  r   r;   r   rQ   r{   rs   r   r   r
  r   r   r   r  r!   )r   r$   rE   r   r   r   rX   scheduled_jobsri   r  ro   r1   r  r  rW  rR  r  r   r   r  r  ru   rv   r  r  r   s                            @r-   scheduled_psrl  U  s   6 5
!
!
!C,,y,AAN*,G\r [ [!88aJC||C   #2#hNNCIIKKU[[]];<<<<YaYYYZZZZ M' 
, 
,'05 	w 	&/<E$,2'*5chhsmmm$'.SQX\\fqrrw// 	]++++  	6))fmub		:_:_W^:_:_:_0`0`bbbsuK9K99::::v$KKK]]]GOOOG<<m<<<E
T#s(^ 
S	 
 
 
 
.  
& 1116666666&QQQQQ-3v-=-=))<CU 	
 	
 	
 	
 	
 	
r/   zhf jobs scheduled inspect <id>scheduled_job_idsz>Scheduled Job IDs to inspect (or 'namespace/scheduled_job_id')c                    g }| D ]*}t          |          \  }|                    |           +|} t          |          fd| D             }t          t	          j        d |D             dt                               dS )z:Display detailed information on one or more scheduled JobsrG   c                 >    g | ]}                     |           S )scheduled_job_idr$   )inspect_scheduled_job)r2   rq  rX   r$   s     r-   r4   z%scheduled_inspect.<locals>.<listcomp>  s=        	!!3Cy!YY  r/   c                 ,    g | ]}t          |          S r   r   )r2   rW  s     r-   r4   z%scheduled_inspect.<locals>.<listcomp>  s     PPPf]++PPPr/   r<  r=  N)r.   r   r   rP   r   r@  r{   )rm  r$   rE   r   r#   rk  rX   s    `    @r-   scheduled_inspectrt    s     J# " "8KK	&!!!!"
5
!
!
!C     1  N 
$*PPPPPYZdg
h
h
hiiiiir/   deletezhf jobs scheduled delete <id>rq  c                 z    t          | |          \  } }t          |          }|                    | |           dS )zDelete a scheduled Job.rG   rp  N)r.   r   delete_scheduled_jobrq  r$   rE   rX   s       r-   scheduled_deletery    K     #??OQZ"["[i
5
!
!
!C.>)TTTTTr/   zhf jobs scheduled suspend <id>c                 z    t          | |          \  } }t          |          }|                    | |           dS )z Suspend (pause) a scheduled Job.rG   rp  N)r.   r   suspend_scheduled_jobrx  s       r-   scheduled_suspendr}    sK     #??OQZ"["[i
5
!
!
!C/?9UUUUUr/   resumezhf jobs scheduled resume <id>c                 z    t          | |          \  } }t          |          }|                    | |           dS )z!Resume (unpause) a scheduled Job.rG   rp  N)r.   r   resume_scheduled_jobrx  s       r-   scheduled_resumer    rz  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                    t          ||          }t          ||          }t          |          }|                    ||pg | |||||||t          |	          t	          |
          |||          }t          d|j                    dS )rL  rG   )rG  rH  rQ  rR  rS  rM  rJ  r:   r<   r=   rH   rI   rB   rC   r$   rU  N)r   r   create_scheduled_uv_jobrO   r    rP   rQ   )rQ  rG  rH  rR  rS  r:   rB   r<   r=   r>   r?   r@   rA   rC   r$   rE   rI  rJ  rV   rW   rX   rY   s                         r-   scheduled_uv_runr     s    : C**G66K
5
!
!
!C

%
%%2 ''f%% &  C" 

4CF
4
455555r/   rH   c                 h    | sdS i }| D ](}d|v r|                     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.
    Nrl   r   r   )r*   )rH   
labels_map	label_varro   r1   s        r-   rO   rO   8  sa      t!#J    	03y0@0@Y__S!,,,yRTo
U
3r/   c                    d t          g | |R  D             }t          t          j                    j        t          |          dz            }t          |          t          |          z   |k    r|                    t          |                    }||xx         dz  cc<   t          |          t          |          z   |k    r.|t          |          z
  t          |          z
  ||         z   ||<   t          |          t          |          z   |k     dt          |          z  j        | }g }|	                     |j        |            |	                     |j        d |D                         | D ]9}d t          ||          D             }|	                     |j        |            :d
                    |          S )z
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c                 @    g | ]}t          d  |D                       S )c              3   N   K   | ] }t          t          |                    V  !d S Nr   r{   )r2   xs     r-   	<genexpr>z'_tabulate.<locals>.<listcomp>.<genexpr>Q  s.      //ac#a&&kk//////r/   )max)r2   cols     r-   r4   z_tabulate.<locals>.<listcomp>Q  s/    OOOC#//3/////OOOr/      r   z{{:{}}} c                     g | ]}d |z  S )-r   )r2   ws     r-   r4   z_tabulate.<locals>.<listcomp>[  s    $A$A$AS1W$A$A$Ar/   c                     g | ]Q\  }}t          t          |                    |k    rt          |          d |dz
           dz   nt          |          RS )N   z...r  )r2   r  	col_widths      r-   r4   z_tabulate.<locals>.<listcomp>]  sf     
 
 
9 033q66{{Y/F/FCFF?Y]?#e++CPQFF
 
 
r/   
)r   r  shutilget_terminal_sizecolumnsr   sumindexr   r   r   )	rt   ru   
col_widthsterminal_widthcol_to_minimize
row_formatlinesr~   row_format_argss	            r-   r|   r|   J  s    PO3;N;Ng;N;N;NOOOJ133;S\\B=NOON
g,,Z
(>
9
9$**3z??;;?###)###w<<#j//)^;;*83z??*JSQX\\*Y\fgv\w*wJ'	 g,,Z
(>
9
9
 4*s7||+3Z@JE	LL""G,---	LL""$A$Aj$A$A$ABCCC : :
 
 #C 4 4
 
 
 	&Z&8999999Ur/   r   queuefunc.kwargsc                 F     |di |D ]}|                      |           d S )Nr   )put)r  r  r  results       r-   _write_generator_to_queuer  h  s<    $....  		& r/   r   r   c             #      K   t                       fd|D             }	 	 	                     d          V  n?# t          $ r2 t          d |D                       r                                rY nY nw xY wZn# t
          $ r Y nw xY w	 d |D              dS # t          j        $ r Y dS w xY w# 	 d |D              w # t          j        $ r Y w w xY wxY 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                 L    g | ] }                     t          |f          !S r   )apply_asyncr  )r2   r  r  r   r  s     r-   r4   z&iflatmap_unordered.<locals>.<listcomp>}  s2    rrr\bT%%&?%vAVWWrrrr/   T皙?rC   c              3   >   K   | ]}|                                 V  d S r  )readyr2   async_results     r-   r  z%iflatmap_unordered.<locals>.<genexpr>  s.      NN|))++NNNNNNr/   c                 :    g | ]}|                     d           S )r  r  )rm   r  s     r-   r4   z&iflatmap_unordered.<locals>.<listcomp>  s)    NNN\d++NNNr/   N)r	   rm   r   r   emptyKeyboardInterruptr   TimeoutError)r   r  r   async_resultsr  s   ``  @r-   r   r   m  sf      ggErrrrrrfqrrrM	iii------   NNNNNNN SXS^S^S`S` E	
    	NNNNNNNN+ 	 	 	DD		NNNNNNN+ 	 	 	D	s   B A  B  7A<7B ;A<<B  B6 
BB6 BB6 B   B32B36C8CCCCCC)NNNNNNNNFNN)FNNN)NNN)FNNNNF)r%   N)NN)NNNNNNNNNNFNNNN)NNNNNNNNNNNN)NNNNNNNNNNNNNNNN)o__doc__r   r   multiprocessing.poolr  r   collections.abcr   r   dataclassesr   r   r  r   r	   typingr
   r   r   typerhuggingface_hubr   huggingface_hub.errorsr   r   huggingface_hub.utilsr   $huggingface_hub.utils._cache_managerr   huggingface_hub.utils._parsingr   
_cli_utilsr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   
get_logger__name__loggerr{   tupler.   SUGGESTED_FLAVORSr   ArgumentImageArgOptionImageOpt	FlavorOptr
  	LabelsOpt
TimeoutOptbool	DetachOptNamespaceOptWithOpt	PythonOpt
SuspendOptConcurrencyOptScheduleArg	ScriptArgScriptArgsArg
CommandArgJobIdArg	JobIdsArgScheduledJobIdArgjobs_clir;   r[   intrg   r   rs   r   r   r   r   r  r6  rA  rE  uv_app	add_typerrO  scheduled_apprX  rl  rt  ry  r}  r  scheduled_uv_appr  rO   r|   r   r  r   r   r   r   r/   r-   <module>r     sV  0 0d            . . . . . . . .                     * * * * * * * * * *  ) ) ) ) ) ) ; ; ; ; ; ; ; ; ) ) ) ) ) ) = = = = = = : : : : : :                                 & 
	H	%	%. .t .cSVY]S]oH^ . . . .8 XWMWWW   EN'   $JEL=   DEL D  	 IELB  	 $JELe  
 ELB  	 $JELe   IEL4   $JELD  	 4KEL0  
 4KELG   ENf   EN3  	 IEN'   IEN"  
 EN-   IEN.  	 ENA    =?@@@ 
	.5    	 	 #'"' ''' 
' 	'
 ' ' ' !' ' ' ' ' ' 
' ' '	 	'T 

     $ 	 	"')D )D)D E	
 	
 	
	)D d
 J	
 	
 	
	)D$ %)D& ')D( 
))D )D )D )DXT#s(^ d5cSVCW>X ]a    0T#)_- 0S	 0DQTI 0\_bf\f 0ko 0 0 0 0"'3 '4 ' ' ' '!)$sCx.!9JNs)eD#tDsO4456   8 
'%=$>??"SE SESESE SE 
	SE SE SE @?SEl 
$,!@AA 	" 	 	/y
 y
	=	
 	
 	
	
y
 y
 y
 S	DQ	
 	
 	
	y
& d
ghhh	j'y
. /y
0 
1y
 y
 y
 BAy
x 
*(:';<<> > > =<>B 
)'A&BCC #A AS	=	
 	
 	
	A A A 
A A A DCA< 
(&?%@AA #@ @@@ @ 
	@ @ @ BA@( 
d	e	e	e   6  % % % 	.5    	 	 "&#'"!, ,,, , 	,
 
, , , , , !, , , , , ,  !," 
#, , ,	 	,^ #QRRR   ={  3 3 3 	.5NO    "&#'"$@ $@$@$@ $@ 	$@
  $@ 
$@ $@ $@ $@ $@ !$@ $@ $@ $@ $@  
!$@ $@ $@ 
$@N t'=&>?? 	" 	 	/f
 f
	D	
 	
 	
	
f
 f
 f
 S	DQ	
 	
 	
	f
& d
ghhh	j'f
. /f
0 
1f
 f
 f
 @?f
R y,L+MNN #j j S	Q	
 	
 	
	j j j 
j j j ONj0 x+J*KLL #U U'UU U 
	U U U MLU y,L+MNN #V V'VV V 
	V V V ONV x+J*KLL #U U'UU U 
	U U U MLU !=&QRRR    (t  4 4 4 	.58F    "&"&#'"%*6 *6*6*6 *6 	*6
  *6 *6 *6 
*6 *6 *6 *6 *6 !*6 *6 *6  !*6" #*6$ %*6& 
'*6 *6 *6 *6`d3i$. 4S>D3H    $DcCi) DI #    6 GCLLU1X Xc8A;>N5O Y] bf    



)
3#
$ d	
 a[     r/   