Ë
    Z²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„Z4eD � cg c]  } | jj                  dk7  sŒ| jj                  ‘Œ  c} Z6dZ7ee2 ejp                  d¬«      f   Z9ee2dz   ejt                  d¬«      f   Z;eedz   ejt                  d¬«      f   Z<ee=e2   dz   ejt                  ddd¬«      f   Z>ee2dz   ejt                  d¬«      f   Z?ee@ ejt                  ddd¬«      f   ZAee2dz   ejt                  d ¬«      f   ZBee=e2   dz   ejt                  d!d"¬«      f   ZCee2dz   ejt                  d#d$d%¬«      f   ZDee@dz   ejt                  d&¬«      f   ZEee@dz   ejt                  d'¬«      f   ZFee2 ejp                  d(¬«      f   ZGee2 ejp                  d)¬«      f   ZHee=e2   dz   ejp                  d*¬«      f   ZIee=e2    ejp                  d+¬«      f   ZJee2 ejp                  d,¬«      f   ZKee=e2   dz   ejp                  d-¬«      f   ZLee2 ejp                  d.¬«      f   ZM e.d/¬«      ZNeNjŸ                  d0d1d2ig d3¢¬4«      	 	 	 	 	 	 	 	 	 	 	 d§d5e9d6eJd7e!d8e%d9e>d:e'd;e d<e$d=e<d>e?d?eAdeBd@e&ddfdA„«       ZPeNjŸ                  dBg dC¢¬D«      	 	 	 	 d¨deKdEee@ ejt                  dFdGdH¬«      f   dIeeQdz   ejt                  dJdKdL¬«      f   deBd@e&ddfdM„«       ZRdNeSe2e2f   dOe=e3e2e2e2f      de@fdP„ZTdQe=e=e2eQz        dRe=e2   dSe=e2   dTe2dz  ddf
dU„ZUdVeQddfdW„ZVde2dXeeSe2ef      dYe=e2   dee3e@e2e=e=e2eQz        f      fdZ„ZWeNjŸ                  d[d\g¬D«      	 	 	 d©d]eLdeBd@e&ddfd^„«       ZXeNjŸ                  d_d`dag¬D«      	 	 	 	 	 	 dªdbee@ ejt                  dcddde¬«      f   deBd@e&dfee=e2   dz   ejt                  dFdgdh¬«      f   diee2dz   ejt                  dj¬«      f   dke#ddfdl„«       ZYeNjŸ                  dmdng¬D«      d«do„«       ZZeNjŸ                  dpdqg¬D«      	 	 d¬d]ee=e2    ejp                  dr¬«      f   deBd@e&ddfds„«       Z[eNjŸ                  dtdug¬D«      	 	 d¬deKdeBd@e&ddfdv„«       Z\ e.dw¬«      Z]eNj½                  e]dx¬y«       e]jŸ                  d0d1d2ig dz¢¬4«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d­d{eHd|eId5e;d=e<d7e!d8e%d9e>d:e'd;e d<e$d>e?d?eAdeBd@e&d}eCd~eDddf"d„«       Z_ e.d€¬«      Z`eNj½                  e`d�¬y«       e`jŸ                  d0d1d2id‚g¬4«      	 	 	 	 	 	 	 	 	 	 	 	 d®dƒeGd5e9d6eJd„eEd…eFd7e!d8e%d9e>d:e'd;e d<e$d=e<d>e?deBd@e&ddf d†„«       Zae`jŸ                  d_d‡g¬D«      	 	 	 	 	 	 dªdbee@ ejt                  dcdddˆ¬«      f   deBd@e&dfee=e2   dz   ejt                  dFdgdh¬«      f   diee2dz   ejt                  dj¬«      f   dke#ddfd‰„«       Zbe`jŸ                  dpdŠg¬D«      	 	 d¬d‹ee=e2    ejp                  dŒ¬«      f   deBd@e&ddfd�„«       Zce`jŸ                  dŽd�g¬D«      	 	 d¬d�eMdeBd@e&ddfd‘„«       Zde`jŸ                  d„d’g¬D«      	 	 d¬d�eMdeBd@e&ddfd“„«       Zee`jŸ                  d”d•g¬D«      	 	 d¬d�eMdeBd@e&ddfd–„«       Zf e.d—¬«      Zge`j½                  egdx¬y«       egjŸ                  d0d1d2id˜d™g¬4«      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d¯dƒeGd{eHd|eId„eEd…eFd5e;d=e<d7e!d8e%d9e>d:e'd;e d<e$d>e?deBd@e&d}eCd~eDddf&dš„«       Zhd›e=e2   dz  deSe2e2f   dz  fdœ„ZidQe=e=e2eQz        dRe=e2   de2fd�„Zj edž«      ZkdŸeek   d ed¡eek   f   d¢eSddfd£„Zld¤ejÚ                  jÜ                  d ed¡eek   f   d¥e=eS   deek   fd¦„Zoyc c} w )°aÂ  Contains commands to interact with jobs on the Hugging Face Hub.

Usage:
    # run a job
    hf jobs run <image> <command>

    # List running or completed jobs
    hf jobs ps [-a] [-f key=value] [--format 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                 óü   — | st        d«      ‚| j                  d«      dkD  rt        d| › d�«      ‚d| vr| |fS | j                  dd«      \  }}|r|st        d| › d�«      ‚|�||k7  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'.z(Conflicting namespace: got --namespace='z ' but job ID implies namespace='ú')r   ÚcountÚsplit)r"   r#   Úextracted_namespaceÚparsed_job_ids       úW/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/huggingface_hub/cli/jobs.pyÚ_parse_namespace_from_job_idr-   i   sÁ   € ñ ÜÐ0Ó1Ð1à‡|�|�CÓ˜1ÒÜÐUÐV\ÐU]Ð]_Ð`ÓaÐaà
�&ÑØ�yÐ Ð à)/¯©°c¸1Ó)=Ñ&Ð˜Ù¡mÜÐUÐV\ÐU]Ð]_Ð`ÓaÐaàÐ Ð.AÒ!AÜØ6°y°kÐAaÐbuÐavÐvwÐxó
ð 	
ð Ð-Ð-Ð-ó    z	zero-a10ggš™™™™™¹?zThe Docker image to use.)Úhelpz.Use a custom Docker image with `uv` installed.ztFlavor for the hardware, as in HF Spaces. Run 'hf jobs hardware' to list available flavors. Defaults to `cpu-basic`.z-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ÚexamplesÚimageÚcommandÚenvÚsecretsÚlabelÚvolumeÚenv_fileÚsecrets_fileÚflavorÚtimeoutÚdetachÚtokenc                 óŽ  — t        ||«      }t        ||«      }t        |¬«      }|j                  | |||t        |«      t	        |«      ||	|¬«	      }t        d|j                  › �«       t        d|j                  › �«       |
ry|j                  |j                  |j                  j                  d¬«      D ]  }t        |«       Œ y)z
Run a Job.©r?   )	r4   r5   r6   r7   ÚlabelsÚvolumesr<   r=   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)r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r#   r?   Úenv_mapÚsecrets_mapÚapiÚjobÚlogs                     r,   Újobs_runrU     sÂ   € ô4 ˜C Ó*€GÜ ¨Ó6€Kä
˜5Ô
!€CØ
�+‰+ØØØØÜ  Ó'Ü˜fÓ%ØØØð ó 
€Cô 
Ð! #§&¡& Ð
*Ô+Ü	ˆI�c—g‘g�YÐ
Ô áØà×!Ñ!¨¯©¸3¿9¹9¿>¹>ÐRVÐ!Ó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>)r3   rG   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                 óV  — t        | |«      \  } }t        |¬«      }	 |j                  | |||¬«      }|D ]  }t        |«       Œ y# t        $ rZ}|j
                  �|j
                  j                  nd}	|	dk(  rt        d«      |‚|	dk(  rt        d«      |‚t        d|› �«      |‚d}~ww xY w)	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).
    rA   )r"   r#   rG   rW   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   rM   rJ   r   ÚresponseÚstatus_coder   )
r"   rG   rW   r#   r?   rR   rV   rT   ÚeÚstatuss
             r,   Ú	jobs_logsra   G  sÂ   € ôH 5°V¸YÓGÑ€FˆIä
˜5Ô
!€CðDØ×!Ñ!¨¸9ÈVÐZ^Ð!Ó_ˆØò 	ˆCÜ�#�Jñ	øäò DØ+,¯:©:Ð+A�—‘×'Ò'ÀtˆØ�SŠ=ÜÐDÓEÈ1ÐLØ�sŠ]ÜÐYÓZÐ`aÐaäÐ7¸°sÐ;Ó<À!ÐCûðDús   �'A Á	B(ÁAB#Â#B(Újob_propertiesÚfiltersc                 óÂ   — |D ]Z  \  }}}| j                  |«      }|€|dk(  rŒ  yt        |j                  «       |j                  «       «      }|dk(  r|r	|dk(  sŒW|sŒZ y y)z5Check if scheduled job matches all specified filters.ú!=Fú=T)Úgetr   Úlower)rb   rc   ÚkeyÚop_strÚpatternÚvalueÚmatchs          r,   Ú_matches_filtersrn   |  sk   € à 'ò ÑˆˆV�WØ×"Ñ" 3Ó'ˆØˆ=Ø˜Š~ØÙÜ˜Ÿ™› w§}¡}£Ó7ˆØ�cŠM¡%¨V°t«^ÂÙðð r.   ÚrowsÚheadersÚaliasesÚfmtc           	      óÚ   — |rS|}| D ]K  }|}t        |«      D ].  \  }}d|› d�}	|	|v sŒ|j                  |	t        ||   «      «      }Œ0 t        |«       ŒM yt        t	        | |¬«      «       y)z,Print output according to the chosen format.z{{.z}})rp   N)Ú	enumerateÚreplaceÚstrrJ   Ú	_tabulate)
ro   rp   rq   rr   ÚtemplateÚrowÚlineÚiÚfieldÚplaceholders
             r,   Ú_print_outputr~   Š  s€   € á
àˆØò 	ˆCØˆDÜ% gÓ.ò B‘��5Ø % e W¨DÐ1�Ø $Ò&ØŸ<™<¨´S¸¸Q¹³[ÓA‘DðBô �$�Kñ	ô 	Œi˜ gÔ.Õ/r.   Únc                 óF   — d}d}t        | «      D ]  }t        ||¬«       Œ y )Nz[1Az[2K)Úend)ÚrangerJ   )r   ÚLINE_UPÚ
LINE_CLEARr{   s       r,   Ú_clear_liner…   ›  s)   € Ø€GØ€JÜ�1‹Xò 'ˆÜˆg˜:Ö&ñ'r.   Úmetrics_streamÚtable_headersc              #   óº  K  — |D �]J  }| |d   › d�t        |d   dz  d«      t        d|d   z  |d   z  d	«      › d�t        |d   «      › d
t        |d   «      › d�t        |d   «      › dt        |d   «      › d�g}|d   r§t        |d   t        «      r”|gdgt	        |«      z  gt	        |d   «      dz
  z  z   }t        |t        |d   «      «      D ]R  \  }}|d   |   }||d   › d�t        d|d   z  |d   z  d	«      › d�t        |d   «      › d
t        |d   «      › d�gz  }ŒT n!|dgt	        |«      t	        |«      z
  z  z  }|g}d| |f–— �ŒM d| g f–— y ­w)NÚcpu_usage_pctú%Úcpu_millicoresg     @�@r   éd   Úmemory_used_bytesÚmemory_total_bytesé   zB / ÚBÚrx_bpszbps / Útx_bpsÚbpsÚgpusÚ ÚutilizationúN/AFT)Úroundr   Ú
isinstanceÚdictÚlenÚzipÚsorted)r"   r†   r‡   Úmetricsry   ro   Úgpu_idÚgpus           r,   Ú_get_jobs_stats_rowsr¡   ¢  sê  è ø€ ð "ó "ˆàØ�Ñ'Ð(¨Ð*Ü�'Ð*Ñ+¨fÑ4°aÓ8Ü�S˜7Ð#6Ñ7Ñ7¸'ÐBVÑ:WÑWÐYZÓ[Ð\Ð\]Ð^Ü˜GÐ$7Ñ8Ó9Ð:¸$¼|ÈGÐThÑLiÓ?jÐ>kÐklÐmÜ˜G HÑ-Ó.Ð/¨v´lÀ7È8ÑCTÓ6UÐ5VÐVYÐZð
ˆð �6Š?œz¨'°&©/¼4Ô@Ø�5˜R˜D¤3 s£8™OÐ,´°G¸F±OÓ0DÀqÑ0HÑIÑIˆDÜ" 4¬°¸±Ó)@ÓAò ‘��VØ˜f‘o fÑ-�ØØ˜=Ñ)Ð*¨!Ð,Ü˜S 3Ð':Ñ#;Ñ;¸cÐBVÑ>WÑWÐYZÓ[Ð\Ð\]Ð^Ü# CÐ(;Ñ$<Ó=Ð>¸dÄ<ÐPSÐThÑPiÓCjÐBkÐklÐmðñ ‘ñð �E�7œc -Ó0´3°s³8Ñ;Ñ<Ñ<ˆCØ�5ˆDØ�V˜TÐ!Ô!ð+"ð, �˜Ð
Óùs   ‚EEÚstatszhf jobs stats <job_id>Újob_idsc           	      ó\  — | �+g }| D ]"  }t        ||«      \  }}|j                  |«       Œ$ |} t        |¬«      }|€|j                  «       d   }| €O|j	                  |¬«      D �cg c]4  }|j
                  r|j
                  j                  nddv r|j                  ‘Œ6 } }t        | «      dk(  rt        d«       yg d	¢}g d
¢}	 t        j                  j                  t        | «      «      5 }	i }
| D ]+  }|g}||dd D �cg c]  }d|v sd|v rdnd‘Œ c}z  }|g|
|<   Œ- t        j                  «       }|
D ��cg c]  }|
|   D ]  }|‘Œ Œ }}}t        |||d«       | D �cg c]  }||j                  ||¬«      |dœ‘Œ }}t!        |	t"        |¬«      D ]ƒ  \  }}}|r|
j%                  |d«       n||
|<   t        j                  «       }||z
  t&        k\  sŒBt)        dt        |«      z   «       |
D ��cg c]  }|
|   D ]  }|‘Œ Œ }}}t        |||d«       |}Œ… 	 ddd«       yc c}w c c}w c c}}w c c}w c c}}w # 1 sw Y   yxY w# t*        $ rZ}|j,                  �|j,                  j.                  nd}|dk(  rt1        d«      |‚|dk(  rt1        d«      |‚t1        d|› �«      |‚d}~ww xY w)z7Fetch the resource usage statistics and metrics of JobsNrA   rO   ©r#   ÚUNKNOWN©ÚRUNNINGÚUPDATINGr   zNo running jobs found)	úJOB IDzCPU %zNUM CPUzMEM %z	MEM USAGEzNET I/Oz
GPU UTIL %z	GPU MEM %zGPU MEM USAGE)	rK   r‰   r‹   Úmemory_used_bytes_pctÚ!memory_used_bytes_and_total_bytesÚrx_bps_and_tx_bpsÚgpu_utilizationÚgpu_memory_used_bytes_pctÚ%gpu_memory_used_bytes_and_total_bytesr   r&   ÚUSAGEz-- / --z--©r"   r#   )r"   r†   r‡   )Úkwargs_listr�   rY   rZ   r[   r\   zFailed to fetch job stats: )r-   Úappendr   ÚwhoamiÚ	list_jobsr`   ÚstagerK   r›   rJ   ÚmultiprocessingÚpoolÚ
ThreadPoolÚtimer~   Úfetch_job_metricsÚiflatmap_unorderedr¡   ÚpopÚSTATS_UPDATE_MIN_INTERVALr…   r   r]   r^   r   )r£   r#   r?   Ú
parsed_idsr"   rR   rS   r‡   Úheaders_aliasesr¹   Úrows_per_job_idry   ÚheaderÚlast_update_timeÚ
total_rowsr³   Údonero   Únowr_   r`   s                        r,   Ú
jobs_statsrÈ   ¾  s  € ð ÐØˆ
Øò 	&ˆFÜ <¸VÀYÓ OÑˆF�IØ×Ñ˜fÕ%ð	&ð ˆÜ
˜5Ô
!€CØÐØ—J‘J“L Ñ(ˆ	Ø€ð —}‘}¨y�}Ó9ö
àØ$'§J¢J�—
‘
× Ò °IÐBYÑYð �F‹Fð
ˆð 
ô
 ˆ7ƒ|�qÒÜÐ%Ô&Øò
€Mò
€Oð%EÜ×!Ñ!×,Ñ,¬S°«\Ó:ð 	+¸dØ@BˆOØ!ò 0�Ø(. x�ØÐboÐpqÐprÐbsÖtÐX^ c¨V¡m°wÀ&Ñ7H™	ÈtÑSÒtÑt�Ø+.¨%� Ò'ð0ô  $Ÿy™y›{ÐØ,;×_ &ÀÐW]ÑG^Ò_Àš#Ð_˜#Ð_ˆJÑ_Ü˜* m°_ÀdÔKð &öð ð	 %Ø&)×&;Ñ&;À6ÐU^Ð&;Ó&_Ø%2óðˆKð ô '9¸Ô?SÐalÔ&mò 
+Ñ"��f˜dÙØ#×'Ñ'¨°Õ5à.2�O FÑ+Ü—i‘i“k�ØÐ)Ñ)Ô-FÓFÜ ¤C¨
£OÑ 3Ô4Ø4C×!g¨&ÈÐ_eÑOfÒ!gÈ¢#Ð!g #Ð!g�JÑ!gÜ! *¨m¸_ÈdÔSØ'*Ñ$ñ
+÷%	+ð 	+ùò?
ùòF uùó `ùòùó  "h÷5	+ð 	+ûô: ò EØ+,¯:©:Ð+A�—‘×'Ò'ÀtˆØ�SŠ=ÜÐDÓEÈ1ÐLØ�sŠ]ÜÐYÓZÐ`aÐaäÐ8¸¸Ð<Ó=À1ÐDûðEúsz   Á%9H!Ã(I Ã+H<Ã>H&
Ä&H<Ä7H+Å
H<ÅH1Å=AH<ÇH<Ç/H6
ÈH<ÈI È&H<È<IÉI ÉI É	J+ÉAJ&Ê&J+Ú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        |¬«      }|j                  |¬«      }g }g }	|xs g D �]L  }
|
j                  d«      s|
j                  d«      r²|
j                  d«      r)|
t        d«      d }d|v rt	        d|› d�«       ŒY|d	d
}}}nG|
t        d«      d }d|v r|j                  dd«      \  }}n|d
}}|j                  d«      rd	}|dd }nd}|	j                  |j                  «       ||j                  «       f«       ŒØd|
v rb|
j                  dd«      \  }}|j                  d«      rd	}|dd }nd}|j                  |j                  «       ||j                  «       f«       �Œ>t	        d|
› d�«       �ŒO g }|D ]º  }|j                  r|j                  j                  nd}| s|dvrŒ.|j                  xs d}|j                  xs g }|rdj                  |«      nd}|j                  ||j                  «       |dœ}t        ||«      sŒ�t        |j                   xs i |	«      sŒª|j                  |«       Œ¼ |s[|sH|dk7  rC|r0ddj                  |D ���cg c]  \  }}}|› |› |› �‘Œ c}}}«      › �nd}t	        d|› �«       y|dk(  rt	        d«       yg d¢}g d¢}|D �cg c]  }t#        |«      ‘Œ }}dt$        t&        t(        f   dt*        t&           fd„}|r'|d vr#t-        |D � cg c]
  }  || «      ‘Œ c} |||«       y|dk(  rt.        j0                  nt.        j2                  }!t5        ||!|d!||¬"«       yc c}}}w c c}w c c} w )#z
List Jobs.rA   r¥   zlabel!=zlabel=Nrf   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.re   Ú*r   ú!éÿÿÿÿú)Warning: Ignoring invalid filter format 'ú'. Use key=value format.r¦   r§   r—   ú )rK   r4   r`   r5   Újsonú matching filters: ú, r•   zNo jobs foundú[])rª   úIMAGE/SPACEÚCOMMANDÚCREATEDÚSTATUSÚRUNTIME)rK   r4   r5   Úcreatedr`   ÚruntimeÚitemr$   c           
      óä  — | j                  di «      }| j                  d«      xs i }| j                  d«      xs g }|rdj                  |«      nd}t        | j                  dd«      «      t        | j                  d«      xs d«      t        |«      | j                  d	«      r| d	   d d
 j	                  dd«      ndt        |j                  dd«      «      t        |j                  d«      «      gS )Nr`   Ú	durationsr5   rÔ   r—   rK   r•   Údocker_imageÚ
created_até   ÚTr·   r¦   Úrunning_secs)rg   Újoinrv   r   ru   r   )rà   r`   râ   ÚcmdÚcommand_strs        r,   Úrow_fnzjobs_ps.<locals>.row_fnu  sÒ   € Ø—‘˜( BÓ'ˆØ—H‘H˜[Ó)Ò/¨Rˆ	Ø�h‰h�yÓ!Ò' RˆÙ'*�c—h‘h˜s”m°ˆä�—‘˜˜rÓ"Ó#Ü˜Ÿ™ .Ó1Ò:°UÓ;Ü˜Ó%Ø9=¿¹À,Ô9OˆD�Ñ˜s Ð#×+Ñ+¨C°Ô5ÐUZÜ�—
‘
˜7 IÓ.Ó/Ü˜IŸM™M¨.Ó9Ó:ð
ð 	
r.   ©ÚtablerÕ   rK   ©ÚitemsrÌ   rÍ   Úid_keyrp   rë   )r   r¶   Ú
startswithr›   rJ   r)   Úendswithr´   rh   r`   r·   rã   r5   rè   rK   rn   rB   r   rš   rv   r
   Úlistr~   r   rÕ   rí   r    )"rÊ   r#   r?   rË   rÌ   rÍ   rR   Újobsrc   Úlabels_filtersÚfÚ
label_partÚ	label_keyÚopÚlabel_valueri   rl   Úfiltered_jobsrS   r`   Úimage_or_spaceré   rê   ÚpropsÚkÚoÚvÚfilters_msgrp   rq   rï   rë   rà   Úoutput_formats"                                     r,   Újobs_psr    sj  € ô6 ˜5Ô
!€Cà�=‰= 9ˆ=Ó-€Dà*,€GØ13€NØŠ\�ró ![ˆØ�<‰<˜	Ô" a§l¡l°8Ô&<Ø�|‰|˜IÔ&Øœs 9›~Ð/Ð0�
Ø˜*Ñ$ÜØPÐQ[ÐP\Ð\uÐvôð Ø-7¸¸s˜{˜2‘	àœs 8›}˜Ð/�
Ø˜*Ñ$Ø-7×-=Ñ-=¸cÀ1Ó-EÑ*�I™{à-7¸˜{�Ià×%Ñ% cÔ*Ø�BØ )¨#¨2 ‘Ià�BØ×!Ñ! 9§?¡?Ó#4°b¸+×:KÑ:KÓ:MÐ"NÕOØ�A‰XØŸ™  a›‰JˆC�à�|‰|˜CÔ Ø�Ø˜#˜2�h‘à�Ø�N‰N˜CŸI™I›K¨¨U¯[©[«]Ð;Ö<äÐ=¸a¸SÐ@XÐYÖZðC![ðH €MØò "ˆØ%(§Z¢Z�—‘×!Ò!°YˆÙ�vÐ%<Ñ<ØØ×)Ñ)Ò2¨UˆØ�k‰kÒ˜RˆÙ'*�c—h‘h˜s”m°ˆØ—v‘v¨À&Ç,Á,Ã.Ð]hÑiˆÜ  wÔ/ØÜ §
¡
Ò 0¨b°.ÔAØØ×Ñ˜SÕ!ð"ñ Ù˜ 6Ò)ÙfmÐ/°·	±	ÐW^×:_Ð:_ÉGÈAÈqÐRS¸a¸SÀÀÀAÀ3º<Ô:_Ó0`Ð/aÑbÐsuˆKÜ�M + Ð/Ô0ð 	ð �vÒÜ�$ŒKØâR€GÚH€GØ0=Ö>¨Ô Õ$Ð>€EÐ>ð
”Tœ#œs˜(‘^ð 
¬¬S©	ó 
ñ �&Ð 1Ñ1Ü°Ö6¨‘v˜d•|Ò6¸ÀÈ&ÕQà-3°vÒ-=œ×)Ò)Ä<×CUÑCUˆÜØØ ØØØØö	
ùô; ;`ùò ?ùò$ 7s   ÉL;Ê#MË*MÚhardwarezhf jobs hardwarec                  óX  — t        «       } | j                  «       }g d¢}g d¢}g }|D ]å  }d}|j                  rG|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                  |j                  xs d|j                  |j                  |j                  |||g«       Œç |st        d«       yt        |||d«       y)z(List available hardware options for Jobs)ÚNAMEzPRETTY NAMEÚCPUÚRAMÚSTORAGEÚACCELERATORzCOST/MINz	COST/HOUR)rO   Ú
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´   rO   Úpretty_namer  r  Úephemeral_storagerJ   r~   )	rR   Úhardware_listr‡   rÁ   ro   ÚhwÚaccelerator_infoÚcost_minÚ	cost_hours	            r,   Újobs_hardwarer"  ’  s)  € ô ‹,€CØ×*Ñ*Ó,€MÚl€MÚt€OØ"$€Dàò 
ˆØÐØ�>Š>Ø"$§.¡.×"9Ñ"9Ð!:¸"¸R¿^¹^×=QÑ=QÐ<RÐRTÐUW×UcÑUc×UhÑUhÐTiÐijÐkÐØ13×1AÒ1A�Q�r×'Ñ'¨Ð,Ñ-ÀvˆØ79×7GÒ7G�a˜×(Ñ(¨2Ñ-¨cÐ2Ñ3ÈVˆ	Ø�‰à—‘Ø—‘Ò$ "Ø—‘Ø—‘Ø×$Ñ$Ø ØØð	õ	
ð
ñ& ÜÐ)Ô*ØÜ�$˜ ¸Õ=r.   Úinspectzhf jobs inspect <job_id>z*Job IDs to inspect (or 'namespace/job_id')c           
      ó  — g }| D ]"  }t        ||«      \  }}|j                  |«       Œ$ |} t        |¬«      }	 | D �cg c]  }|j                  ||¬«      ‘Œ }}t	        t        j                  |D �cg c]  }t        |«      ‘Œ c}dt        ¬«      «       yc c}w c c}w # t        $ rZ}|j                  �|j                  j                  nd}	|	dk(  rt        d«      |‚|	dk(  rt        d	«      |‚t        d
|› �«      |‚d}~ww xY w)z0Display detailed information on one or more JobsrA   r²   é   ©ÚindentÚdefaultNrY   rZ   r[   r\   zFailed to inspect job: )r-   r´   r   Úinspect_jobrJ   rÕ   Údumpsr   rv   r   r]   r^   r   )
r£   r#   r?   rÀ   r"   rR   rô   rS   r_   r`   s
             r,   Újobs_inspectr+  ´  s  € ð €JØò "ˆÜ8¸ÀÓKÑˆ�	Ø×Ñ˜&Õ!ð"ð €GÜ
˜5Ô
!€Cð
AØRYÖZÈ�—‘ v¸�ÕCÐZˆÐZÜŒd�j‰j°Ö6¨#œ& �+Ò6¸qÌ#ÔNÕOùò [ùÚ6øÜò AØ+,¯:©:Ð+A�—‘×'Ò'ÀtˆØ�SŠ=ÜÐDÓEÈ1ÐLØ�sŠ]ÜÐYÓZÐ`aÐaäÐ4°Q°CÐ8Ó9¸qÐ@ûðAús5   ¹B  ½BÁB  Á1BÂB  Â
B  Â 	DÂ)AC>Ã>DÚcancelzhf jobs cancel <job_id>c                 ó.  — t        | |«      \  } }t        |¬«      }	 |j                  | |¬«       y# t        $ rZ}|j                  �|j                  j
                  nd}|dk(  rt        d«      |‚|dk(  rt        d«      |‚t        d|› �«      |‚d}~ww xY w)	zCancel a JobrA   r²   NrY   rZ   r[   z>Access denied. You may not have permission to cancel this job.zFailed to cancel job: )r-   r   Ú
cancel_jobr   r]   r^   r   )r"   r#   r?   rR   r_   r`   s         r,   Újobs_cancelr/  Ó  s¡   € ô 5°V¸YÓGÑ€FˆIÜ
˜5Ô
!€Cð	@Ø�‰˜f°	ˆÕ:øÜò @Ø+,¯:©:Ð+A�—‘×'Ò'ÀtˆØ�SŠ=ÜÐDÓEÈ1ÐLØ�sŠ]ÜÐ[Ó\ÐbcÐcäÐ3°A°3Ð7Ó8¸aÐ?ûð@ús   �1 ±	BºABÂBzFRun UV scripts (Python with inline dependencies) on HF infrastructure.Úuv)rO   )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        |¬«      }|j                  | |xs g |||||t        |«      t	        |«      ||
|¬«      }t        d|j                  › �«       t        d|j                  › �«       |ry|j                  |j                  |j                  j                  d¬«      D ]  }t        |«       Œ y)ú8Run a UV script (local file or URL) on HF infrastructurerA   )r1  r2  Údependenciesr4  r4   r6   r7   rB   rC   r<   r=   r#   rD   rE   NTrF   )r   r   Ú
run_uv_jobrI   r   rJ   rK   rL   rM   rN   rO   )r1  r2  r4   r<   r6   r7   r8   r9   r:   r;   r=   r>   r#   r?   r3  r4  rP   rQ   rR   rS   rT   s                        r,   Újobs_uv_runr9  ì  sÐ   € ô: ˜C Ó*€GÜ ¨Ó6€Kä
˜5Ô
!€CØ
�.‰.ØØÒ% 2ØØØØØÜ  Ó'Ü˜fÓ%ØØØð ó €Cô 
Ð! #§&¡& Ð
*Ô+Ü	ˆI�c—g‘g�YÐ
Ô ÙØà×!Ñ!¨¯©¸3¿9¹9¿>¹>ÐRVÐ!Ó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        |¬«      }|j                  ||| ||||t        |«      t	        |«      |||¬«      }t        d|j                  › �«       y)zSchedule a Job.rA   )r4   r5   r;  r<  r=  r6   r7   rB   rC   r<   r=   r#   úScheduled Job created with ID: N)r   r   Úcreate_scheduled_jobrI   r   rJ   rK   )r;  r4   r5   r<  r=  r6   r7   r8   r9   r:   r;   r<   r=   r#   r?   rP   rQ   rR   Úscheduled_jobs                      r,   Úscheduled_runrB  )  s‚   € ô. ˜C Ó*€GÜ ¨Ó6€Kä
˜5Ô
!€CØ×,Ñ,ØØØØØØØÜ  Ó'Ü˜fÓ%ØØØð -ó €Mô 
Ð+¨M×,<Ñ,<Ð+=Ð
>Õ?r.   zhf jobs scheduled psz1Show all scheduled Jobs (default hides suspended)c                 ó¢  — t        |¬«      }|j                  |¬«      }g }|xs g D ]v  }	d|	v ra|	j                  dd«      \  }
}|
j                  d«      rd}|
dd }
nd}|j	                  |
j                  «       ||j                  «       f«       Œht        d	|	› d
�«       Œx g }|D ]˜  }|j                  xs d}| s|rŒ|j                  j                  xs d}|j                  j                  xs g }|rdj                  |«      nd}|j                  |t        |«      |dœ}t        ||«      sŒˆ|j	                  |«       Œš |s[|sH|dk7  rC|r0ddj                  |D ���cg c]  \  }}}|› |› |› �‘Œ c}}}«      › �nd}t        d|› �«       y|dk(  rt        d«       yg d¢}g d¢}|D �cg c]  }t        |«      ‘Œ }}dt         t        t"        f   dt$        t           fd„}|r'|dvr#t'        |D �cg c]
  } ||«      ‘Œ c}|||«       y|dk(  rt(        j*                  nt(        j,                  }t/        |||d||¬«       yc c}}}w c c}w c c}w )zList scheduled JobsrA   r¥   rf   r   rÐ   re   NrÑ   rÒ   rÓ   Fr—   rÔ   )rK   r4   r<  r5   rÕ   rÖ   r×   r•   zNo scheduled jobs foundrØ   )ÚIDÚSCHEDULErÙ   rÚ   zLAST RUNzNEXT RUNÚSUSPEND)rK   r;  r4   r5   ÚlastÚnextr<  rà   r$   c                 óh  — | j                  di «      }| j                  di «      }|j                  d«      }|j                  d«      xs g }d}|r)|j                  d«      r|d   d d j                  dd	«      }d}|j                  d
«      r|d
   d d j                  dd	«      }|rd	j                  |«      nd}t        | j                  dd«      «      t        | j                  d«      xs d«      t	        |j                  d«      xs d«      t	        |«      ||t        | j                  dd«      «      gS )NÚjob_specr`   Úlast_jobr5   r—   Úatrå   ræ   rÔ   Únext_job_run_atrK   r•   r;  rã   r<  F)rg   ru   rè   rv   r   )rà   rJ  r`   rK  ré   Úlast_job_atÚnext_runrê   s           r,   rë   zscheduled_ps.<locals>.row_fnš  s  € Ø—8‘8˜J¨Ó+ˆØ—‘˜( BÓ'ˆØ—:‘:˜jÓ)ˆØ�l‰l˜9Ó%Ò+¨ˆØˆÙ˜Ÿ™ TÔ*Ø" 4™.¨¨"Ð-×5Ñ5°c¸3Ó?ˆKØˆØ�:‰:Ð'Ô(ØÐ/Ñ0°°"Ð5×=Ñ=¸cÀ3ÓGˆHÙ'*�c—h‘h˜s”m°ˆä�—‘˜˜rÓ"Ó#Ü�—‘˜Ó$Ò-¨Ó.Ü˜Ÿ™ nÓ5Ò>¸Ó?Ü˜Ó%ØØÜ�—‘˜ EÓ*Ó+ð
ð 	
r.   rì   rK   rî   )r   Úlist_scheduled_jobsr)   rò   r´   rh   rJ   r<  rJ  rã   r5   rè   rK   rv   rn   r   rš   r
   ró   r~   r   rÕ   rí   r    )rÊ   r#   r?   rË   rÌ   rÍ   rR   Úscheduled_jobsrc   rö   ri   rl   rù   rû   rA  r<  rü   ré   rê   rý   rþ   rÿ   r   r  rp   rq   Úsjrï   rë   rà   r  s                                  r,   Úscheduled_psrS  U  so  € ô6 ˜5Ô
!€CØ×,Ñ,°yÐ,ÓA€NØ*,€GØŠ\�rò [ˆØ�!‰8ØŸ™  a›‰JˆC�à�|‰|˜CÔ Ø�Ø˜#˜2�h‘à�Ø�N‰N˜CŸI™I›K¨¨U¯[©[«]Ð;Õ<äÐ=¸a¸SÐ@XÐYÕZð[ð €MØ'ò 
,ˆØ×'Ñ'Ò0¨5ˆÙ‘wØØ&×/Ñ/×<Ñ<ÒEÀˆØ×$Ñ$×,Ñ,Ò2°ˆÙ'*�c—h‘h˜s”m°ˆØ$×'Ñ'°.ÌSÐQXË\ÐfqÑrˆÜ  wÔ/ØØ×Ñ˜]Õ+ð
,ñ Ù˜ 6Ò)ÙfmÐ/°·	±	ÐW^×:_Ð:_ÉGÈAÈqÐRS¸a¸SÀÀÀAÀ3º<Ô:_Ó0`Ð/aÑbÐsuˆKÜÐ+¨K¨=Ð9Ô:ð 	ð �vÒÜ�$ŒKØâ]€GÚO€GØ.;Ö<¨Ô Õ#Ð<€EÐ<ð
”Tœ#œs˜(‘^ð 
¬¬S©	ó 
ñ. �&Ð 1Ñ1Ü°Ö6¨‘v˜d•|Ò6¸ÀÈ&ÕQà-3°vÒ-=œ×)Ò)Ä<×CUÑCUˆÜØØ ØØØØö	
ùôK ;`ùò =ùò4 7s   ÅI Æ(IÇ/Izhf jobs scheduled inspect <id>Úscheduled_job_idsz>Scheduled Job IDs to inspect (or 'namespace/scheduled_job_id')c           
      ó>  — g }| D ]"  }t        ||«      \  }}|j                  |«       Œ$ |} t        |¬«      }| D �cg c]  }|j                  ||¬«      ‘Œ }}t	        t        j                  |D �cg c]  }t        |«      ‘Œ c}dt        ¬«      «       yc c}w c c}w )z:Display detailed information on one or more scheduled JobsrA   ©Úscheduled_job_idr#   r%  r&  N)	r-   r´   r   Úinspect_scheduled_jobrJ   rÕ   r*  r   rv   )	rT  r#   r?   rÀ   r"   rR   rW  rQ  rA  s	            r,   Úscheduled_inspectrY  ¿  s­   € ð €JØ#ò "ˆÜ8¸ÀÓKÑˆ�	Ø×Ñ˜&Õ!ð"ð #ÐÜ
˜5Ô
!€Cð !2öàð 	×!Ñ!Ð3CÈyÐ!ÕYð€Nð ô 
Œ$�*‰*ÀÖP°”f˜]Õ+ÒPÐYZÔdgÔ
hÕiùò	ùò Qs   ¼BÁ0BÚdeletezhf jobs scheduled delete <id>rW  c                 ó`   — t        | |«      \  } }t        |¬«      }|j                  | |¬«       y)zDelete a scheduled Job.rA   rV  N)r-   r   Údelete_scheduled_job©rW  r#   r?   rR   s       r,   Úscheduled_deleter^  Ø  ó6   € ô #?Ð?OÐQZÓ"[ÑÐ�iÜ
˜5Ô
!€CØ×ÑÐ.>È)ÐÕTr.   zhf jobs scheduled suspend <id>c                 ó`   — t        | |«      \  } }t        |¬«      }|j                  | |¬«       y)z Suspend (pause) a scheduled Job.rA   rV  N)r-   r   Úsuspend_scheduled_jobr]  s       r,   Úscheduled_suspendrb  ä  s6   € ô #?Ð?OÐQZÓ"[ÑÐ�iÜ
˜5Ô
!€CØ×ÑÐ/?È9ÐÕUr.   Úresumezhf jobs scheduled resume <id>c                 ó`   — t        | |«      \  } }t        |¬«      }|j                  | |¬«       y)z!Resume (unpause) a scheduled Job.rA   rV  N)r-   r   Úresume_scheduled_jobr]  s       r,   Úscheduled_resumerf  ð  r_  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        |¬«      }|j                  ||xs g | |||||||t        |	«      t	        |
«      |||¬«      }t        d|j                  › �«       y)r6  rA   )r1  r2  r;  r<  r=  r7  r4  r4   r6   r7   rB   rC   r<   r=   r#   r?  N)r   r   Úcreate_scheduled_uv_jobrI   r   rJ   rK   )r;  r1  r2  r<  r=  r4   r<   r6   r7   r8   r9   r:   r;   r=   r#   r?   r3  r4  rP   rQ   rR   rS   s                         r,   Úscheduled_uv_runri     s�   € ô: ˜C Ó*€GÜ ¨Ó6€Kä
˜5Ô
!€CØ
×
%Ñ
%ØØÒ% 2ØØØØØØØØÜ  Ó'Ü˜fÓ%ØØØð &ó €Cô" 
Ð+¨C¯F©F¨8Ð
4Õ5r.   rB   c                 ób   — | syi }| D ]$  }d|v r|j                  dd«      n|df\  }}|||<   Œ& |S )a  Parse label key-value pairs from CLI arguments.

    Args:
        labels: List of label strings in KEY=VALUE format. If KEY only, then VALUE is set to empty string.

    Returns:
        Dictionary mapping label keys to values, or None if no labels provided.
    Nrf   r   r•   )r)   )rB   Ú
labels_mapÚ	label_varri   rl   s        r,   rI   rI   8  sQ   € ñ ØØ!#€JØò  ˆ	Ø03°yÑ0@�Y—_‘_ S¨!Ô,ÀyÐRTÀo‰
ˆˆUØˆ
�3Šð ð Ðr.   c           
      óô  — t        g | ¢|‘­Ž D �cg c]  }t        d„ |D «       «      ‘Œ }}t        t        j                  «       j                  t        |«      dz  «      }t        |«      t        |«      z   |kD  r|j                  t        |«      «      }||xx   dz  cc<   t        |«      t        |«      z   |k  r#|t        |«      z
  t        |«      z
  ||   z   ||<   t        |«      t        |«      z   |kD  rŒ dt        |«      z  j                  |Ž }g }|j                   |j                  |Ž «       |j                   |j                  |D �cg c]  }d|z  ‘Œ	 c}Ž «       | D ]r  }	t        |	|«      D �
�cg c];  \  }
}t        t        |
«      «      |kD  rt        |
«      d|dz
   dz   n
t        |
«      ‘Œ= }}
}|j                   |j                  |Ž «       Œt d	j                  |«      S c c}w c c}w c c}}
w )
z‰
    Inspired by:

    - stackoverflow.com/a/8356620/593036
    - stackoverflow.com/questions/9535954/printing-lists-as-tabular-data
    c              3   óD   K  — | ]  }t        t        |«      «      –— Œ y ­w©N)r›   rv   )Ú.0Úxs     r,   ú	<genexpr>z_tabulate.<locals>.<genexpr>Q  s   è ø€ Ò/ a”cœ#˜a›&—kÑ/ùs   ‚ é   r�   z{{:{}}} ú-Né   z...ú
)rœ   ÚmaxÚshutilÚget_terminal_sizeÚcolumnsr›   ÚsumÚindexrÌ   r´   rv   rè   )ro   rp   ÚcolÚ
col_widthsÚterminal_widthÚcol_to_minimizeÚ
row_formatÚlinesÚwry   rq  Ú	col_widthÚrow_format_argss                r,   rw   rw   J  sê  € ô <?Ð;NÀÐ;NÀgÒ;NÖO°C”#Ñ/¨3Ô/Õ/ÐO€JÐOÜœ×1Ñ1Ó3×;Ñ;¼SÀ»\ÈBÑ=NÓO€NÜ
ˆg‹,œ˜Z›Ñ
(¨>Ò
9Ø$×*Ñ*¬3¨z«?Ó;ˆØ�?Ó#¨Ñ)Ó#Üˆw‹<œ#˜j›/Ñ)¨^Ò;Ø*8¼3¸z»?Ñ*JÌSÐQXË\Ñ*YÐ\fÐgvÑ\wÑ*wˆJ�Ñ'ô	 ˆg‹,œ˜Z›Ñ
(¨>Ó
9ð
 4�*œs 7›|Ñ+×3Ñ3°ZÐ@€JØ€EØ	‡L�LÐ"�×"Ñ" GÐ,Ô-Ø	‡L�LÐ"�×"Ñ"°jÖ$A° S¨1£WÒ$AÐBÔCØò :ˆô !$ C¨Ó 4÷
á��9ô 03´3°q³6«{¸YÒ/FŒC�‹F�?�Y ‘]Ð# eÒ+ÌCÐPQËFÑRð
ˆñ 
ð 	�‰Ð&�Z×&Ñ&¨Ð8Õ9ð:ð �9‰9�UÓÐùò# Pùò %Bùó
s   �G*ÅG/Å6A G4ræ   ÚqueueÚfunc.Úkwargsc                 ó@   —  |di |¤ŽD ]  }| j                  |«       Œ y )N© )Úput)r†  r‡  rˆ  Úresults       r,   Ú_write_generator_to_queuer�  h  s#   € Ù‘.˜‘.ò ˆØ�	‰	�&Õñr.   r¹   r³   c          	   #   ó6  K  — t        «       }|D �cg c]  }| j                  t        |||f«      ‘Œ }}	 	 	 |j                  d¬«      –— Œc c}w # t        $ r' t        d„ |D «       «      r|j                  «       rY nY Œ5w xY wn# t        $ r Y nw xY w	 |D �cg c]  }|j                  d¬«      ‘Œ nc c}w c} y# t        j                  $ r Y yw xY w# 	 |D �cg c]  }|j                  d¬«      ‘Œ nc c}w c} w # t        j                  $ r Y w w xY wxY w­w)a;  
    Takes a function that returns an iterable of items, and run it in parallel using threads to return the flattened iterable of items as they arrive.

    This is inspired by those three `map()` variants, and is the mix of all three:

    * `imap()`: like `map()` but returns an iterable instead of a list of results
    * `imap_unordered()`: like `imap()` but the output is sorted by time of arrival
    * `flatmap()`: like `map()` but given a function which returns a list, `flatmap()` returns the flattened list that is the concatenation of all the output lists
    gš™™™™™©?)r=   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wro  )Úready)rp  Úasync_results     r,   rr  z%iflatmap_unordered.<locals>.<genexpr>ƒ  s   è ø€ ÒN°�|×)Ñ)×+ÑNùs   ‚N)
r   Úapply_asyncr�  rg   r   rÊ   ÚemptyÚKeyboardInterruptr¸   ÚTimeoutError)r¹   r‡  r³   r†  rˆ  Úasync_resultsr‘  s          r,   r½   r½   m  s  è ø€ ô “g€EØfqÖrÐ\b�T×%Ñ%Ô&?À%ÈÈvÐAVÕWÐr€MÐrðØðØ—i‘i¨�iÓ-Ò-ð ùò søô
 ò ÜÑNÀÔNÔNÐSX×S^ÑS^ÔS`ÙùðúàøÜò Ùðúð	Ø@MÖN°ˆ\×Ñ dÐÕ+ÑNùÖNøÜ×+Ñ+ò 	Ùð	ûð	Ø@MÖN°ˆ\×Ñ dÐÕ+ÑNùÖNøÜ×+Ñ+ò 	Ùð	ÿsÇ   ‚D‘ A±D´B ¶A Á
B ÁDÁ+B Á;B Á?B Â B ÂC Â	BÂC ÂBÂC ÂB; ÂB2Â1	B; Â:DÂ;CÃDÃCÃDÃDÃC=ÃC4Ã3	C=Ã<DÃ=DÄDÄDÄDÄD)NNNNNNNNFNN)FNNN)NNN)FNNNNF)r$   N)NN)NNNNNNNNNNFNNNN)NNNNNNNNNNNN)NNNNNNNNNNNNNNNN)pÚ__doc__rÕ   r¸   Úmultiprocessing.poolrx  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__Úloggerrv   Útupler-   rl   ÚSUGGESTED_FLAVORSr¿   ÚArgumentÚImageArgÚOptionÚImageOptÚ	FlavorOptró   Ú	LabelsOptÚ
TimeoutOptÚboolÚ	DetachOptÚNamespaceOptÚWithOptÚ	PythonOptÚ
SuspendOptÚConcurrencyOptÚScheduleArgÚ	ScriptArgÚScriptArgsArgÚ
CommandArgÚJobIdArgÚ	JobIdsArgÚScheduledJobIdArgÚjobs_clir5   rU   Úintra   rš   rn   r~   r…   r¡   rÈ   r  r"  r+  r/  Úuv_appÚ	add_typerr9  Úscheduled_apprB  rS  rY  r^  rb  rf  Úscheduled_uv_appri  rI   rw   ræ   r�  r¹   rº   r½   )rà   s   0r,   ú<module>rÃ     sÒ  ðñ0ód Û Û Û Û ß .Ý Ý ß ß *Ñ *ã å )ß ;Ý )Ý =Ý :÷÷ ÷ ÷ ñ ð& 
ˆ×	Ñ	˜HÓ	%€ð.¨ð .¸¸t¹ð .ÈÈcÐSVÐY]ÑS]ÈoÑH^ó .ð8 -:ÖW D¸T¿Z¹ZÈ;Ó=V�T—Z“ZÒWÐ ØÐ ð ØØ€E‡N�NØ'ôðñ€ð Øˆ$�JØ€E‡L�LØ=ôðñ€ð Ø�DÑØ€E‡L�Lð Dôðñ€	ð Øˆ�I�ÑØ€E‡L�LØØØBôðñ€	ð Øˆ$�JØ€E‡L�LØeôðñ€
ð ØØ€E‡L�LØØØBôðñ€	ð Øˆ$�JØ€E‡L�LØeôðñ€ð Øˆ�I�ÑØ€E‡L�LØØ4ôðñ€ð Øˆ$�JØ€E‡L�LØØØDôðñ€	ð Øˆ4�KØ€E‡L�LØ0ôðñ€
ð Øˆ4�KØ€E‡L�LØGôðñ€ð ØØ€E‡N�NØfôðñ€ð ØØ€E‡N�NØ3ôðñ€	ð Øˆ�I�ÑØ€E‡N�NØ'ôðñ€ð Øˆ�IØ€E‡N�NØ"ôðñ€
ð ØØ€E‡N�NØ-ôðñ€ð Øˆ�I�ÑØ€E‡N�NØ.ôðñ€	ð ØØ€E‡N�NØAôðñÐ ñ Ð?Ô@€ð 
×ÑØ	Ø.°Ð5òð ó 	ð ØØØØØ#'ØØØØ"Øñ'Øð'àð'ð 
ð'ð ð	'ð
 ð'ð ð'ð ð'ð !ð'ð ð'ð ð'ð ð'ð ð'ð ð'ð 
ò'ó	ð'ðT 
×ÑØ
òð ó ð$ 	ð 	Ø"Øñ')DØð)DàØØˆ�‰ØØð Eô	
ð	ñð)Dð Øˆd‰
Øˆ�‰ØØð Jô	
ð	ñð)Dð$ ð%)Dð& ð')Dð( 
ò))Dóð)DðX T¨#¨s¨(¡^ð ¸dÀ5ÈÈcÐSVÈÑCWÑ>Xð Ð]aó ð0˜˜T #¨¡)™_Ñ-ð 0¸¸S¹	ð 0ÈDÐQTÉIð 0Ð\_ÐbfÑ\fð 0Ðkoó 0ð"'�3ð '˜4ó 'ðØðØ!)¨$¨s°C¨x©.Ñ!9ðØJNÈsÉ)ðàˆe�D˜#˜t D¨¨s©¡OÑ4Ð4Ñ5Ñ6óð8 
×Ñ�'Ð%=Ð$>ÐÓ?àØ"ØñSEØðSEàðSEð ðSEð 
ò	SEó @ðSEðl 
×Ñ�$ ,°Ð!@ÐÓAð 	Ø"Øð 	ð 	Øñ/y
Ø	ØØˆ�‰ØØØ=ô	
ð	ñ
ðy
ð ðy
ð ðy
ð ØˆS‰	�DÑØˆ�‰ØØØQô	
ð	ñðy
ð& Øˆd‰
Øˆ�‰ÐgÔhð	jñð'y
ð. ð/y
ð0 
ò1y
ó Bðy
ðx 
×Ñ�*Ð(:Ð';ÐÓ<ò>ó =ð>ðB 
×Ñ�)Ð'AÐ&BÐÓCð #ØñAØØˆS‰	Øˆ�‰Ø=ô	
ð	ñðAð ðAð ðAð 
òAó DðAð< 
×Ñ�(Ð&?Ð%@ÐÓAð #Øñ@Øð@àð@ð ð@ð 
ò	@ó Bð@ñ( 
ÐdÔ	e€Ø × Ñ �6 Ð Ô %ð ‡�Ø	Ø.°Ð5òð ó 	ð "&ØØØØØØØØ#'ØØØ"ØØØñ!,Øð,àð,ð ð,ð ð	,ð
 
ð,ð ð,ð ð,ð ð,ð ð,ð !ð,ð ð,ð ð,ð ð,ð ð,ð ð,ð  ð!,ð" 
ò#,ó	ð,ñ^ Ð#QÔR€Ø × Ñ �= {Ð Ô 3ð ×ÑØ	Ø.°Ð5ØNÐOð ó ð Ø"&ØØØØØØ#'ØØØ"Øñ$@Øð$@àð$@ð ð$@ð ð	$@ð
  ð$@ð 
ð$@ð ð$@ð ð$@ð ð$@ð ð$@ð !ð$@ð ð$@ð ð$@ð ð$@ð ð$@ð  
ò!$@óð
$@ðN ×Ñ�tÐ'=Ð&>ÐÓ?ð 	Ø"Øð 	ð 	Øñ/f
Ø	ØØˆ�‰ØØØDô	
ð	ñ
ðf
ð ðf
ð ðf
ð ØˆS‰	�DÑØˆ�‰ØØØQô	
ð	ñðf
ð& Øˆd‰
Øˆ�‰ÐgÔhð	jñð'f
ð. ð/f
ð0 
ò1f
ó @ðf
ðR ×Ñ�yÐ,LÐ+MÐÓNð #ØñjØ ØˆS‰	Øˆ�‰ØQô	
ð	ñðjð ðjð ðjð 
òjó Oðjð0 ×Ñ�xÐ+JÐ*KÐÓLð #ØñUØ'ðUàðUð ðUð 
ò	Uó MðUð ×Ñ�yÐ,LÐ+MÐÓNð #ØñVØ'ðVàðVð ðVð 
ò	Vó OðVð ×Ñ�xÐ+JÐ*KÐÓLð #ØñUØ'ðUàðUð ðUð 
ò	Uó MðUñ !Ð&QÔRÐ Ø × Ñ Ð(¨tÐ Ô 4ð ×ÑØ	Ø.°Ð5à8ØFðð ó ð "&ØØ"&ØØØØØØØØ#'ØØ"ØØØñ%*6Øð*6àð*6ð ð*6ð ð	*6ð
  ð*6ð ð*6ð ð*6ð 
ð*6ð ð*6ð ð*6ð ð*6ð ð*6ð !ð*6ð ð*6ð ð*6ð  ð!*6ð" ð#*6ð$ ð%*6ð& 
ò'*6óð*6ð`˜d 3™i¨$Ñ.ð °4¸¸S¸±>ÀDÑ3Hó ð$�D˜˜c C™i™Ñ)ð °D¸±Ið À#ó ñ6 ˆCƒL€ð U¨1¡Xð °X¸cÀ8ÈAÁ;Ð>NÑ5Oð ÐY]ð Ðbfó ð
Ø
×
Ñ
×
)Ñ
)ðà
�3˜ ™Ð#Ñ
$ðð �d‘ð	ð
 ˆa�[ôùòQ Xs   Â._-Ã_-