§
    }Štjn  ã                   ó¢  — d Z ddlZddlZddlZddlmZ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  ej        e¦  «        ZdZd	Ze G d
„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Zde	fd„Zdede	fd„Zdededz  fd„Zddœdedededededz  dedz  dedz  dee         dee         dz  ddfd„Zdeddfd„Zde	deddfd „Z dS )!z?Best-effort local cache for SandboxPool hosts (host/pool mode).é    N)ÚasdictÚ	dataclassÚfield)ÚPath)ÚListé   )Ú	constants)ÚWeakFileLockÚloggingg      @c                   ó^   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dZeed	<   d
S )Ú
CachedHostaC  A single host Job of a pool, as last seen by some process.

    `base_url` + `nonce` are everything needed to rebuild the in-job server transport
    (`_SandboxServer`) without an `inspect_job` round-trip: the per-sandbox auth token is
    re-derived from the user's HF token and `nonce` (see `_derive_sandbox_token`).
    Újob_idÚownerÚbase_urlÚnonceÚcapacityÚliveç        Ú
updated_atN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr   Úfloat© ó    ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/huggingface_hub/_sandbox_cache.pyr   r   &   sd   € € € € € € ðð ð €K€K�KØ€J€J�JØ€M€M�MØ€J€J�JØ€M€M�MØ
€I€I�IØ€J�ÐÐÑÐÐr   r   c                   ó¶   — e Zd ZU dZeed<   eed<   eed<   eed<   edz  ed<   edz  ed<   edz  ed	<    ee¬
¦  «        Z	e
e         ed<   eZeed<   dZeed<   dS )Ú	PoolCachezJCached view of one pool: its config (to boot new hosts) + its known hosts.Úpool_idÚimageÚflavorÚsandboxes_per_hostNÚ	max_hostsÚidle_timeoutÚ	namespace)Údefault_factoryÚhostsÚversionr   r   )r   r   r   r   r   r   r   r   Úlistr+   r   r   Ú_CACHE_VERSIONr,   r   r   r   r   r    r"   r"   8   s±   € € € € € € àTÐTà€L€L�LØ€J€J�JØ€K€K�KØÐÐÑØ�T‰zÐÐÑØ˜‘*ÐÐÑØ�T‰zÐÐÑØ#˜e°DÐ9Ñ9Ô9€Eˆ4�
ÔÐ9Ð9Ñ9Ø!€GˆSÐ!Ð!Ñ!Ø€J�ÐÐÑÐÐr   r"   Úreturnc                  ó@   — t          t          j        ¦  «        dz  dz  S )NÚsandboxÚpools)r   r	   ÚHF_HOMEr   r   r    Ú
_pools_dirr4   H   s   € Ý•	Ô!Ñ"Ô" YÑ.°Ñ8Ð8r   r#   c                 óŽ   ‡ — t          ˆ fd„dD ¦   «         ¦  «        s‰ dv rt          d‰ ›�¦  «        ‚t          ¦   «         ‰ › d�z  S )z.Path of the cache file for `pool_id` (no I/O).c              3   ó    •K  — | ]}|‰v V — Œ	d S )Nr   )Ú.0Úcr#   s     €r    ú	<genexpr>z"pool_cache_path.<locals>.<genexpr>N   s'   øè è € Ð
5Ð
5˜Aˆ1�ˆ<Ð
5Ð
5Ð
5Ð
5Ð
5Ð
5r   )ú/ú\ú )ú.z..zInvalid pool id: z.json)ÚanyÚ
ValueErrorr4   )r#   s   `r    Úpool_cache_pathr@   L   sb   ø€ å
Ð
5Ð
5Ð
5Ð
5Ð!4Ð
5Ñ
5Ô
5Ñ5Ô5ð :¸ÀKÐ9OÐ9OÝÐ8¨WÐ8Ð8Ñ9Ô9Ð9Ý‰<Œ<˜WÐ+Ð+Ð+Ñ+Ð+r   c                 óÐ  — 	 t          | ¦  «        }|                     dd¬¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   |                     d¦  «        t
          k    rdS d„ |                     dg ¦  «        D ¦   «         }t          d
i |¤d|i¤ŽS # t          $ r Y dS t          $ r+}t                               d| ›d	|› �¦  «         Y d}~dS d}~ww xY w)zOReturn the cached view of `pool_id`, or `None` if missing/corrupt/incompatible.Úrúutf-8©ÚencodingNr,   c                 ó&   — g | ]}t          d i |¤Ž‘ŒS )r   )r   ©r7   Úhs     r    ú
<listcomp>z#read_pool_cache.<locals>.<listcomp>[   s"   € Ð@Ð@Ð@ Q•��˜a��Ð@Ð@Ð@r   r+   z+Ignoring unreadable sandbox pool cache for ú: r   )r@   ÚopenÚjsonÚloadÚgetr.   Úpopr"   ÚFileNotFoundErrorÚ	ExceptionÚloggerÚdebug)r#   ÚpathÚfÚdatar+   Úes         r    Úread_pool_cacherX   S   sN  € ðÝ˜wÑ'Ô'ˆØ�YŠY�s WˆYÑ-Ô-ð 	 °Ý”9˜Q‘<”<ˆDð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à�8Š8�IÑÔ¥.Ò0Ð0Ø�4Ø@Ð@¨$¯(ª(°7¸BÑ*?Ô*?Ð@Ñ@Ô@ˆÝÐ-Ð-˜4Ð-Ð- uÐ-Ð-Ð-Ð-øÝð ð ð ØˆtˆtÝð ð ð Ý�ŠÐSÀ7ÐSÐSÐPQÐSÐSÑTÔTÐTØˆtˆtˆtˆtˆtøøøøðøøøsE   ‚&B$ ¨A	½B$ Á	AÁB$ ÁAÁ!B$ Á4/B$ Â$
C%Â1	C%Â: C Ã C%)Údead_host_idsr$   r%   r&   r'   r(   r)   r+   rY   c                ó¸  — |pt          ¦   «         }		 t          | ¦  «        }
|
j                             dd¬¦  «         t	          t          |
¦  «        dz   t          ¬¦  «        5  t          | ¦  «        }d„ |r|j        ng D ¦   «         }|D ]}|||j	        <   Œ|	D ]}| 
                    |d¦  «         Œt          | ||||||t          |                     ¦   «         ¦  «        t          j        ¦   «         ¬¦	  «	        }t          |
|¦  «         ddd¦  «         dS # 1 swxY w Y   dS # t           $ r+}t"                               d| ›d	|› �¦  «         Y d}~dS d}~ww xY w)
a•  Merge `hosts` into the cache for `pool_id` (best-effort, never raises).

    Concurrency-safe: under a file lock, the on-disk hosts are read, then `hosts` are
    upserted by `job_id` and `dead_host_ids` removed, so a process only adds/updates what
    it learned and never drops hosts another process discovered. The result is written
    atomically. The pool config is refreshed from the arguments.
    T)ÚparentsÚexist_okz.lock)Útimeoutc                 ó   — i | ]
}|j         |“ŒS r   )r   rG   s     r    ú
<dictcomp>z#save_pool_cache.<locals>.<dictcomp>}   s   € ÐPÐPÐP a�a”h ÐPÐPÐPr   N)	r#   r$   r%   r&   r'   r(   r)   r+   r   z'Could not write sandbox pool cache for rJ   )Úsetr@   ÚparentÚmkdirr
   r   Ú_LOCK_TIMEOUTrX   r+   r   rO   r"   r-   ÚvaluesÚtimeÚ_atomic_writerQ   rR   rS   )r#   r$   r%   r&   r'   r(   r)   r+   rY   ÚdeadrT   ÚexistingÚmergedÚhostr   ÚcacherW   s                    r    Úsave_pool_cacherl   d   sâ  € ð& Ð!�C™EœE€DðQÝ˜wÑ'Ô'ˆØŒ×Ò $°ÐÑ6Ô6Ð6Ý�#˜d™)œ) gÑ-µ}ÐEÑEÔEð 	'ð 	'Ý& wÑ/Ô/ˆHØPÐP¸hÐ,N¨H¬N¨NÈBÐPÑPÔPˆFØð +ð +�Ø&*��t”{Ñ#Ð#Øð )ð )�Ø—
’
˜6 4Ñ(Ô(Ð(Ð(ÝØØØØ#5Ø#Ø)Ø#Ý˜6Ÿ=š=™?œ?Ñ+Ô+Ýœ9™;œ;ð
ñ 
ô 
ˆEõ ˜$ Ñ&Ô&Ð&ð%	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øõ& ð Qð Qð QÝ�ŠÐO¸wÐOÐOÈAÐOÐOÑPÔPÐPÐPÐPÐPÐPÐPÐPøøøøðQøøøs=   ’AD$ Á#B'DÄ
D$ ÄDÄD$ ÄDÄD$ Ä$
EÄ. EÅEc                 ó¾   — 	 t          | ¦  «                             d¬¦  «         dS # t          $ r+}t                               d| › d|› �¦  «         Y d}~dS d}~ww xY w)z@Remove the cache file for `pool_id` (best-effort, never raises).T)Ú
missing_okz(Could not delete sandbox pool cache for rJ   N)r@   ÚunlinkrQ   rR   rS   )r#   rW   s     r    Údelete_pool_cacherp   ’   s…   € ðPÝ˜Ñ Ô ×'Ò'°4Ð'Ñ8Ô8Ð8Ð8Ð8øÝð Pð Pð PÝ�ŠÐNÀÐNÐNÈ1ÐNÐNÑOÔOÐOÐOÐOÐOÐOÐOÐOøøøøðPøøøs   ‚#' §
A± AÁArT   rk   c                 ó"  — | j         | j        › dt          j        ¦   «         › d�z  }|                     dd¬¦  «        5 }t          j        t          |¦  «        |d¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j        || ¦  «         dS )	zSWrite the cache via a temp file + `os.replace` so readers never see a partial file.r=   z.tmpÚwrC   rD   é   )ÚindentN)	ra   ÚnameÚosÚgetpidrK   rL   Údumpr   Úreplace)rT   rk   ÚtmprU   s       r    rf   rf   š   sÄ   € à
Œ+˜4œ9Ð8Ð8¥r¤y¡{¤{Ð8Ð8Ð8Ñ
8€CØ	�Š�# ˆÑ	(Ô	(ð .¨AÝŒ	•&˜‘-”- ¨1Ð-Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .å„Jˆs�DÑÔÐÐÐs   ¾%A/Á/A3Á6A3)!r   rL   rv   re   Údataclassesr   r   r   Úpathlibr   Útypingr   Ú r	   Úutilsr
   r   Ú
get_loggerr   rR   r.   rc   r   r"   r4   r   r@   rX   r   r`   rl   rp   rf   r   r   r    ú<module>r�      s�  ðð FÐ Eà €€€Ø 	€	€	€	Ø €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ð 
ˆÔ	˜HÑ	%Ô	%€ð €ð €ð ðð ð ð ð ñ ô ñ „ðð" ðð ð ð ð ñ ô ñ „ðð9�Dð 9ð 9ð 9ð 9ð,˜Sð , Tð ,ð ,ð ,ð ,ð˜Sð  Y°Ñ%5ð ð ð ð ð6 &*ð+Qð +Qð +QØð+Qð ð+Qð ð	+Qð
 ð+Qð �T‰zð+Qð ˜‘*ð+Qð �T‰zð+Qð �
Ôð+Qð �s”8˜d‘?ð+Qð 
ð+Qð +Qð +Qð +Qð\P˜sð P tð Pð Pð Pð Pð˜ð  Yð °4ð ð ð ð ð ð r   