Ë
    uPêjs  ã                   óÔ   — U d Z ddlZddlmZmZ ddlZddl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 dZeed	<   d
Zeed<   dZeed<   dZeed<   dZeed<   eZeed<    G d„ de«      Zy)a  
e2b sandbox provider.

Talks to e2b's REST API directly over httpx (no e2b SDK dependency):
  - create: POST {api_base}/sandboxes
  - run:    POST https://{JUPYTER_PORT}-{sandboxID}.{domain}/execute  (NDJSON stream)
  - delete: DELETE {api_base}/sandboxes/{sandboxID}
é    N)ÚFinalÚcast)ÚSANDBOX_MAX_OUTPUT_BYTESÚBaseSandboxConfigÚCodeExecutionResultÚContainerHandle)ÚAsyncHTTPHandlerÚget_async_httpx_client)Úget_secret_str)ÚhttpxSpecialProviderzhttps://api.e2b.appÚE2B_API_BASEzcode-interpreter-v1ÚE2B_DEFAULT_TEMPLATEze2b.appÚE2B_DEFAULT_DOMAINiOÃ  ÚJUPYTER_PORTé,  ÚDEFAULT_SANDBOX_TIMEOUTÚMAX_OUTPUT_BYTESc                   ó^  — e Zd Zdedz  defd„Zddedz  defd„Zddddddddœdedz  d	edz  d
edz  dedz  dedz  de	dz  dedz  de
fd„Zddddœde
ez  dededz  de	dz  dedz  defd„Zddddœde
ez  dedz  dedz  dedz  def
d„Zede
ez  de
fd„«       Zedee   defd„«       Zy)ÚE2BSandboxConfigÚclientNÚreturnc                 ó>   — |�|S t        t        j                  ¬«      S )N)Úllm_provider)r
   r   ÚSandbox)Úselfr   s     úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/e2b/sandbox/transformation.pyÚ_httpzE2BSandboxConfig._http%   s   € ØÐØˆMÜ%Ô3G×3OÑ3OÔPÐPó    Úapi_keyc                 ó>   — |xs t        d«      }|st        d«      ‚|S )NÚE2B_API_KEYz8E2B API key not set. Set E2B_API_KEY or pass api_key=...)r   Ú
ValueError)r   r   ÚkwargsÚkeys       r   Úvalidate_environmentz%E2BSandboxConfig.validate_environment*   s%   € ØÒ=¤¨}Ó =ˆÙÜÐWÓXÐXØˆ
r   )ÚtemplateÚtimeoutÚallow_internet_accessr   Úapi_baseÚmetadatar   r&   r'   r(   r)   r*   c          	   ‹   óä  K  — | j                  |¬«      }	|xs t        }
|xs t        |�|nt        d|€dn|dœ}|r||d<   t	        t
        j                  | j                  |«      j                  |
› d�|	ddœ|¬«      ƒ d {  –—† «      }|j                  «       }t        |d	   d
|j                  d«      xs t        ¬«      }|j                  d«      |j                  d«      |	|
dœ|_        |S 7 Œl­w)N)r   T)Ú
templateIDr'   Úsecurer(   r*   z
/sandboxesúapplication/json)ú	X-API-KeyúContent-Type)ÚurlÚheadersÚjsonÚ	sandboxIDÚe2bÚdomain©ÚidÚproviderr6   ÚenvdAccessTokenÚtrafficAccessToken)Úenvd_access_tokenÚtraffic_access_tokenr   r)   )r%   r   r   r   r   ÚhttpxÚResponser   Úpostr3   r   Úgetr   Ú_hidden_params)r   r&   r'   r(   r   r)   r*   r   r#   r$   ÚbaseÚbodyÚresponseÚdataÚhandles                  r   Úacreate_sandboxz E2BSandboxConfig.acreate_sandbox0   s  è ø€ ð ×.Ñ.°wÐ.Ó?ˆØÒ.¤,ˆà"Ò:Ô&:Ø")Ð"5‘wÔ;RØØ.CÐ.K¡dÐQfñ	
ˆñ Ø'ˆD�ÑäÜ�N‰NØ—*‘*˜VÓ$×)Ñ)Ø�f˜JÐ'Ø&)Ð;MÑNØð *ó ÷ ó
ˆð —m‘m“oˆä'Ø�KÑ ØØ—8‘8˜HÓ%Ò;Ô);ô
ˆð "&§¡Ð*;Ó!<Ø$(§H¡HÐ-AÓ$BØØñ	!
ˆÔð ˆð'ús   ‚A?C0ÂC.
ÂA-C0)r   Úenv_varsr   Ú	containerÚcoderI   c             ‹   óþ  K  — | j                  |«      }|j                  j                  d«      }|st        d«      ‚d|dœ}	|j                  j                  d«      }
|
r|
|	d<   dt        › d|j
                  › d	|j                  › d
�}t        t        j                  | j                  |«      j                  ||	|d |dœd¬«      ƒ d {  –—† «      }| j                  |«      ƒ d {  –—† }| j                  |«      S 7 Œ27 Œ­w)Nr<   z¶Cannot run code from a sandbox id alone. e2b secure sandboxes require the access token returned by acreate_sandbox; pass the ContainerHandle it returned instead of a bare sandbox id.r.   )r0   zX-Access-Tokenr=   zE2B-Traffic-Access-Tokenzhttps://ú-ú.z/execute)rK   Ú
context_idrI   T)r1   r2   r3   Ústream)Ú
_as_handlerB   rA   r"   r   r8   r6   r   r>   r?   r   r@   Ú_read_capped_linesÚ_parse_lines)r   rJ   rK   r   rI   r   r#   rG   Útokenr2   Útraffic_tokenr1   rE   Úliness                 r   Ú	arun_codezE2BSandboxConfig.arun_code^   s  è ø€ ð Ÿ™¨	Ó2ˆà×,Ñ,×0Ñ0Ð1DÓEˆÙÜðLóð ð +=ÐPUÑVˆØ%×4Ñ4×8Ñ8Ð9OÓPˆÙØ2?ˆGÐ.Ñ/à¤˜~¨Q¨v¯y©y¨k¸¸6¿=¹=¸/ÈÐRˆÜÜ�N‰NØ—*‘*˜VÓ$×)Ñ)ØØØ"°$ÀHÑMØð	 *ó ÷ ó
ˆð "×4Ñ4°XÓ>×>ˆØ× Ñ  Ó'Ð'ðøð ?ús$   ‚CC=ÃC9
ÃC=Ã#C;Ã$C=Ã;C=)r   r)   r   c             ‹   ó0  K  — | j                  |«      }|xs- |j                  j                  d«      xs | j                  «       }|xs# |j                  j                  d«      xs t        }	 t        t        j                  | j                  |«      j                  |› d|j                  › �d|i¬«      ƒ d {  –—† «      }	d|	j                  cxk  xr d	k  S c S 7 Œ"# t        j                  $ r$}
|
j                  j                  dk(  rY d }
~
y‚ d }
~
ww xY w­w)
Nr   r)   z/sandboxes/r/   )r1   r2   i”  FéÈ   r   )rQ   rB   rA   r%   r   r   r>   r?   r   Údeleter8   ÚHTTPStatusErrorrE   Ústatus_code)r   rJ   r   r)   r   r#   rG   r$   rC   rE   Úes              r   Úadelete_sandboxz E2BSandboxConfig.adelete_sandbox„   s  è ø€ ð Ÿ™¨	Ó2ˆØÒc × 5Ñ 5× 9Ñ 9¸)Ó DÒcÈ×HaÑHaÓHcˆØÒW &×"7Ñ"7×";Ñ";¸JÓ"GÒWÌ<ˆð	Ü"Ü—‘Ø—j‘j Ó(×/Ñ/Ø˜& ¨F¯I©I¨;Ð7Ø(¨#Ð.ð 0ó ÷ óˆHð �h×*Ñ*Ö0¨SÑ0Ð0Ñ0Ð0ðùô
 ×$Ñ$ò 	Ø�z‰z×%Ñ%¨Ò,ÜØûð	üsI   ‚A*DÁ-A
C Â7C
Â8C Ã DÃC ÃDÃ/DÄDÄDÄDÄDc                 ón   — t        | t        «      r| S t        t        | «      dt        ¬«      }i |_        |S )Nr5   r7   )Ú
isinstancer   Ústrr   rB   )rJ   rG   s     r   rQ   zE2BSandboxConfig._as_handlež   s2   € ä�i¤Ô1ØÐÜ'¬3¨y«>ÀEÔRdÔeˆØ "ˆÔØˆr   rV   c                 óð  ‡‡‡	‡
— dt         fd„Št        ˆˆ	ˆ
fd„| D «       «      Šdt         fˆfd„}t        d„  |d«      D «       d «      }t        d„  |d	«      D «       d «      }t        d
j	                  d„  |d«      D «       «      d
j	                  d„  |d«      D «       «       |d«      D ���cg c],  }|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}‘Œ. c}}}||¬«      S c c}}w c c}}}w )NÚstrippedc                 ó`   — 	 t        j                  | «      S # t         j                  $ r Y y w xY w©N)r3   ÚloadsÚJSONDecodeError)rc   s    r   Ú
_try_parsez1E2BSandboxConfig._parse_lines.<locals>._try_parse¨   s.   € ðÜ—z‘z (Ó+Ð+øÜ×'Ñ'ò Ùðús   ‚ —-¬-c              3   ó^   •K  — | ]$  }|j                  «       xŠsŒ ‰‰«      xŠ€Œ!‰–— Œ& y ­wre   )Ústrip)Ú.0Úlinerh   Úparsedrc   s     €€€r   ú	<genexpr>z0E2BSandboxConfig._parse_lines.<locals>.<genexpr>®   s7   øè ø€ ò  
Ø°T·Z±Z³\Ð)A¨Ñ)AÑQ[Ð\dÓQeÐGeÀvÑFrŒFñ 
ùs   ƒ-›
-¦-Úmessage_typec                 ó   •‡ — ˆ fd„‰D «       S )Nc              3   óL   •K  — | ]  }|j                  d «      ‰k(  sŒ|–— Œ y­w)ÚtypeN©rA   )rk   Úmro   s     €r   rn   zAE2BSandboxConfig._parse_lines.<locals>.of_type.<locals>.<genexpr>³   s    øè ø€ ÒI˜!¨1¯5©5°«=¸LÓ+H”AÑIùs   ƒ$�$© )ro   Úmessagess   `€r   Úof_typez.E2BSandboxConfig._parse_lines.<locals>.of_type²   s   ù€ ÛI˜xÔIÐIr   c              3   óf   K  — | ]$  }d D �ci c]  }||j                  |«      “Œ c}–— Œ& yc c}w ­w))ÚnameÚvalueÚ	tracebackNrs   )rk   rt   r$   s      r   rn   z0E2BSandboxConfig._parse_lines.<locals>.<genexpr>¶   s+   è ø€ ÒcÈQÐ)GÖH #ˆc�1—5‘5˜“:‰oÖHÑcùÒHùs   ‚	1‹,¤1Úerrorc              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)Úexecution_countNrs   ©rk   rt   s     r   rn   z0E2BSandboxConfig._parse_lines.<locals>.<genexpr>º   s   è ø€ ÒO¨!ˆQ�U‰UÐ$×%ÑOùs   ‚Únumber_of_executionsÚ c              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w©Útextr�   Nrs   r   s     r   rn   z0E2BSandboxConfig._parse_lines.<locals>.<genexpr>¿   ó   è ø€ ÒH°˜1Ÿ5™5 ¨×,ÑHùó   ‚Ústdoutc              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­wrƒ   rs   r   s     r   rn   z0E2BSandboxConfig._parse_lines.<locals>.<genexpr>À   r…   r†   ÚstderrÚresultrr   )r‡   r‰   Úresultsr|   r~   )ra   ÚtupleÚnextr   ÚjoinÚitems)rV   rw   r|   r~   rt   ÚkÚvrh   rv   rm   rc   s          @@@@r   rS   zE2BSandboxConfig._parse_lines¦   só   û€ ð	¤ó 	ô  õ  
Ø$ô 
ó 
ˆð	J¤#õ 	Jô ÙcÑRYÐZaÓRbÔcØó
ˆô "&ÙO©wÐ7MÓ/NÔOØó"
ˆô
 #Ø—7‘7ÑH±g¸hÓ6GÔHÓHØ—7‘7ÑH±g¸hÓ6GÔHÓHÙJQÐRZÓJ[×\Ð\ÀQ q§w¡w£y×@™t˜q !°A¸³K�a˜‘dÕ@Ô\ØØ+ô
ð 	
ùó AùÔ\s   Â.C1ÃC+ÃC+ÃC1Ã+C1re   )Ú__name__Ú
__module__Ú__qualname__r	   r   ra   r%   ÚintÚboolÚdictr   rH   r   rW   r^   ÚstaticmethodrQ   ÚlistrS   ru   r   r   r   r   $   sÁ  „ ðQÐ,¨tÑ3ð QÐ8Hó Qñ
¨C°$©Jð ÈCó ð  $Ø"Ø-1Ø"Ø#Ø $Ø*.ò,ð ˜‘*ð,ð �t‘ð	,ð
  $ d™{ð,ð �t‘ð,ð ˜‘*ð,ð ˜‘+ð,ð ! 4Ñ'ð,ð 
ó,ðf #Ø $Ø*.ò$(ð # SÑ(ð$(ð ð	$(ð
 �t‘ð$(ð ˜‘+ð$(ð ! 4Ñ'ð$(ð 
ó$(ðT #Ø#Ø*.ò1ð # SÑ(ð1ð �t‘ð	1ð
 ˜‘*ð1ð ! 4Ñ'ð1ð 
ó1ð4 ð˜o°Ñ3ð ¸ò ó ðð ð
˜D ™Ið 
Ð*=ò 
ó ñ
r   r   )Ú__doc__r3   Útypingr   r   r>   Ú,litellm.llms.base_llm.sandbox.transformationr   r   r   r   Ú&litellm.llms.custom_httpx.http_handlerr	   r
   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.custom_httpr   r   Ú__annotations__r   r   r   r   r   r   ru   r   r   ú<module>r¡      s{   ðòó ß ã ÷ó ÷õ 8Ý ?à+€ˆeÓ +Ø3Ð �eÓ 3Ø%Ð �EÓ %Ø€ˆeÓ Ø!$Ð ˜Ó $Ø2Ð �%Ó 2ô`
Ð(õ `
r   