Ë
    rPêj J  ã                   ó  — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	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 ddlmZ ddlmZmZ dd	lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& dd
l'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0  e&d¬«      Z1 e&d¬«      Z2e1jg                  e2d¬«        e&d¬«      Z4e1jg                  e4d¬«       ee5 e(d¬«      f   Z6ede5de5dz  de5dz  dee   fd„«       Z7e1jq                  dg d¢¬«      	 	 	 	 	 	 	 	 	 	 	 	 	 dsdee5dz   e(d¬«      f   dee5dz   e)dd ¬«      f   d!e-d"ee5dz   e)d#¬«      f   d$ed%e d&e.d'ed(ed)e"de/d*ee9 e)d+d,¬«      f   de!ddfd-„«       Z:e1jq                  d.d/d0id1d2g¬3«      	 	 	 	 	 	 dtde6d4ee;e5    e(d5¬«      f   d6ee5dz   e)d7d8d9¬«      f   d$ed'ed:ee<dz   e)d;d<¬«      f   de/de!ddfd=„«       Z=e1jq                  d>d/d0id?d@g¬3«      	 	 	 	 	 dude6d4ee;e5    e(dA¬«      f   d6ee5dz   e)d7d8d9¬«      f   d$ed'ede/de!ddfdB„«       Z>e1jq                  dCdDdEg¬«      	 	 dvdFee5 e(dG¬«      f   dHee5 e(dI¬«      f   de/de!ddf
dJ„«       Z?e1jq                  dKg dL¢¬«      	 	 	 	 	 dwdee5dz   e(dM¬«      f   dNee9 e)dOdP¬«      f   dQee9 e)dRdSdT¬«      f   de/de!ddfdU„«       Z@e2jq                  dg dV¢¬«      ddeddddfdee5dz   e(dW¬«      f   d!e-dXeeA e)dYddZe› d[�¬\«      f   d]eeAdz   e)d^dd_¬\«      f   d"ee5dz   e)d`¬«      f   de/de!ddfda„«       ZBe2jq                  dbdcg¬«      	 	 dvde/de!ddfdd„«       ZCe2jq                  dedfg¬«      	 	 	 dxdgee5 e(dh¬«      f   dQee9 e)dRdSdT¬«      f   de/de!ddf
di„«       ZDdje5e;e5   z  de5fdk„ZEdede5fdl„ZFe4jq                  dbdmg¬«      	 	 dvde6de/de!ddfdn„«       ZGe4jq                  dKdog¬«      	 	 dvde6dpeeA e(dq¬«      f   de/de!ddf
dr„«       ZHy)yzCContains commands to run and manage sandboxes on Hugging Face Jobs.é    N)Úcontextmanager)Ú	AnnotatedÚAnyÚIterator)ÚDEFAULT_IDLE_TIMEOUTÚDEFAULT_IMAGEÚDEFAULT_SANDBOXES_PER_HOSTÚ
MODE_LABELÚ	MODE_POOLÚ
POOL_LABELÚSANDBOX_LABELÚSHARED_ID_SEPÚSandboxÚSandboxPoolÚSandboxProcessÚ_split_sandbox_id)Údelete_pool_cache)ÚCLIErrorÚSandboxErroré   )
Ú
EnvFileOptÚEnvOptÚSecretsFileOptÚ
SecretsOptÚTokenOptÚ
VolumesOptÚ
get_hf_apiÚparse_env_mapÚparse_volumesÚtyper_factory)ÚArgumentÚOption)Úout)Ú	FlavorOptÚ	LabelsOptÚNamespaceOptÚ_parse_labels_mapz;Run and manage experimental sandboxes on Hugging Face Jobs.)ÚhelpzhWarm host VM pools and spawn experimental shared sandboxes for workloads within the same trust boundary.Úpool)Únamez8List and stop background processes running in a sandbox.Úprocessz1The sandbox id as printed by `hf sandbox create`.Ú
sandbox_idÚ	namespaceÚtokenÚreturnc             #   ó�   K  — t        j                  | ||¬«      }	 |–— |j                  «        y# |j                  «        w xY w­w)zIReattach to a sandbox and close the HTTP client when the command is done.©r-   r.   N)r   ÚconnectÚclose)r,   r-   r.   Úsandboxs       ú`/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/huggingface_hub/cli/sandbox.pyÚ_connectr6   D   s6   è ø€ ô �o‰o˜j°IÀUÔK€GðØŠà�‰�øˆ�‰�üs   ‚Aœ1  A±AÁAÚcreate)zhf sandbox createzhf sandbox create ubuntu:24.04z%hf sandbox create --flavor a10g-smallz/hf sandbox create --label controller-run=run-42z@hf sandbox create --pool pool-ab12cd34ef56 --env LOG_LEVEL=debug)ÚexamplesÚimagezDocker image (needs /bin/sh).z--poolzJSpawn a cheap shared sandbox in this pool (from `hf sandbox pool create`).ÚflavorÚidle_timeoutzTAuto-terminate the sandbox after this much inactivity (e.g. '10m'). Defaults to 10m.ÚenvÚsecretsÚlabelÚenv_fileÚsecrets_fileÚvolumeÚforward_hf_tokenz--forward-hf-tokenz0Inject your HF token as HF_TOKEN in the sandbox.c                 óü  — t        j                   «       }|�|nt        }|�ï| €|€|	rt        d«      ‚|s|rt        d«      ‚|rt        d«      ‚t        j                  ||
|¬«      j                  t        ||«      ||¬«      }t        j                  d|j                  |j                  |t        j                   «       |z
  d›d	�¬
«       t        j                  d|j                  › d�«       t        j                  d|j                  › d�«       yt        j
                  | xs t        |xs d|t        ||«      t        ||«      t        |	«      |
|t        |«      |¬«
      }|j!                  «        t        j                  d|j                  |j"                  t        j                   «       |z
  d›d	�¬«       t        j                  d|j                  › d�«       t        j                  d|j                  › d�«       y)a’  Create a sandbox: a dedicated VM by default, or a cheap shared one with `--pool`.

    Env and idle-timeout apply to the sandbox in both modes. With `--pool`, the image and
    flavor come from the pool, so passing them here is an error; `--secrets` is also
    rejected since pooled sandboxes have no encrypted-secrets channel (use `--env`). Define
    a pool first with `hf sandbox pool create`.
    NzQ--pool fixes the image/flavor (and volumes aren't supported); drop those options.zÚ--pool has no encrypted-secrets channel. Pass the values with --env/--env-file: on a pooled sandbox they are delivered to the host at creation and are not stored in the job metadata, but they are not encrypted at rest.z2--label is only supported for dedicated sandboxes.r1   )r<   r;   rB   zSandbox readyú.1fÚs)ÚidÚhostr)   Úelapsedz$Run a command with `hf sandbox exec z -- echo hello`.z#Terminate it with `hf sandbox kill ú`.ú	cpu-basic)
r9   r:   r;   r<   r=   Úvolumesr-   rB   Úlabelsr.   )rF   r9   rH   )Útimer   r   r   r2   r7   r   r#   ÚresultrF   Úhost_idÚhintr   r   r   r'   r3   r9   )r9   r)   r:   r;   r<   r=   r>   r?   r@   rA   r-   rB   r.   ÚstartÚidleÚsbxr4   s                    r5   Úsandbox_createrT   N   sË  € ôP �I‰I‹K€EØ'Ð3‰<Ô9M€DàÐØÐ Ð 2±fÜÐnÓoÐoÙ‘lÜð6óð ñ
 ÜÐOÓPÐPÜ×!Ñ! $°)À5ÔI×PÑPÜ˜c 8Ó,ØØ-ð Qó 
ˆô
 	�
‰
�? s§v¡v°C·K±KÀdÔW[×W`ÑW`ÓWbÐejÑWjÐknÐVoÐopÐTqÕrÜ�‰Ð7¸¿¹°xÐ?OÐPÔQÜ�‰Ð6°s·v±v°h¸bÐAÔBØä�n‰nØÒ$”}ØÒ$˜ØÜ˜#˜xÓ(Ü˜g |Ó4Ü˜fÓ%ØØ)Ü  Ó'Øô€Gð ‡M�M„OÜ‡J�Jˆ 7§:¡:°W·]±]ÌtÏyÉyË{Ð]bÑObÐcfÐNgÐghÐLiÕjÜ‡H�HÐ3°G·J±J°<Ð?OÐPÔQÜ‡H�HÐ2°7·:±:°,¸bÐAÕBó    ÚexecÚignore_unknown_optionsTz5hf sandbox exec <sandbox_id> -- python -c "print(42)"z1hf sandbox exec -w /app <sandbox_id> -- pytest -x)Úcontext_settingsr8   ÚcommandzThe command to run.Úworkdirz-wz	--workdirzWorking directory.Úexec_timeoutz	--timeoutz)Kill the command after this many seconds.c                 ó  — dt         ddfd„}dt         ddfd„}	t        | ||¬«      5 }
|
j                  t        |«      t	        ||«      ||||	dd¬«      }ddd«       j
                  rGt        j                  d	|› d
�«       t        j                  j                  |j                  xs d¬«      ‚|j                  dk7  r=t        j                  j                  |j                  �|j                  ¬«      ‚d¬«      ‚y# 1 sw Y   Œ©xY w)zÄRun a command in a sandbox, streaming output. Exits with the command's exit code.

    To start a long-running command in the background instead of waiting for it, use
    `hf sandbox spawn`.
    Údatar/   Nc                 ó~   — t         j                  j                  | «       t         j                  j                  «        y ©N)ÚsysÚstdoutÚwriteÚflush©r]   s    r5   Úwrite_stdoutz"sandbox_exec.<locals>.write_stdout»   ó$   € Ü�
‰
×Ñ˜ÔÜ�
‰
×ÑÕrU   c                 ó~   — t         j                  j                  | «       t         j                  j                  «        y r_   )r`   Ústderrrb   rc   rd   s    r5   Úwrite_stderrz"sandbox_exec.<locals>.write_stderr¿   rf   rU   r1   F)r<   ÚcwdÚtimeoutÚ	on_stdoutÚ	on_stderrÚcapture_outputÚcheckzCommand timed out after zs.é|   )Úcoder   r   )Ústrr6   ÚrunÚlistr   Ú	timed_outr#   ÚerrorÚclickÚ
exceptionsÚExitÚ	exit_code)r,   rY   rZ   r<   r?   r[   r-   r.   re   ri   r4   rN   s               r5   Úsandbox_execr{   ¡   s  € ð4œ3ð  4ó ðœ3ð  4ó ô 
�*¨	¸Ô	?ð 

À7Ø—‘Ü�‹MÜ˜c 8Ó,ØØ Ø"Ø"Ø Øð ó 	
ˆ÷

ð ×ÒÜ�	‰	Ð,¨\¨N¸"Ð=Ô>Ü×Ñ×#Ñ#¨×)9Ñ)9Ò)@¸SÐ#ÓAÐAØ×Ñ˜1ÒÜ×Ñ×#Ñ#¸V×=MÑ=MÐ=Y¨×)9Ñ)9Ð#ÓaÐaÐ_`Ð#ÓaÐað ÷

ð 

ús   §-C<Ã<DÚspawnz;hf sandbox spawn <sandbox_id> -- python -m http.server 8000z8hf sandbox spawn -w /app <sandbox_id> -- uvicorn app:appz%The command to run in the background.c                 ó\  — t        | ||¬«      5 }|j                  t        |«      t        ||«      |d¬«      }ddd«       t	        j
                  d| j                  ¬«       t	        j                  d| › d�«       t	        j                  d	| › d
|j                  › d�«       y# 1 sw Y   ŒkxY w)zÂStart a long-running command in the background and return its pid (don't wait).

    List a sandbox's processes with `hf sandbox process ls` and stop one with
    `hf sandbox process kill`.
    r1   T)r<   rj   Ú
backgroundNzProcess started©r4   Úpidz+List processes with `hf sandbox process ls rI   z&Stop it with `hf sandbox process kill ú )r6   rs   rt   r   r#   rN   r€   rP   )	r,   rY   rZ   r<   r?   r-   r.   r4   r+   s	            r5   Úsandbox_spawnr‚   Õ   s™   € ô, 
�*¨	¸Ô	?ð mÀ7Ø—+‘+œd 7›m´¸sÀHÓ1MÐSZÐgk�+Ólˆ÷mä‡J�JÐ ¨*¸'¿+¹+ÕFÜ‡H�HÐ:¸:¸,ÀbÐIÔJÜ‡H�HÐ5°j°\ÀÀ7Ç;Á;À-ÈrÐRÕS÷	mð mús   �)B"Â"B+Úcpz2hf sandbox cp data.csv <sandbox_id>:/data/data.csvz7hf sandbox cp <sandbox_id>:/app/result.json result.jsonÚsrcz,Source: a local path or <sandbox_id>:<path>.Údstz1Destination: a local path or <sandbox_id>:<path>.c                 óÒ  — dt         dt        t         dz  t         f   fd„} || «      \  }} ||«      \  }}|du |du k(  rt        d«      ‚|�4t        |||¬«      5 }	|	j                  j                  ||«       ddd«       n7|€J ‚t        |||¬«      5 }	|	j                  j                  ||«       ddd«       t        j                  d| |¬«       y# 1 sw Y   Œ"xY w# 1 sw Y   Œ.xY w)	zCCopy a file between the local machine and a sandbox (docker-style).Úrefr/   Nc                 ó‚   — d| v r8| j                  d«      s'| j                  dd«      \  }}t        |«      dkD  r||fS d | fS )Nú:)ú.ú/ú~r   )Ú
startswithÚsplitÚlen)r‡   r,   Úpaths      r5   Úparsezsandbox_cp.<locals>.parse  sL   € ð �#‰:˜cŸn™n¨_Ô=Ø"Ÿy™y¨¨aÓ0ÑˆJ˜Ü�:‹ Ò"Ø! 4Ð'Ð'Ø�SˆyÐrU   zHExactly one of SRC and DST must be a sandbox path (<sandbox_id>:<path>).r1   ÚCopied)r„   r…   )	rr   Útupler   r6   ÚfilesÚdownloadÚuploadr#   rN   )
r„   r…   r-   r.   r‘   Úsrc_sandboxÚsrc_pathÚdst_sandboxÚdst_pathr4   s
             r5   Ú
sandbox_cpr›   ò   sõ   € ð”3ð œ5¤ t¡¬S Ñ1ó ñ " #›JÑ€K�Ù! #›JÑ€K�Ø�tÐ °Ð!4Ò5ÜÐaÓbÐbØÐÜ�k¨Y¸eÔDð 	7ÈØ�M‰M×"Ñ" 8¨XÔ6÷	7ð 	7ð Ð&Ð&Ð&Ü�k¨Y¸eÔDð 	5ÈØ�M‰M× Ñ  ¨8Ô4÷	5ä‡J�Jˆx˜S cÖ*÷	7ð 	7ú÷	5ð 	5ús   ÁCÂCÃCÃC&Úkill)zhf sandbox kill <sandbox_id>zKhf sandbox kill <host_id>   # kills a whole shared host (all its sandboxes)zhf sandbox kill --allz$The sandbox or host id to terminate.Úall_z--allz2Terminate every sandbox and host in the namespace.Úyesz-yz--yesz$Answer Yes to prompts automatically.c                 óæ  — t        |¬«      }|rºt        |j                  ddgt        di|¬«      «      }|st	        j
                  d«       yt	        j                  dt        |«      › d	�|¬
«       |D ]3  }|j                  |j                  |j                  j                  ¬«       Œ5 t	        j                  dt        |«      ¬«       y| €t        d«      ‚t        | |«      \  }}	t        |v r@	 t!        | ||¬«      5 }
|
j#                  «        ddd«       t	        j                  d| ¬«       y|j)                  ||	¬«      }|j*                  xs i j-                  t.        «      t0        k(  rdt	        j                  d|› d�|¬
«       |j                  |j                  |j                  j                  ¬«       t	        j                  d|¬«       y	 t!        | ||¬«      5 }
|
j#                  «        ddd«       t	        j                  d| ¬«       y# 1 sw Y   �ŒxY w# t$        $ r}t        t'        |«      «      |‚d}~ww xY w# 1 sw Y   ŒTxY w# t$        $ r}t        t'        |«      «      |‚d}~ww xY w)z@Terminate a sandbox, a whole shared host, or everything (--all).©r.   ÚRUNNINGÚ
SCHEDULINGÚ1©ÚstatusrL   r-   zNo running sandboxes.Nú
Terminate zA sandbox job(s) (including shared hosts and all their sandboxes)?©rž   ©Újob_idr-   Ú
Terminated)Újobsz*Provide a sandbox id, a host id, or --all.r1   zSandbox terminated)rF   zTerminate shared host z and all of its sandboxes?zHost terminated)r   rt   Ú	list_jobsr   r#   ÚtextÚconfirmr�   Ú
cancel_jobrF   Úownerr*   rN   r   r   r   r6   rœ   r   rr   Úinspect_jobrL   Úgetr
   r   )r,   r�   rž   r-   r.   Úapir«   ÚjobÚsidÚnsr4   Úes               r5   Úsandbox_killr¸     s  € ô  ˜5Ô
!€CáÜ�C—M‘M¨)°\Ð)BÌMÐ[^ÐK_Ðkt�MÓuÓvˆÙÜ�H‰HÐ,Ô-ØÜ�‰�j¤ T£ Ð+lÐmÐsvÕwØò 	DˆCØ�N‰N #§&¡&°C·I±I·N±NˆNÕCð	Dä�
‰
�<¤c¨$£iÕ0ØàÐÜÐCÓDÐDä 
¨IÓ6�G€CˆÜ˜Ñð	*Ü˜*°	ÀÔGð È7Ø—‘”÷ô 	�
‰
Ð'¨JÕ7Øð �/‰/ °ˆ/Ó
3€CØ�
‰
Ò�b×ÑœjÓ)¬YÒ6Ü�‰Ð,¨S¨EÐ1KÐLÐRUÕVØ�‰˜cŸf™f°·	±	·±ˆÔ?Ü�
‰
Ð$¨Õ-Øð&Ü�j¨I¸UÔCð 	ÀwØ�L‰LŒN÷	ô ‡J�JÐ#¨
Ö3÷'ñ ûäò 	*Üœ3˜q›6Ó"¨Ð)ûð	*ú÷	ð 	ûäò &Ü”s˜1“vÓ AÐ%ûð&ús`   Ã.H Ã<HÄH ÇI ÇIÇ.I ÈHÈH È	H>È$H9È9H>ÉI
ÉI É	I0ÉI+É+I0)zhf sandbox pool createz5hf sandbox pool create python:3.12 --flavor cpu-basicz7hf sandbox pool create --per-host 50 --idle-timeout 30mz+Docker image for the hosts (needs /bin/sh).Úper_hostz
--per-hostz&Sandboxes packed per host VM (default z).)Úminr(   Ú	max_hostsz--max-hostsz'Optional cap on the number of host VMs.zZShut a host down once it has had no sandboxes for this long (e.g. '10m'). Defaults to 10m.c           	      ó†  — t        j                   «       }| xs t        } t        | |xs d|||�|nt        ||¬«      }|j                  }	|j
                  }
t        j                  d|	| |xs d|
d   t        j                   «       |z
  d›d�¬«       t        j                  d	|	› d
�«       t        j                  d|	› d
�«       y)zRWarm a pool: boot one host VM now, tagged so it can be found later by its pool id.rJ   N)r9   r:   Úsandboxes_per_hostr»   r;   r-   r.   zPool createdr   rD   rE   )rF   r9   r:   rG   rH   z/Spawn a sandbox with `hf sandbox create --pool rI   z=Delete the pool (and its hosts) with `hf sandbox pool delete )	rM   r   r   r   r*   Úhost_idsr#   rN   rP   )r9   r:   r¹   r»   r;   r-   r.   rQ   r)   Úpool_idr¾   s              r5   Úpool_createrÀ   S  sÄ   € ô4 �I‰I‹K€EØÒ"”]€EÜØØÒ$˜Ø#ØØ%1Ð%=‘\ÔCWØØô€Dð �i‰i€GØ�}‰}€HÜ‡J�JØØØØÒ$˜Ø�a‰[Ü—9‘9“; Ñ& sÐ+¨1Ð-õô ‡H�HÐ>¸w¸iÀrÐJÔKÜ‡H�HÐLÈWÈIÐUWÐXÕYrU   z	ls | listzhf sandbox pool lsc                 ój  — t        |¬«      }i }|j                  dt        t        i| ¬«      D ]§  }|j                  xs i j                  t        «      }|sŒ)t        |j                  t        «      r|j                  ni }|j                  |||j                  xs |j                  |j                  |j                  dd«      ddœ«      }|dxx   d	z  cc<   Œ© t        |j                  «       «      }t!        j"                  |d
¬«       |st!        j$                  d«       yt!        j$                  d«       y)z9List running sandbox pools (grouped from their host VMs).r    r¡   r¤   ÚSBX_CAPACITYÚ r   )rF   r9   r:   r¹   ÚhostsrÄ   r   rF   ©Úid_keyz)Create one with `hf sandbox pool create`.z5Spawn a sandbox with `hf sandbox create --pool <id>`.N)r   r¬   r
   r   rL   r²   r   Ú
isinstanceÚenvironmentÚdictÚ
setdefaultÚdocker_imageÚspace_idr:   rt   Úvaluesr#   ÚtablerP   )	r-   r.   r³   Úpoolsr´   r€   r<   ÚinfoÚrowss	            r5   Úpool_lsrÒ   †  s   € ô ˜5Ô
!€CØ')€EØ�}‰} I´zÄ9Ð6MÐYbˆ}Ócò ˆØ�z‰zÒ˜R×$Ñ$¤ZÓ0ˆÙØÜ!+¨C¯O©O¼TÔ!Bˆc�oŠoÈˆØ×ÑØàØ×)Ñ)Ò9¨S¯\©\ØŸ*™*ØŸG™G N°BÓ7Øñó	
ˆð 	ˆW‹˜ÑŒðô  �—‘“Ó€DÜ‡I�Iˆd˜4Õ ÙÜ�‰Ð<Õ=ä�‰ÐHÕIrU   zdelete | rmz hf sandbox pool delete <pool_id>r¿   zPool id to delete.c           	      óÞ  — t        |¬«      }t        |j                  ddgt        t        t
        | i|¬«      «      }|s%t        | «       t        j                  d| › d�«       yt        j                  dt        |«      › d	| › d
�|¬«       |D ]3  }|j                  |j                  |j                  j                  ¬«       Œ5 t        | «       t        j                  d| t        |«      ¬«       y)zDTerminate every host VM of a pool (and therefore all its sandboxes).r    r¡   r¢   r¤   zNo running hosts for pool 'z'.Nr¦   z host(s) of pool 'z' (and all their sandboxes)?r§   r¨   zPool deleted)rF   Úhosts_terminated)r   rt   r¬   r
   r   r   r   r#   r­   r®   r�   r¯   rF   r°   r*   rN   )r¿   rž   r-   r.   r³   rÄ   r´   s          r5   Úpool_deleterÕ   ¦  sÓ   € ô ˜5Ô
!€CÜØ�‰Ø˜|Ð,Ü¤	¬:°wÐ?Øð 	ó 	
ó€Eñ Ü˜'Ô"Ü�‰Ð.¨w¨i°rÐ:Ô;ØÜ‡K�K�*œS ›Z˜LÐ(:¸7¸)ÐC_Ð`ÐfiÕjØò @ˆØ�‰˜cŸf™f°·	±	·±ˆÕ?ð@ä�gÔÜ‡J�Jˆ~ '¼CÀ»JÖGrU   Úcmdc                 óH   — t        | t        «      r| S dj                  | «      S )Nr�   )rÇ   rr   Újoin)rÖ   s    r5   Ú_fmt_cmdrÙ   Ä  s   € Ü˜S¤#Ô&ˆ3Ð9¨C¯H©H°S«MÐ9rU   c                 óX   — | j                   ry| j                  €dS d| j                  › d�S )NÚrunningÚexitedzexited (ú))rÛ   rz   )r+   s    r5   Ú_fmt_statusrÞ   È  s3   € Ø‡‚ØØ×(Ñ(Ð0ˆ8ÐU¸À×ARÑARÐ@SÐSTÐ6UÐUrU   z"hf sandbox process ls <sandbox_id>c                 ó~  — t        | ||¬«      5 }|j                  «       }ddd«       D �cg c].  }|j                  t        |«      t	        |j
                  «      dœ‘Œ0 }}t        j                  |d¬«       |st        j                  d| › d�«       yt        j                  d| › d	�«       y# 1 sw Y   Œ�xY wc c}w )
zUList the background processes running in a sandbox (started with `hf sandbox spawn`).r1   N)r€   r¥   rÖ   r€   rÅ   z!Start one with `hf sandbox spawn z -- <cmd>`.z'Stop one with `hf sandbox process kill z <pid>`.)	r6   Ú	processesr€   rÞ   rÙ   rÖ   r#   rÎ   rP   )r,   r-   r.   r4   rà   ÚprÑ   s          r5   Ú
process_lsrâ   Î  sŸ   € ô 
�*¨	¸Ô	?ð (À7Ø×%Ñ%Ó'ˆ	÷(àV_Ö`ÐQR�A—E‘E¤[°£^¼HÀQÇUÁU»OÓLÐ`€DÐ`Ü‡I�Iˆd˜5Õ!ÙÜ�‰Ð4°Z°LÀÐLÕMä�‰Ð:¸:¸,ÀhÐOÕP÷(ð (üâ`s   �B.¬3B:Â.B7z*hf sandbox process kill <sandbox_id> <pid>r€   z.The pid as printed by `hf sandbox process ls`.c                 ó
  ‡— t        | ||¬«      5 }t        ˆfd„|j                  «       D «       d«      }|€t        d‰› d| › d�«      ‚|j	                  «        ddd«       t        j                  d| ‰¬«       y# 1 sw Y   Œ"xY w)	z/Stop a background process running in a sandbox.r1   c              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wr_   )r€   )Ú.0rá   r€   s     €r5   ú	<genexpr>zprocess_kill.<locals>.<genexpr>è  s   øè ø€ ÒG˜a¸!¿%¹%À3»,œÑGùs   ƒ˜NzNo process with pid z in sandbox rŠ   zProcess stoppedr   )r6   Únextrà   r   rœ   r#   rN   )r,   r€   r-   r.   r4   r+   s    `    r5   Úprocess_killrè   ß  s   ø€ ô 
�*¨	¸Ô	?ð À7ÜÓG 7×#4Ñ#4Ó#6ÔGÈÓNˆØˆ?ÜÐ1°#°°lÀ:À,ÈaÐPÓQÐQØ�‰Œ÷	ô
 ‡J�JÐ ¨*¸#Ö>÷ð ús   �AA9Á9B)NNNNNNNNNNNFN)NNNNNN)NNNNN)NN)NFFNN)FNN)IÚ__doc__r`   rM   Ú
contextlibr   Útypingr   r   r   rw   Úhuggingface_hub._sandboxr   r   r	   r
   r   r   r   r   r   r   r   r   Úhuggingface_hub._sandbox_cacher   Úhuggingface_hub.errorsr   r   Ú
_cli_utilsr   r   r   r   r   r   r   r   r   r    Ú
_frameworkr!   r"   Ú_outputr#   r«   r$   r%   r&   r'   Úsandbox_cliÚpool_cliÚ	add_groupÚprocess_clirr   ÚSandboxIdArgr6   rY   ÚboolrT   rt   Úfloatr{   r‚   r›   r¸   ÚintrÀ   rÒ   rÕ   rÙ   rÞ   râ   rè   © rU   r5   ú<module>rû      sP  ðñ Jã 
Û Ý %ß +Ñ +ã ÷÷ ÷ ó õ =ß 9÷÷ ÷ ÷ )Ý ß GÓ Gñ Ð!^Ô_€ÙØ	sô€ð × Ñ �h VÐ Ô ,ÙÐ![Ô\€Ø × Ñ �k¨	Ð Ô 2à˜™hÐ,_Ô`Ð`Ña€ð ð˜ð ¨C°$©Jð ¸sÀT¹zð ÈhÐW^ÑN_ò ó ðð ×ÑØòð ó 	ð TXð 	Øð 	ØØØØØ#'ØØ"ð 	Øñ+FCØ�S˜4‘Z¡Ð/NÔ!OÐOÑPðFCà
Øˆd‰
ÙˆxÐjÔkð	mñðFCð ðFCð Øˆd‰
ÙÐjÔkð	mñðFCð 
ðFCð ðFCð ðFCð ðFCð !ðFCð  ð!FCð" ð#FCð$  Ø‰fÐ)Ð0bÔcÐcñð%FCð* ð+FCð, 
ò-FCó	ðFCðR ×ÑØ
Ø.°Ð5à?Ø;ðð ó ð \`ØØð 	Ø"Øñ)bØð)bà�t˜C‘y¡(Ð0EÔ"FÐFÑGð)bð �s˜T‘z¡6¨$°ÐBVÔ#WÐWÑXð)bð 
ð	)bð
 ð)bð Ø�‰‘f˜[Ð/ZÔ[Ð[ñð)bð ð)bð ð)bð 
ò)bóð)bðX ×ÑØØ.°Ð5àEØBðð ó ð \`ØØØ"ØñTØðTà�t˜C‘y¡(Ð0WÔ"XÐXÑYðTð �s˜T‘z¡6¨$°ÐBVÔ#WÐWÑXðTð 
ð	Tð
 ðTð ðTð ðTð 
òTóðTð* ×ÑØà<ØAðð ó ð #Øñ	+Ø	�3™Ð&TÔUÐUÑ	Vð+à	�3™Ð&YÔZÐZÑ	[ð+ð ð+ð ð	+ð
 
ò+óð+ð@ ×ÑØ
òð ó ð `dØhmØ_dØ"Øñ/4Ø˜# ™*¡hÐ4ZÔ&[Ð[Ñ\ð/4à
�D™& Ð/cÔdÐdÑ
eð/4ð 
�4™  gÐ4ZÔ[Ð[Ñ	\ð/4ð ð	/4ð
 ð/4ð 
ò/4óð/4ðd 
×ÑØòð ó ð bfØð 	#ð 	ð 	Ø"Øñ(ZØ�S˜4‘Z¡Ð/\Ô!]Ð]Ñ^ð(Zàð(Zð ØÙˆ| Ð+QÐRlÐQmÐmoÐ)pÔqð	sñð(Zð Øˆd‰
‘F˜=¨aÐ6_Ô`Ð`ñð(Zð Øˆd‰
ÙÐpÔqð	sñð(Zð ð(Zð ð(Zð  
ò!(Zóð(ZðV 
×Ñ�+Ð)=Ð(>ÐÓ?à"ØñJØðJàðJð 
òJó @ðJð> 
×ÑØØ0Ð1ð ó ð `eØ"Øñ	HØ�s™HÐ*>Ô?Ð?Ñ@ðHà	�4™  gÐ4ZÔ[Ð[Ñ	\ðHð ðHð ð	Hð
 
òHó	ðHð4:�#˜˜S™	‘/ð : có :ðV˜ð V¨Có Vð ×Ñ�[Ð,PÐ+QÐÓRð #ØñQØðQàðQð ðQð 
ò	Qó SðQð  ×Ñ�VÐ'SÐ&TÐÓUð #Øñ	?Øð?à	�3™Ð&VÔWÐWÑ	Xð?ð ð?ð ð	?ð
 
ò?ó Vñ?rU   