
    "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 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 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)deque)CallableIterableasdict)fnmatch)EmptyQueue)	AnnotatedAnyTypeVar)SpaceHardware)CLIErrorHfHubHTTPError)logging)_format_size   )
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       b/lsinfo/ai/hellotax_ai/base_platform/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.pyzVhf jobs run -v hf://gpt2:/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>)r9   rM   z-fz--followzqFollow log output (stream until the job completes). Without this flag, only currently available logs are printed.tailz-nz--tailz1Number of lines to show from the end of the logs.c                    t          | |          \  } }|r|t          d          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)zFetch the logs of a Job.

    By default, prints currently available logs and exits (non-blocking).
    Use --follow/-f to stream logs in real-time until the job completes.
    NzcCannot use --follow and --tail together. Use --follow to stream logs or --tail to show recent logs.rG   rL   )maxlen  'Job not found. Please check the job ID.  <Access denied. You may not have permission to view this job.zFailed to fetch job logs: )	r.   r   r   rS   r   rP   r   responsestatus_code)
r#   rM   r]   r$   rE   rX   r\   rZ   estatuss
             r-   	jobs_logsrh   G  s1   : 5VYGGFI 
$"q
 
 	
 5
!
!
!CD!!9V!TTd+++D 	 	C#JJJJ	 	 D D D+,:+A''tS==DEE1Ls]]YZZ`aa;;;<<!CDs   ?A9 9
CACC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)ri   rj   keyop_strpatternr1   matchs          r-   _matches_filtersrt   {  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}})rv   N)	enumeratereplacestrrP   	_tabulate)
ru   rv   rw   rx   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   ru   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)rg   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`   ra   rb   rc   zFailed to fetch job stats: )r.   appendr   whoami	list_jobsr   rP   multiprocessingpool
ThreadPooltimer   iflatmap_unorderedr   popSTATS_UPDATE_MIN_INTERVALr   r   rd   re   r   )r   r$   rE   
parsed_idsr#   headers_aliasesr   r   last_update_time
total_rowsr   doneru   nowrf   rg   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=Nrm   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.rl   *r   !)Warning: Ignoring invalid filter format ''. Use key=value format.r   r   r    )rQ   r:   rg   r;   json matching filters: , c                 &    g | ]\  }}}| | | S r   r   r2   kovs       r-   r4   zjobs_ps.<locals>.<listcomp>j  +    :_:_:_GAqRSa<<A<<:_:_:_r/   r   zNo jobs found[])r   IMAGE/SPACECOMMANDCREATEDSTATUS)rQ   r:   r;   createdrg   c                 ,    g | ]}t          |          S r   r   r   s     r-   r4   zjobs_ps.<locals>.<listcomp>r  s!    >>>$$>>>r/   r3   r%   c           
         |                      d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                    gS )Nrg   r;   r   r   rQ   r   docker_image
created_at   Tr   r   )rn   joinr|   r   r{   )r3   rg   cmdcommand_strs       r-   row_fnzjobs_ps.<locals>.row_fnt  s    (B''hhy!!'R'*5chhsmmmr""##.11:U;;%%9=,9O9OZDss#++C555UZ

7I..//
 	
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_keyrv   r   )r   r   
startswithr   rP   r*   endswithr   ro   rg   r   r   r;   r   rQ   rt   rH   r   r|   r   listr   r   r   r   r!   )r   r$   rE   r   r   r   rX   jobsrj   labels_filtersf
label_part	label_keyoplabel_valuerp   r1   filtered_jobsrY   rg   image_or_spacer   r   propsfilters_msgrv   rw   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GGGG===G>>>>>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        d|j        d	nd}|j        d|j        d
z  dnd}|                    |j        |j	        pd|j
        |j        |||g           |st          d           dS t          |||d           dS )z(List available hardware options for Jobs)NAMEzPRETTY NAMECPURAMACCELERATORzCOST/MINz	COST/HOUR)rU   
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   rU   pretty_namer  r  rP   r   )	rX   hardware_listr   r   ru   hwaccelerator_infocost_min	cost_hours	            r-   jobs_hardwarer/    s>    ,,C**,,MaaaM```O"$D o o > 	l"$."9kkR^=QkkUWUcUhkkk131A1M-r'----SX797G7S3(2-3333Y^	RWbn5rvrvGWYaclmnnnn )***$=====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`   ra   rb   rc   zFailed to inspect job: )r.   r   r   rP   r   dumpsr|   r   rd   re   r   )	r   r$   rE   r   r#   r  rf   rg   rX   s	    `      @r-   jobs_inspectr:    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`   ra   rb   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r.   r   
cancel_jobr   rd   re   r   )r#   r$   rE   rX   rf   rg   s         r-   jobs_cancelr>    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.pyzFhf jobs uv run -v hf://gpt2:/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   )r@  rA  dependenciesrC  r:   r<   r=   rH   rI   rB   rC   r$   rJ   rK   NTrL   )r   r   
run_uv_jobrO   r    rP   rQ   rR   rS   rT   rU   )r@  rA  r:   rB   r<   r=   r>   r?   r@   rA   rC   rD   r$   rE   rB  rC  rV   rW   rX   rY   rZ   s                        r-   jobs_uv_runrH    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;   rJ  rK  rL  r<   r=   rH   rI   rB   rC   r$   Scheduled Job created with ID: N)r   r   create_scheduled_jobrO   r    rP   rQ   )rJ  r:   r;   rK  rL  r<   r=   r>   r?   r@   rA   rB   rC   r$   rE   rV   rW   rX   scheduled_jobs                      r-   scheduled_runrQ    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   rm   r   r   rl   Nr   r   r   Fr   r   )rQ   r:   rK  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   rJ  r:   r;   lastnextrK  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_specrg   last_jobr;   r   atr   r   r   next_job_run_atrQ   r   rJ  r   rK  F)rn   r{   r   r|   r   )r3   r\  rg   r]  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   ro   rP   rK  r\  r   r;   r   rQ   r|   rt   r   r   r  r   r   r   r   r!   )r   r$   rE   r   r   r   rX   scheduled_jobsrj   r
  rp   r1   r  r  rP  rK  r  r   r   r  r  rv   rw   r  r  r   s                            @r-   scheduled_psre  G  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   rj  rX   r$   s     r-   r4   z%scheduled_inspect.<locals>.<listcomp>  s=        	!!3Cy!YY  r/   c                 ,    g | ]}t          |          S r   r   )r2   rP  s     r-   r4   z%scheduled_inspect.<locals>.<listcomp>  s     PPPf]++PPPr/   r5  r6  N)r.   r   r   rP   r   r9  r|   )rf  r$   rE   r   r#   rd  rX   s    `    @r-   scheduled_inspectrm    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>rj  c                 z    t          | |          \  } }t          |          }|                    | |           dS )zDelete a scheduled Job.rG   ri  N)r.   r   delete_scheduled_jobrj  r$   rE   rX   s       r-   scheduled_deleterr    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   ri  N)r.   r   suspend_scheduled_jobrq  s       r-   scheduled_suspendrv    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   ri  N)r.   r   resume_scheduled_jobrq  s       r-   scheduled_resumerz    rs  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 )rE  rG   )r@  rA  rJ  rK  rL  rF  rC  r:   r<   r=   rH   rI   rB   rC   r$   rN  N)r   r   create_scheduled_uv_jobrO   r    rP   rQ   )rJ  r@  rA  rK  rL  r:   rB   r<   r=   r>   r?   r@   rA   rC   r$   rE   rB  rC  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.
    Nrm   r   r   )r*   )rH   
labels_map	label_varrp   r1   s        r-   rO   rO   *  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>C  s.      //ac#a&&kk//////r/   )max)r2   cols     r-   r4   z_tabulate.<locals>.<listcomp>C  s/    OOOC#//3/////OOOr/      r   z{{:{}}} c                     g | ]}d |z  S )-r   )r2   ws     r-   r4   z_tabulate.<locals>.<listcomp>M  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>O  sf     
 
 
9 033q66{{Y/F/FCFF?Y]?#e++CPQFF
 
 
r/   
)r   r  shutilget_terminal_sizecolumnsr   sumindexr   r   r   )	ru   rv   
col_widthsterminal_widthcol_to_minimize
row_formatlinesr   row_format_argss	            r-   r}   r}   <  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  Z  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>o  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>u  s.      NN|))++NNNNNNr/   c                 :    g | ]}|                     d           S )r  r  )rn   r  s     r-   r4   z&iflatmap_unordered.<locals>.<listcomp>|  s)    NNN\d++NNNr/   N)r
   rn   r	   r   emptyKeyboardInterruptr   TimeoutError)r   r  r   async_resultsr  s   ``  @r-   r   r   _  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   collectionsr   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   
_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[   intrh   r   rt   r   r   r   r   r  r/  r:  r>  uv_app	add_typerrH  scheduled_apprQ  re  rm  rr  rv  rz  scheduled_uv_appr}  rO   r}   r   r  r   r   r   r   r/   r-   <module>r     sL  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 

mmm    	 	"'.D .D.D E	
 	
 	
	.D d
D	
 	
 	
	.D$ %.D& '.D( 
).D .D .D .Db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 	" 	 	/w
 w
	=	
 	
 	
	
w
 w
 w
 S	DQ	
 	
 	
	w
& d
ghhh	j'w
. /w
0 
1w
 w
 w
 BAw
t 
*(:';<<> > > =<>, 
)'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/   