Ë
    ëÿæiž–  ã            (       óä  — 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„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)Ú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                 óü   — | 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       úm/Volumes/fast/ai/experiments/voice-extract-mac/.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.pyzVhf jobs run -v hf://gpt2:/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�
ñ Xr.   Úlogs)zhf jobs logs <job_id>zhf jobs logs -f <job_id>zhf jobs logs --tail 20 <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--tailz1Number of lines to show from the end of the logs.c                 ó�  — t        | |«      \  } }|r|�t        d«      ‚t        |¬«      }	 |j                  | ||¬«      }|�t	        ||¬«      }|D ]  }t        |«       Œ y# t        $ rZ}|j                  �|j                  j                  nd}	|	dk(  rt        d«      |‚|	dk(  rt        d	«      |‚t        d
|› �«      |‚d}~ww xY w)z±Fetch the logs of a 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.rA   rF   )Ú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   rM   r   rJ   r   ÚresponseÚstatus_code)
r"   rG   rW   r#   r?   rR   rV   rT   ÚeÚstatuss
             r,   Ú	jobs_logsrb   G  så   € ô: 5°V¸YÓGÑ€FˆIÙ�$Ð"ÜØqó
ð 	
ô ˜5Ô
!€CðDØ×!Ñ!¨¸9ÈVÐ!ÓTˆØÐÜ˜ dÔ+ˆDÛˆCÜ�#�Jñ øäò DØ+,¯:©:Ð+A�—‘×'Ò'ÀtˆØ�SŠ=ÜÐDÓEÈ1ÐLØ�sŠ]ÜÐYÓZÐ`aÐaäÐ7¸°sÐ;Ó<À!ÐCûðDús   ¬5A" Á"	CÁ+AC Ã CÚ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)rc   rd   ÚkeyÚop_strÚpatternÚvalueÚmatchs          r,   Ú_matches_filtersro   {  sf   € ã 'Ñˆˆ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}})rq   N)Ú	enumerateÚreplaceÚstrrJ   Ú	_tabulate)
rp   rq   rr   rs   ÚtemplateÚrowÚlineÚiÚfieldÚplaceholders
             r,   Ú_print_outputr   ‰  st   € á
àˆÛˆCØˆDÜ% gÖ.‘��5Ø % e W¨DÐ1�Ø $Ò&ØŸ<™<¨´S¸¸Q¹³[ÓA‘Dð /ô �$�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ˆ   Úmetricsrz   rp   Ú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ðñ ‘ñ  Bð �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�   rZ   r[   r\   r]   zFailed to fetch job stats: )r-   Úappendr   ÚwhoamiÚ	list_jobsra   Ú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_idrz   ÚheaderÚlast_update_timeÚ
total_rowsr´   Údonerp   Únowr`   ra   s                        r,   Ú
jobs_statsrÉ   ½  s  € ð ÐØˆ
ÛˆFÜ <¸VÀYÓ OÑˆF�IØ×Ñ˜fÕ%ð ð ˆÜ
˜5Ô
!€CØÐØ—J‘J“L Ñ(ˆ	Ø€ð —}‘}¨y�}Ô9ó
á9�Ø$'§J¢J�—
‘
× Ò °IÐBYÑYð �F‹FØ9ð 	ð 
ô
 ˆ7ƒ|�qÒÜÐ%Ô&Øò
€Mò
€Oð%EÜ×!Ñ!×,Ñ,¬S°«\Ô:¸dØ@BˆOÛ!�Ø(. x�ØÐboÐpqÐprÑbsÓtÑbsÐX^ c¨V¡m°wÀ&Ñ7H™	ÈtÑSÐbsÑtÑt�Ø+.¨%� Ò'ð "ô  $Ÿy™y›{ÐÙ,;Ô_©O &ÀÐW]ÔG^Àš#ÐG^˜#¨OˆJÑ_Ü˜* m°_ÀdÔKñ &óñ &�Fð	 %Ø&)×&;Ñ&;À6ÐU^Ð&;Ó&_Ø%2óð
 &ð ð ô '9¸Ô?SÐal×&mÑ"��f˜dÙØ#×'Ñ'¨°Õ5à.2�O FÑ+Ü—i‘i“k�ØÐ)Ñ)Ô-FÓFÜ ¤C¨
£OÑ 3Ô4Ù4CÔ!g±O¨&ÈÐ_eÔOfÈ¢#ÐOf #°O�JÑ!gÜ! *¨m¸_ÈdÔSØ'*Ñ$ñ 'n÷% ;Ð:ùò?
ùò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=Nrg   z6Warning: Ignoring invalid label filter format 'label!=z'. Use label!=key format.rf   Ú*r   Ú!éÿÿÿÿú)Warning: Ignoring invalid filter format 'ú'. Use key=value format.r§   r¨   r˜   Ú )rK   r4   ra   r5   Újsonú matching filters: ú, r–   zNo jobs foundú[])r«   úIMAGE/SPACEÚCOMMANDÚCREATEDÚSTATUS)rK   r4   r5   Úcreatedra   Úitemr$   c           
      óˆ  — | j                  d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«      «      gS )Nra   r5   rÕ   r˜   rK   r–   Údocker_imageÚ
created_até   ÚTr¸   r§   )rh   Újoinrw   r   rv   )rß   ra   ÚcmdÚcommand_strs       r,   Úrow_fnzjobs_ps.<locals>.row_fnt  s®   € Ø—‘˜( BÓ'ˆØ�h‰h�yÓ!Ò' RˆÙ'*�c—h‘h˜s”m°ˆä�—‘˜˜rÓ"Ó#Ü˜Ÿ™ .Ó1Ò:°UÓ;Ü˜Ó%Ø9=¿¹À,Ô9OˆD�Ñ˜s Ð#×+Ñ+¨C°Ô5ÐUZÜ�—
‘
˜7 IÓ.Ó/ð
ð 	
r.   ©ÚtablerÖ   rK   ©ÚitemsrÍ   rÎ   Úid_keyrq   rè   )r   r·   Ú
startswithrœ   rJ   r)   Úendswithrµ   ri   ra   r¸   rá   r5   rå   rK   ro   rB   r   r›   rw   r   Úlistr   r   rÖ   rê   r    )"rË   r#   r?   rÌ   rÍ   rÎ   rR   Újobsrd   Úlabels_filtersÚfÚ
label_partÚ	label_keyÚopÚlabel_valuerj   rm   Úfiltered_jobsrS   ra   Úimage_or_spaceræ   rç   ÚpropsÚkÚoÚvÚfilters_msgrq   rr   rì   rè   rß   Úoutput_formats"                                     r,   Újobs_psr     sh  € ô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^Õ:_ÑW^ÉGÈAÈqÐRS¸a¸SÀÀÀAÀ3º<ÐW^Ó:_Ó0`Ð/aÑbÐsuˆKÜ�M + Ð/Ô0ð 	ð �vÒÜ�$ŒKØâG€GÚ=€GÙ0=Ó>±¨Ô Õ$°€EÐ>ð

”Tœ#œs˜(‘^ð 

¬¬S©	ó 

ñ �&Ð 1Ñ1Ü±Ó6±¨‘v˜d•|°Ñ6¸ÀÈ&ÕQà-3°vÒ-=œ×)Ò)Ä<×CUÑCUˆÜØØ ØØØØö	
ùô7 ;`ùò ?ùò  7s   ÉL;Ê#MË*MÚhardwarezhf jobs hardwarec            
      óB  — t        «       } | j                  «       }g d¢}g d¢}g }|D ]Ú  }d}|j                  rG|j                  j                  › d|j                  j                  › d|j                  j
                  › d�}|j                  �d|j                  d	›�nd}|j                  �d|j                  d
z  d›�nd}|j                  |j                  |j                  xs d|j                  |j                  |||g«       ŒÜ |st        d«       yt        |||d«       y)z(List available hardware options for Jobs)ÚNAMEzPRETTY NAMEÚCPUÚRAMÚACCELERATORzCOST/MINz	COST/HOUR)rO   Ú
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µ   rO   Úpretty_namer  r	  rJ   r   )	rR   Úhardware_listrˆ   rÂ   rp   ÚhwÚaccelerator_infoÚcost_minÚ	cost_hours	            r,   Újobs_hardwarer  �  s  € ô ‹,€CØ×*Ñ*Ó,€MÚa€MÚ`€OØ"$€DãˆØ ÐØ�>Š>Ø"$§.¡.×"9Ñ"9Ð!:¸"¸R¿^¹^×=QÑ=QÐ<RÐRTÐUW×UcÑUc×UhÑUhÐTiÐijÐkÐØ13×1AÑ1AÐ1M�Q�r×'Ñ'¨Ð,Ñ-ÐSXˆØ79×7GÑ7GÐ7S�a˜×(Ñ(¨2Ñ-¨cÐ2Ñ3ÐY^ˆ	Ø�‰�R—W‘W˜bŸn™nÒ5°°r·v±v¸r¿v¹vÐGWÐYaÐclÐmÕnð ñ ÜÐ)Ô*ØÜ�$˜ ¸Õ=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ÚdefaultNrZ   r[   r\   r]   zFailed to inspect job: )r-   rµ   r   Úinspect_jobrJ   rÖ   Údumpsr   rw   r   r^   r_   r   )
r¤   r#   r?   rÁ   r"   rR   rñ   rS   r`   ra   s
             r,   Újobs_inspectr$  ¦  s	  € ð €JÛˆÜ8¸ÀÓKÑˆ�	Ø×Ñ˜&Õ!ð ð €GÜ
˜5Ô
!€Cð
AÙRYÓZÑRYÈ�—‘ v¸�ÕCÐRYˆÐ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³   NrZ   r[   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`   ra   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.pyzFhf jobs uv run -v hf://gpt2:/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   )r*  r+  Údependenciesr-  r4   r6   r7   rB   rC   r<   r=   r#   rD   rE   NTrF   )r   r   Ú
run_uv_jobrI   r   rJ   rK   rL   rM   rN   rO   )r*  r+  r4   r<   r6   r7   r8   r9   r:   r;   r=   r>   r#   r?   r,  r-  rP   rQ   rR   rS   rT   s                        r,   Újobs_uv_runr2  Þ  sÌ   € ô: ˜C Ó*€GÜ ¨Ó6€Kä
˜5Ô
!€CØ
�.‰.ØØÒ% 2ØØØØØÜ  Ó'Ü˜fÓ%ØØØð ó €Cô 
Ð! #§&¡& Ð
*Ô+Ü	ˆI�c—g‘g�YÐ
Ô ÙØà×!Ñ!¨¯©¸3¿9¹9¿>¹>ÐRVÐ!ÖWˆÜˆc�
ñ X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   r4  r5  r6  r6   r7   rB   rC   r<   r=   r#   úScheduled Job created with ID: N)r   r   Úcreate_scheduled_jobrI   r   rJ   rK   )r4  r4   r5   r5  r6  r6   r7   r8   r9   r:   r;   r<   r=   r#   r?   rP   rQ   rR   Úscheduled_jobs                      r,   Úscheduled_runr;    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¦   rg   r   rÑ   rf   NrÒ   rÓ   rÔ   Fr˜   rÕ   )rK   r4   r5  r5   rÖ   r×   rØ   r–   zNo scheduled jobs foundrÙ   )ÚIDÚSCHEDULErÚ   rÛ   zLAST RUNzNEXT RUNÚSUSPEND)rK   r4  r4   r5   ÚlastÚnextr5  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_specra   Úlast_jobr5   r˜   Úatrã   rä   rÕ   Únext_job_run_atrK   r–   r4  rá   r5  F)rh   rv   rå   rw   r   )rß   rC  ra   rD  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µ   ri   rJ   r5  rC  rá   r5   rå   rK   rw   ro   r   r›   r   rð   r   r   rÖ   rê   r    )rË   r#   r?   rÌ   rÍ   rÎ   rR   Úscheduled_jobsrd   ró   rj   rm   rö   rø   r:  r5  rù   ræ   rç   rú   rû   rü   rý   rþ   rq   rr   Úsjrì   rè   rß   rÿ   s                                  r,   Úscheduled_psrL  G  sm  € ô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^Õ:_ÑW^ÉGÈAÈqÐRS¸a¸SÀÀÀAÀ3º<ÐW^Ó:_Ó0`Ð/aÑbÐsuˆKÜÐ+¨K¨=Ð9Ô:ð 	ð �vÒÜ�$ŒKØâ]€GÚO€GÙ.;Ó<©m¨Ô Õ#¨m€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   rw   )	rM  r#   r?   rÁ   r"   rR   rP  rJ  r:  s	            r,   Úscheduled_inspectrR  ±  s°   € ð €JÛ#ˆÜ8¸ÀÓKÑˆ�	Ø×Ñ˜&Õ!ð $ð #ÐÜ
˜5Ô
!€Cñ !2óá 1Ðð 	×!Ñ!Ð3CÈyÐ!ÕYØ 1ð ð ô 
Œ$�*‰*ÁÓPÁ°”f˜]Õ+ÀÑPÐYZÔdgÔ
hÕiùò	ùò Qs   ¼BÁ0BÚdeletezhf jobs scheduled delete <id>rP  c                 ó`   — t        | |«      \  } }t        |¬«      }|j                  | |¬«       y)zDelete a scheduled Job.rA   rO  N)r-   r   Údelete_scheduled_job©rP  r#   r?   rR   s       r,   Úscheduled_deleterW  Ê  ó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   rO  N)r-   r   Úsuspend_scheduled_jobrV  s       r,   Úscheduled_suspendr[  Ö  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   rO  N)r-   r   Úresume_scheduled_jobrV  s       r,   Úscheduled_resumer_  â  rX  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)r/  rA   )r*  r+  r4  r5  r6  r0  r-  r4   r6   r7   rB   rC   r<   r=   r#   r8  N)r   r   Úcreate_scheduled_uv_jobrI   r   rJ   rK   )r4  r*  r+  r5  r6  r4   r<   r6   r7   r8   r9   r:   r;   r=   r#   r?   r,  r-  rP   rQ   rR   rS   s                         r,   Úscheduled_uv_runrb  ò  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.
    Nrg   r   r–   )r)   )rB   Ú
labels_mapÚ	label_varrj   rm   s        r,   rI   rI   *  sL   € ñ ØØ!#€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œ   rw   )Ú.0Úxs     r,   Ú	<genexpr>z_tabulate.<locals>.<genexpr>C  s   è ø€ Ð/©3 a”cœ#˜a›&—k©3ùs   ‚ é   r�   z{{:{}}} Ú-Né   z...Ú
)r�   ÚmaxÚshutilÚget_terminal_sizeÚcolumnsrœ   ÚsumÚindexrÍ   rµ   rw   rå   )rp   rq   ÚcolÚ
col_widthsÚterminal_widthÚcol_to_minimizeÚ
row_formatÚlinesÚwrz   rj  Ú	col_widthÚrow_format_argss                r,   rx   rx   <  sï  € ô <?Ð;NÀÐ;NÀgÓ;NÓOÑ;N°C”#Ñ/©3Ó/Õ/Ð;N€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±j° S¨1£W°jÑ$AÐBÔCÛˆô !$ C¨Ô 4ô
á 4‘��9ô 03´3°q³6«{¸YÒ/FŒC�‹F�?�Y ‘]Ð# eÒ+ÌCÐPQËFÑRØ 4ð 	ñ 
ð 	�‰Ð&�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†  Z  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rh  )Úready)ri  Úasync_results     r,   rk  z%iflatmap_unordered.<locals>.<genexpr>u  s   è ø€ ÐNÁ°�|×)Ñ)×+Áùs   ‚N)
r	   Úapply_asyncr†  rh   r   rË   ÚemptyÚKeyboardInterruptr¹   ÚTimeoutError)rº   r€  r´   r  r�  Úasync_resultsrŠ  s          r,   r¾   r¾   _  s!  è ø€ ô “g€EÙfqÓrÑfqÐ\b�T×%Ñ%Ô&?À%ÈÈvÐAVÕWÐfq€MÐrðØðØ—i‘i¨�iÓ-Ò-ð ùò søô
 ò ÜÑNÁÓNÔNÐSX×S^ÑS^ÔS`ÙùðúàøÜò Ùðúð	Ù@MÓNÁ°ˆ\×Ñ dÐÕ+ÁùÖNøÜ×+Ñ+ò 	Ùð	ûð	Ù@MÓNÁ°ˆ\×Ñ dÐÕ+ÁùÖ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.poolrq  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__Úloggerrw   Útupler-   rm   Ú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   Úintrb   r›   ro   r   r†   r¢   rÉ   r   r  r$  r(  Úuv_appÚ	add_typerr2  Úscheduled_appr;  rL  rR  rW  r[  r_  Úscheduled_uv_apprb  rI   rx   rä   r†  rº   r»   r¾   )rß   s   0r,   Ú<module>r¼     sÐ  ðñ0ód Û Û Û Û Ý ß .Ý Ý ß ß *Ñ *ã å )ß ;Ý )Ý =÷÷ ÷ ÷ ñ ð& 
ˆ×	Ñ	˜HÓ	%€ð.¨ð .¸¸t¹ð .ÈÈcÐSVÐY]ÑS]ÈoÑH^ó .ñ8 -:ÓW©M D¸T¿Z¹ZÈ;Ó=V�T—Z“Z¨MÑ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 
×ÑØ
Òmð ó ð 	ð 	Ø"Øñ'.DØð.DàØØˆ�‰ØØð Eô	
ð	ñð.Dð Øˆd‰
Øˆ�‰ØØØDô	
ð	ñð.Dð$ ð%.Dð& ð'.Dð( 
ò).Dóð.Dðb 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ð 	Ø"Øð 	ð 	Øñ/w
Ø	ØØˆ�‰ØØØ=ô	
ð	ñ
ðw
ð ðw
ð ðw
ð ØˆS‰	�DÑØˆ�‰ØØØQô	
ð	ñðw
ð& Øˆd‰
Øˆ�‰ÐgÔhð	jñð'w
ð. ð/w
ð0 
ò1w
ó Bðw
ðt 
×Ñ�*Ð(:Ð';ÐÓ<ò>ó =ð>ð, 
×Ñ�)Ð'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�[ôùòu Xs   Â._-Ã_-