Ë
    tPêjý‰  ã                   ón  — U d 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m	Z	m
Z
mZmZmZmZmZ ddlmZ ddlZddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) erddl*m+Z, dZ-e
e.d<   dZ/e
e.d<   dZ0e
e.d<   dZ1e
e.d<   dZ2e
e.d<   dZ3e
e.d<   dZ4e
e.d<   dZ5e
e.d<    G d„ ded ¬!«      Z6 G d"„ d#e«      Z7 G d$„ d%e«      Z8 G d&„ d'e«      Z9 G d(„ d)e«      Z: G d*„ d+e«      Z; G d,„ d-e«      Z<e:e<z  Z= G d.„ d/e«      Z> G d0„ d1e«      Z?e>e?z  Z@ G d2„ d3e«      ZA G d4„ d5e«      ZBe G d6„ d7e«      «       ZCeDeeAdz  eEeFdz  f   ZGee.d8<   d9eHd:eHfd;„ZId<eHd:eHfd=„ZJd>eHd:eFfd?„ZKd@eeFeHf   d:e6fdA„ZLdBeMeFeHf   d:eFdz  fdC„ZNdBeeFeHf   d:eFfdD„ZOdEeFdz  d:eAdz  fdF„ZP G dG„ dHe«      ZQy)Ia  
Code Interpreter Interception Handler

CustomLogger that swaps the native OpenAI Responses ``code_interpreter`` tool for
a function tool, executes the code the model emits inside a sandbox, and feeds the
captured stdout back through the typed agentic loop plan.
é    N)ÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚProtocolÚ	TypeAliasÚ	TypedDictÚruntime_checkable)ÚValidationError)Úverbose_logger)ÚCustomLogger)ÚCodeExecutionResultÚContainerHandle)Ú!CodeInterpreterInterceptionConfig)ÚCHAT_COMPLETION_AGENTIC_SURFACEÚ3NON_CODE_INTERPRETER_INTERCEPTION_INTERNAL_PREFIXESÚAgenticLoopPlanÚAgenticLoopRequestPatchÚis_interception_internal_key)ÚChatCompletionAssistantMessageÚChatCompletionAssistantToolCallÚChatCompletionToolMessage)Ú	CallTypesÚChatCompletionMessageToolCallÚModelResponse)ÚLoggingÚlitellm_code_executionÚ LITELLM_CODE_EXECUTION_TOOL_NAMEÚ%_code_interpreter_interception_activeÚ_INTERCEPTION_ACTIVE_KEYÚ*_code_interpreter_interception_sandbox_keyÚ_SANDBOX_KEYÚ-_code_interpreter_interception_session_scopedÚ_SESSION_SCOPED_KEYÚ/_code_interpreter_interception_converted_streamÚ_CONVERTED_STREAM_KEYÚlitellm_metadataÚ_LITELLM_METADATA_KEYi„  Ú_CACHE_TTL_SECONDSé
   Ú _SESSION_SCOPED_PER_IDENTITY_CAPc                   óR   — e Zd ZU edz  ed<   edz  ed<   ed   ed<   eed<   eed<   y)ÚCodeExecutionToolCallNÚidÚcall_idÚfunctionÚtypeÚnameÚ	arguments)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © ó    ú/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/code_interpreter_interception/handler.pyr/   r/   :   s*   … Øˆd‰
ƒNØ�4‰ZÓØ
�*Ñ
ÓØ
ƒIØ„Nr<   r/   F)Útotalc                   ó(   — e Zd ZU ed   ed<   eed<   y)ÚCodeInterpreterLogOutputÚlogsr3   N©r6   r7   r8   r   r:   r9   r;   r<   r=   r@   r@   B   s   … Ø
�&‰/ÓØ
„Ir<   r@   c                   ób   — e Zd ZU eed<   ed   ed<   ed   ed<   eed<   edz  ed<   ee   ed	<   y)
ÚCodeInterpreterCallr0   Úcode_interpreter_callr3   Ú	completedÚstatusÚcodeNÚcontainer_idÚoutputs)r6   r7   r8   r9   r:   r   Úlistr@   r;   r<   r=   rD   rD   G   s9   … ØƒGØ
Ð)Ñ
*Ó*Ø�KÑ Ó Ø
ƒIØ˜‘*ÓØÐ*Ñ+Ô+r<   rD   c                   óL   — e Zd ZU ed   ed<   eeeeef   f   ed<   ee   ed<   y)ÚCodeExecutionFunctionParametersÚobjectr3   Ú
propertiesÚrequiredN)r6   r7   r8   r   r:   Údictr9   rK   r;   r<   r=   rM   rM   P   s/   … Ø
�(Ñ
ÓØ�S˜$˜s C˜x™.Ð(Ñ)Ó)Ø�3‰iÔr<   rM   c                   ó<   — e Zd ZU ed   ed<   eed<   eed<   eed<   y)ÚResponsesFunctionToolr2   r3   r4   ÚdescriptionÚ
parametersN)r6   r7   r8   r   r:   r9   rM   r;   r<   r=   rS   rS   V   s   … Ø
�*Ñ
ÓØ
ƒIØÓØ/Ô/r<   rS   c                   ó,   — e Zd ZU eed<   eed<   eed<   y)Ú ChatCompletionFunctionDefinitionr4   rT   rU   N)r6   r7   r8   r9   r:   rM   r;   r<   r=   rW   rW   ]   s   … Ø
ƒIØÓØ/Ô/r<   rW   c                   ó(   — e Zd ZU ed   ed<   eed<   y)ÚChatCompletionFunctionToolr2   r3   N)r6   r7   r8   r   r:   rW   r;   r<   r=   rY   rY   c   s   … Ø
�*Ñ
ÓØ.Ô.r<   rY   c                   ó(   — e Zd ZU ed   ed<   eed<   y)ÚResponsesFunctionToolChoicer2   r3   r4   NrB   r;   r<   r=   r[   r[   k   s   … Ø
�*Ñ
ÓØ
„Ir<   r[   c                   ó2   — e Zd ZU ed   ed<   eeef   ed<   y)Ú ChatCompletionFunctionToolChoicer2   r3   N)r6   r7   r8   r   r:   rQ   r9   r;   r<   r=   r]   r]   p   s   … Ø
�*Ñ
ÓØ�3˜�8‰nÔr<   r]   c                   ó8   — e Zd ZU eed<   edz  ed<   edz  ed<   y)ÚSandboxToolParamsÚsandbox_providerNÚapi_keyÚapi_base)r6   r7   r8   r9   r:   r;   r<   r=   r_   r_   x   s   … ØÓØ�4‰ZÓØ�D‰jÔr<   r_   c                   ó<   — e Zd Zdefd„Zdededefd„Zdedefd„Z	y)ÚSandboxConfigProtocolÚreturnc              ƒ   ó   K  — y ­w©Nr;   )Úselfs    r=   Úacreate_sandboxz%SandboxConfigProtocol.acreate_sandbox   ó   è ø� ùó   ‚Ú	containerrH   c             ƒ   ó   K  — y ­wrg   r;   )rh   rl   rH   s      r=   Ú	arun_codezSandboxConfigProtocol.arun_code�   rj   rk   c             ƒ   ó   K  — y ­wrg   r;   )rh   rl   s     r=   Úadelete_sandboxz%SandboxConfigProtocol.adelete_sandboxƒ   rj   rk   N)
r6   r7   r8   r   ri   r9   r   rn   rN   rp   r;   r<   r=   rd   rd   ~   s*   „ Ø; Ó;àc¨OÐcÀ3ÐcÐK^ÓcàQ°/ÐQÀfÔQr<   rd   c                   ó   — e Zd ZU eed<   y)Ú_SupportsOutputÚoutputN)r6   r7   r8   rN   r:   r;   r<   r=   rr   rr   †   s   … à„Nr<   rr   Ú_CachedContainerÚitemre   c                 ób   — t        | t        «      r| }|j                  d«      S t        | dd «      S )Nr3   ©Ú
isinstancerQ   ÚgetÚgetattr)ru   Úitem_mappings     r=   Ú_output_item_typer|   Ž   s1   € Ü�$œÔØ15ˆØ×Ñ Ó'Ð'Ü�4˜ Ó&Ð&r<   Úresponsec                 ól   — t        | t        «      r| }|j                  dg «      S t        | dg «      xs g S )Nrs   rw   )r}   Úresponse_mappings     r=   Ú_response_outputr€   •   s9   € Ü�(œDÔ!Ø8@ÐØ×#Ñ# H¨bÓ1Ð1Ü�8˜X rÓ*Ò0¨bÐ0r<   r5   c                 óD   — t        | t        «      r| S | €dS t        | «      S )NÚ )rx   r9   ©r5   s    r=   Ú_tool_call_argumentsr„   œ   s&   € Ü�)œSÔ!ØÐØÐ"ˆ2Ð6¬¨I«Ð6r<   Ú	tool_callc           	      óÖ   — | j                  d«      }| j                  d«      }t        |t        «      r|nd t        |t        «      r|nd dt        t	        | j                  d«      «      dœS )Nr0   r1   r2   r5   ©r0   r1   r3   r4   r5   )ry   rx   r9   r    r„   )r…   Útool_call_idr1   s      r=   Ú_narrow_tool_callr‰   ¢   s[   € Ø#Ÿ-™-¨Ó-€LØ—]‘] 9Ó-€Gä(¨´sÔ;‰lÀÜ(¨´#Ô6‘7¸DØÜ0Ü)¨)¯-©-¸Ó*DÓEñð r<   Úkwargsc                 óª   — dD ]N  }| j                  |«      }t        |t        «      sŒ%|}|j                  d«      }|sŒ;t        |t        «      sŒL|c S  y )N)Úmetadatar)   Ú
session_id)ry   rx   rQ   r9   )rŠ   Úmeta_keyÚmetarŒ   Úsids        r=   Ú_extract_session_idr‘   ®   sR   € Ø4ò ˆØ�z‰z˜(Ó#ˆÜ�dœDÕ!Ø*.ˆHØ—,‘,˜|Ó,ˆCÚ”z #¤sÕ+Ø’
ðð r<   c                 óL   — | j                  d«      }t        |t        «      r|S dS )NÚuser_api_key_hashr‚   ©ry   rx   r9   )rŠ   Úidentitys     r=   Ú_extract_identityr–   ¹   s%   € Ø—j‘jÐ!4Ó5€HÜ! (¬CÔ0ˆ8Ð8°bÐ8r<   Úsandbox_tool_namec                 óB  — | €y 	 ddl m}  || «      }|€y |j                  d«      }|j                  d«      }|j                  d«      }t	        t        |t        «      r|ndt        |t        «      r|nd t        |t        «      r|¬«      S d ¬«      S # t        $ r Y y w xY w)Nr   )Úresolve_sandbox_toolr`   ra   rb   r‚   )r`   ra   rb   )Úlitellm.sandbox.sandbox_toolsr™   ÚImportErrorry   r_   rx   r9   )r—   r™   ÚresolvedÚproviderra   rb   s         r=   Ú_resolve_sandbox_toolrž   ¾   s®   € ØÐ ØðÝFñ 1EÐEVÓ0W€HØÐØØ—l‘lÐ#5Ó6€HØ—\‘\ )Ó,€GØ—l‘l :Ó.€HÜÜ%/°¼#Ô%>™ÀBÜ% g¬sÔ3‘¸Ü'¨´#Ô6�ôð ð =Aôð øô ò Ùðús   …B Â	BÂBc                   óÄ  ‡ — e Zd ZdZ	 	 	 	 dPdedee   dz  dedz  dedz  fˆ fd„Ze	de
d	d fd
„«       Zedeeef   deeef   d	d fd„«       Zdeeef   dedz  d	edz  fd„Zedeeef   d	dfd„«       Zedeeef   d	dfd„«       Zed	efd„«       Zdedz  d	efd„Zededz  d	efd„«       Zeded	efd„«       Zdeeef   d	edz  fd„Zdededee   dee   dz  dededed	eeef   fd„Zdededee   ded ed!eeef   d"d#dedeeef   d	efd$„Z deeef   dedee   d%eeef   deeef   d	efd&„Z!ed'e"d	edz  fd(„«       Z#edeeef   d	ee$   fd)„«       Z%edeeef   d	edz  fd*„«       Z&d'e"d+e'dz  d,e$d-edz  d	ee(e)f   f
d.„Z*d/eded	dfd0„Z+ed1e,eef   d	edz  fd2„«       Z-edeeef   d	eeef   fd3„«       Z.dededz  d	eeeef      dz  fd4„Z/d%eeef   d	eeef   fd5„Z0ded/eded	efd6„Z1ed7ed8e2e   d	ee   dz  fd9„«       Z3ed:ed	efd;„«       Z4d'e"d+e'dz  d:ed	efd<„Z5	 dQd=edz  d>edz  d	ee"e'dz  f   fd?„Z6d>ed	dfd@„Z7d	ee"e'dz  f   fdA„Z8d'e"d+e'dz  dBed	e9fdC„Z:d'e"d+e'dz  d	dfdD„Z;d=edz  d	dfdE„Z<ded	eeeef      fdF„Z=ded	ee$   fdG„Z>ded	ee$   fdH„Z?ed,e@d	e$dz  fdI„«       ZAedJe2e$   d	eBfdK„«       ZCeded	eDdz  fdL„«       ZEdMed	efdN„ZFdRdO„ZGˆ xZHS )SÚ!CodeInterpreterInterceptionLoggera÷  
    CustomLogger that implements transparent code-interpreter execution loops.

    Flow:
    1. Replace the native ``code_interpreter`` tool with a function tool in the
       pre-call hook so the model emits code as function-call arguments.
    2. Detect ``litellm_code_execution`` function calls in the model response.
    3. Run the emitted code in a sandbox (reused per request via a server-minted
       sandbox key) and build a typed rerun plan that appends the
       function_call_output.
    NÚenabledÚenabled_providersr—   Úsandbox_configc                 óh   •— t         ‰| �  «        || _        || _        || _        || _        i | _        y rg   )ÚsuperÚ__init__r¡   r¢   r—   r£   Ú_container_cache)rh   r¡   r¢   r—   r£   Ú	__class__s        €r=   r¦   z*CodeInterpreterInterceptionLogger.__init__ß   s7   ø€ ô 	‰ÑÔØˆŒØ!2ˆÔØ!2ˆÔØ,ˆÔØ=?ˆÕr<   Úconfigre   c                 ó†   —  | t        |j                  dd«      «      |j                  d«      |j                  d«      ¬«      S )Nr¡   Tr¢   r—   )r¡   r¢   r—   )Úboolry   )Úclsr©   s     r=   Úfrom_config_yamlz2CodeInterpreterInterceptionLogger.from_config_yamlí   s<   € áÜ˜Ÿ™ I¨tÓ4Ó5Ø$Ÿj™jÐ)<Ó=Ø$Ÿj™jÐ)<Ó=ô
ð 	
r<   Úlitellm_settingsÚcallback_specific_paramsc                 óŠ   — d| v r| d   n%t        |j                  d«      t        «      r|d   ni }t        j	                  |«      S )NÚ$code_interpreter_interception_paramsÚcode_interpreter_interception)rx   ry   rQ   r    r­   )r®   r¯   Úparamss      r=   Úinitialize_from_proxy_configz>CodeInterpreterInterceptionLogger.initialize_from_proxy_configõ   sX   € ð 6Ð9IÑIð ÐCÒDô Ð2×6Ñ6Ð7VÓWÔY]Ô^ð *Ð*IÒJàð 	ô 1×AÑAÀ&ÓIÐIr<   rŠ   Ú	call_typec              ƒ   ó2  K  — |j                  d«      s=|j                  t        d «       |j                  t        d «       | j	                  |«       | j
                  sy |t        j                  t        j                  t        j                  t        j                  fvry | j                  �| j                  |«      | j                  vry |j                  d«      }t        |t        «      sy t        d„ |D «       «      sy d|t        <   t!        |«      }|r't#        |«      }|r|› d|› �n||t        <   d|t$        <   n%t'        j(                  «       j*                  |t        <   |j                  d«      rd|d<   d|t,        <   | j/                  |«       | j1                  |¬«      }|D �cg c]*  }t        |t2        «      r|j                  d	«      d
k(  r|n|‘Œ, c}|d<   | j5                  |j                  d«      «      r| j7                  |¬«      |d<   |S c c}w ­w)NÚ_agentic_loop_depthÚtoolsc              3   óh   K  — | ]*  }t        |t        «      xr |j                  d «      dk(  –— Œ, y­w)r3   Úcode_interpreterN)rx   rQ   ry   )Ú.0Útools     r=   ú	<genexpr>zSCodeInterpreterInterceptionLogger.async_pre_call_deployment_hook.<locals>.<genexpr>  s/   è ø€ ÒgÐY]”:˜d¤DÓ)ÒT¨d¯h©h°vÓ.>ÐBTÑ.TÓTÑgùs   ‚02Tú:ÚstreamF©rµ   r3   rº   Útool_choice)ry   Úpopr"   r$   Ú_strip_interception_metadatar¡   r   Ú	responsesÚ
aresponsesÚ
completionÚacompletionr¢   Ú_resolve_providerrx   rK   Úanyr‘   r–   r&   ÚuuidÚuuid4Úhexr(   Ú_write_interception_metadataÚ_get_function_toolrQ   Ú%_tool_choice_targets_code_interpreterÚ_get_function_tool_choice)rh   rŠ   rµ   r¸   r�   r•   Úfunction_toolr¼   s           r=   Úasync_pre_call_deployment_hookz@CodeInterpreterInterceptionLogger.async_pre_call_deployment_hook  sì  è ø€ ð �z‰zÐ/Ô0Ø�J‰JÔ/°Ô6Ø�J‰J”| TÔ*Ø×-Ñ-¨fÔ5Ø�|Š|ØØÜ×ÑÜ× Ñ Ü× Ñ Ü×!Ñ!ð	
ñ 
ð Ø×!Ñ!Ð-°$×2HÑ2HÈÓ2PÐX\×XnÑXnÑ2nØà—z‘z 'Ó*ˆÜ˜%¤Ô&ØÜÑgÐafÔgÔgØà+/ˆÔ'Ñ(Ü/°Ó7ˆ
ÙÜ/°Ó7ˆHÙAI h Z¨q°°Ñ#=ÈzˆF”<Ñ Ø*.ˆFÔ&Ò'ä#'§:¡:£<×#3Ñ#3ˆF”<Ñ Ø�:‰:�hÔØ$ˆF�8ÑØ,0ˆFÔ(Ñ)Ø×)Ñ)¨&Ô1à#×6Ñ6ÀÐ6ÓKˆð ö
àô )¨¬tÔ4¸¿¹À&Ó9IÐM_Ò9_‰]ÐeiÑiò
ˆˆw‰ð ×5Ñ5°f·j±jÀÓ6OÔPØ$(×$BÑ$BÈYÐ$BÓ$WˆF�=Ñ!Øˆùò
ùs   ‚F$HÆ&/HÇAHc                 ó>  — | j                  t        «      }t        |t        «      sy |}|j	                  «       D ��ci c]2  \  }}t        |«      s"|j                  d«      s|dk7  r|t        k7  r||“Œ4 }}}|r
|| t        <   y | j                  t        d «       y c c}}w )NÚ_agentic_loopÚmax_agentic_loops)	ry   r*   rx   rQ   Úitemsr   Ú
startswithr&   rÂ   )rŠ   rŒ   Úcurrent_metadataÚkeyÚvalueÚfiltered_metadatas         r=   rÃ   z>CodeInterpreterInterceptionLogger._strip_interception_metadata2  sŸ   € à Ÿ*™*Ô%:Ó;ˆÜ˜(¤DÔ)ØØ5=Ðð /×4Ñ4Ó6÷$
á��UÜ/°Ô4Ø—N‘N ?Ô3ØÐ*Ò*ØÔ*Ò*ð �‰Jð$
Ðñ $
ñ Ø,=ˆFÔ(Ò)à�J‰JÔ,¨dÕ3ùó$
s   ¼7Bc                 óÊ   — | j                  t        «      }t        |t        «      rt        |«      ni }t        t
        t        t        fD ]  }|| v sŒ| |   ||<   Œ || t        <   y rg   )ry   r*   rx   rQ   r"   r$   r&   r(   )rŠ   ÚexistingrŒ   rÙ   s       r=   rÍ   z>CodeInterpreterInterceptionLogger._write_interception_metadataE  sb   € à Ÿ*™*Ô%:Ó;ˆÜ?IÈ(ÔTXÔ?Y¬T°(¬^Ð_aˆÜ,¬lÔ<OÔQfÐgò 	,ˆCØ�fŠ}Ø & s¡�˜’ð	,ð )1ˆÔ$Ò%r<   c                  ó   — ddddiidgdœS )NrN   rH   r3   Ústring)r3   rO   rP   r;   r;   r<   r=   Ú_get_function_parametersz:CodeInterpreterInterceptionLogger._get_function_parametersN  s#   € ð Ø! F¨HÐ#5Ð6Ø˜ñ
ð 	
r<   c                 ó²   — d}|t         j                  t         j                  fv rdt        || j	                  «       dœdœS dt        || j	                  «       dœS )Nz3Execute python code in a sandbox and return stdout.r2   )r4   rT   rU   ©r3   r2   )r3   r4   rT   rU   )r   rÆ   rÇ   r    rà   )rh   rµ   rT   s      r=   rÎ   z4CodeInterpreterInterceptionLogger._get_function_toolV  se   € ØRˆØœ×-Ñ-¬y×/DÑ/DÐEÑEà"ä<Ø#.Ø"&×"?Ñ"?Ó"Aññð ð Ü4Ø&Ø×7Ñ7Ó9ñ	
ð 	
r<   c                 ón   — | t         j                  t         j                  fv rddt        idœS dt        dœS )Nr2   r4   râ   )r3   r4   )r   rÆ   rÇ   r    rÀ   s    r=   rÐ   z;CodeInterpreterInterceptionLogger._get_function_tool_choiceh  sE   € ð œ×-Ñ-¬y×/DÑ/DÐEÑEà"Ø#Ô%EÐFñð ð
 Ü4ñ
ð 	
r<   rÁ   c                 ó*  — t        | t        «      sy| }|j                  d«      }|j                  d«      dk(  xsZ |j                  d«      dk(  xsD |j                  d«      t        k(  xs* t        |t        «      xr |j                  d«      t        k(  S )NFr2   r3   rº   r4   )rx   rQ   ry   r    )rÁ   Úchoicer2   s      r=   rÏ   zGCodeInterpreterInterceptionLogger._tool_choice_targets_code_interpreterv  s�   € ä˜+¤tÔ,ØØ+6ˆØ Ÿ*™* ZÓ0ˆà�J‰J�vÓÐ"4Ñ4ò iØ�z‰z˜&Ó!Ð%7Ñ7òià�z‰z˜&Ó!Ô%EÑEòiô ˜8¤TÓ*Òg¨x¯|©|¸FÓ/CÔGgÑ/gð		
r<   c                 óâ   — |j                  d«      }t        |t        «      r|r|S |j                  d«      }t        |t        «      sy 	 t        j                  |¬«      d   S # t
        $ r Y y w xY w)NÚcustom_llm_providerÚmodel)rè   é   )ry   rx   r9   ÚlitellmÚget_llm_providerÚ	Exception)rh   rŠ   r�   rè   s       r=   rÈ   z3CodeInterpreterInterceptionLogger._resolve_providerƒ  sj   € Ø Ÿ*™*Ð%:Ó;ˆÜ�h¤Ô$©ØˆOØ—z‘z 'Ó*ˆÜ˜%¤Ô%Øð	Ü×+Ñ+°%Ô8¸Ñ;Ð;øÜò 	Ùð	ús   Á	A" Á"	A.Á-A.r}   rè   Úmessagesr¸   r¿   rç   c              ƒ   ó(  K  — | j                   sdi fS |j                  t        «      sdi fS | j                  �|| j                  vrdi fS |j                  d«      t        k(  r| j                  |¬«      n| j                  |¬«      }|sdi fS dd|ifS ­w)NFÚ_agentic_loop_api_surface)r}   TÚ
tool_calls)r¡   ry   r"   r¢   r   Ú2_extract_chat_completion_code_execution_tool_callsÚ"_extract_code_execution_tool_calls)	rh   r}   rè   rí   r¸   r¿   rç   rŠ   rð   s	            r=   Úasync_should_run_agentic_loopz?CodeInterpreterInterceptionLogger.async_should_run_agentic_loop�  s±   è ø€ ð �|Š|Ø˜"�9ÐØ�z‰zÔ2Ô3Ø˜"�9ÐØ×!Ñ!Ð-Ð2EÈT×McÑMcÑ2cØ˜"�9Ðð �z‰zÐ5Ó6Ô:YÒYð ×CÑCÈXÐCÔVà×8Ñ8À(Ð8ÓKð 	ñ
 Ø˜"�9Ðà�l JÐ/Ð/Ð/ùs   ‚BBÚ"anthropic_messages_provider_configÚ*anthropic_messages_optional_request_paramsÚlogging_objÚLiteLLMLoggingObjc
              ƒ   óú  K  — |	j                  d«      t        k(  r| j                  |||||	¬«      ƒ d {  –—† S | j                  «       ƒ d {  –—†  | j	                  |«      }
| j                  |	«      }t        |	j                  t        «      «      }|rt        |	«      nd }| j                  ||¬«      ƒ d {  –—† \  }}	 | j                  |«      }| j                  |«      }g }|
D ]Í  }|j                  dd«      }| j                  |«      }| j                  |||¬«      ƒ d {  –—† }|j                  d|j                  d«      t        |d	œ«       |j                  d
|j                  d«      |dœ«       |j                  dt!        j"                  «       j$                  › �dd|||rd|dœgng dœ«       ŒÏ 	 |}t+        ||| j-                  |j                  d«      t.        j0                  ¬«      | j3                  |«      | j5                  |	«      ¬«      }t7        d|d|xs dt        |	j                  t        «      «      |dœ¬«      S 7 �Œ7 �Œþ7 �Œ—7 �Œ.# t&        $ r | j)                  |«      ƒ d {  –—†7   ‚ w xY w­w)Nrï   )r¸   rè   rí   Úoptional_paramsrŠ   ©Ú	cache_keyr•   r5   r‚   ©rl   r³   r5   Úfunction_callr1   )r3   r1   r4   r5   Úfunction_call_output)r3   r1   rs   Úci_rE   rF   rA   ©r3   rA   ©r0   r3   rG   rH   rI   rJ   r¸   ©r¸   rµ   ©rè   rí   r¸   rù   rŠ   Trº   )Ú	tool_typeÚsandbox_keyÚis_session_scopedÚcode_interpreter_calls©Úrun_agentic_loopÚrequest_patchrŒ   )ry   r   Ú(_build_chat_completion_agentic_loop_planÚ_prune_expired_cacheÚ_agentic_tool_callsÚ_extract_sandbox_keyr«   r&   r–   Ú_get_or_create_containerÚ_container_idÚ_normalize_messagesÚ_parse_codeÚ_run_tool_callÚappendr    rÊ   rË   rÌ   rì   Ú_delete_container_for_cache_keyr   Ú_get_followup_toolsr   rÄ   Ú_get_followup_optional_paramsÚ_filter_agentic_loop_kwargsr   )rh   r¸   rè   rí   r}   rô   rõ   rö   r¿   rŠ   rð   r  Ú
is_sessionr•   rl   r³   rI   Ú
input_listr  r…   r5   rH   Ústdoutrù   r
  s                            r=   Úasync_build_agentic_loop_planz?CodeInterpreterInterceptionLogger.async_build_agentic_loop_planª  s¥  è ø€ ð �:‰:Ð1Ó2Ô6UÒUØ×FÑFØØØ!Ø JØð Gó ÷ ð ð ×'Ñ'Ó)×)Ð)Ø ×4Ñ4°UÓ;ˆ
Ø!×6Ñ6°vÓ>ˆÜ  §¡Ô,?Ó!@ÓAˆ
Ù7AÔ+¨FÔ3ÀtˆØ"&×"?Ñ"?È+Ð`hÐ"?Ó"i×iÑˆ	�6ð#	Ø"&×"4Ñ"4°YÓ"?ˆLØ $× 8Ñ 8¸Ó BˆJØGIÐ"Ø'ò �	Ø%ŸM™M¨+°rÓ:�	Ø×'Ñ'¨	Ó2�Ø#×2Ñ2¸YÈvÐajÐ2Ók×k�Ø×!Ñ!à /Ø#,§=¡=°Ó#;Ü @Ø%.ñ	ôð ×!Ñ!à 6Ø#,§=¡=°Ó#;Ø"(ñôð '×-Ñ-à #¤D§J¡J£L×$4Ñ$4Ð#5Ð6Ø 7Ø"-Ø $Ø(4ÙJP¨f¸fÑ%EÑ$FÐVXñõ	ñ'ðB "LˆÜ6ØØØ×*Ñ*Ø%×)Ñ)¨'Ó2Ü#×-Ñ-ð +ó ð !×>Ñ>¸ÓOØ×3Ñ3°FÓ;ô	 
ˆô Ø!Ø'à/Ø*Ò0¨bÜ%)¨&¯*©*Ô5HÓ*IÓ%JØ*@ñ	ô	
ð 		
ðAùð 	*ùð
 jùð lúô4 ò 	Ø×6Ñ6°{ÓC×CÑCØð	üsm   ‚2I;´IµI;ÁI
ÁA)I;Â6IÂ7I;Â?A#I Ä"IÄ#BI Æ5BI;É
I;ÉI;ÉI ÉI8É0I3É1I8É8I;rù   c              ƒ   ó°  K  — | j                  «       ƒ d {  –—†  | j                  |«      }| j                  |«      }t        |j	                  t
        «      «      }|rt        |«      nd }	| j                  ||	¬«      ƒ d {  –—† \  }
}	 | j                  |
«      }|D �cg c]  }| j                  |
|||¬«      ƒ d {  –—† ‘Œ! }}|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }}t        |t        |«      | j                  |«      gz   |z   | j                  |j	                  d«      t         j"                  ¬«      | j%                  |«      | j'                  |«      ¬«      }t)        d|d	|xs d
t        |j	                  t
        «      «      |ddœ¬«      S 7 �Œ�7 �Œ7 Œác c}w # t        $ r | j                  |«      ƒ d {  –—†7   ‚ w xY wc c}w c c}w ­w)Nrú   )rl   r³   r…   rI   r   ré   r¸   r  r  Trº   r‚   Úopenai)r  r  r  r  Úresponse_formatr  )r  r  r  r«   ry   r&   r–   r  r  Ú"_build_chat_completion_tool_resultrì   r  r   rK   Ú(_build_chat_completion_assistant_messager  r   rÆ   r  r  r   )rh   r¸   rè   rí   rù   rŠ   rð   r  r  r•   rl   r³   rI   r…   Útool_resultsÚresultÚtool_messagesr  r
  s                      r=   r  zJCodeInterpreterInterceptionLogger._build_chat_completion_agentic_loop_plan  s  è ø€ ð ×'Ñ'Ó)×)Ð)Ø ×4Ñ4°UÓ;ˆ
Ø!×6Ñ6°vÓ>ˆÜ  §¡Ô,?Ó!@ÓAˆ
Ù7AÔ+¨FÔ3ÀtˆØ"&×"?Ñ"?È+Ð`hÐ"?Ó"i×iÑˆ	�6ð	Ø"&×"4Ñ"4°YÓ"?ˆLð ",ö#ð ð ×=Ñ=Ø'Ø!Ø'Ø!-ð	 >ó ÷ ñ ð#ˆLð #ð 9EÖE¨f  q£	ÐEˆÐEØAMÖ(N°v¨°«Ð(NÐÐ(Nä6ØÜ˜(“^ t×'TÑ'TÐU_Ó'`Ð&aÑaÐdqÑqØ×*Ñ*Ø%×)Ñ)¨'Ó2Ü#×.Ñ.ð +ó ð !×>Ñ>¸ÓOØ×3Ñ3°FÓ;ô	 
ˆô Ø!Ø'à/Ø*Ò0¨bÜ%)¨&¯*©*Ô5HÓ*IÓ%JØ*@Ø#+ñô

ð 
	
ðG 	*ùð
 jùð
úò#øô ò 	Ø×6Ñ6°{ÓC×CÑCØð	üò  FùÚ(Nùsƒ   ‚G–F—A)GÂ FÂGÂ	F$ ÂFÂ;F
Â<FÃF$ ÃGÃGÃGÃGÃ&B2GÆGÆFÆF$ Æ$G	ÇGÇG	Ç	Grl   c                 óD   — t        | dd «      }t        |t        «      r|S d S )Nr0   )rz   rx   r9   )rl   rI   s     r=   r  z/CodeInterpreterInterceptionLogger._container_id9  s$   € ä&-¨i¸¸tÓ&DˆÜ)¨,¼Ô<ˆ|ÐFÀ$ÐFr<   c                 óª   — | j                  d«      }t        |t        «      sg S |}|D �cg c]  }t        |t        «      sŒt	        |«      ‘Œ  c}S c c}w )Nrð   )ry   rx   rK   rQ   r‰   )r¸   rð   rÖ   ru   s       r=   r  z5CodeInterpreterInterceptionLogger._agentic_tool_calls>  sG   € à!ŸI™I lÓ3ˆ
Ü˜*¤dÔ+ØˆIØ%/ˆØ49ÖT¨D¼ZÈÌdÕ=SÔ! $Õ'ÒTÐTùÒTs   ªAÁ Ac                 óT   — | j                  t        «      }t        |t        «      r|S d S rg   )ry   r$   rx   r9   )rŠ   r  s     r=   r  z6CodeInterpreterInterceptionLogger._extract_sandbox_keyF  s$   € à#ŸZ™Z¬Ó5ˆÜ(¨´cÔ:ˆ{ÐDÀÐDr<   r³   r…   rI   c           	   ƒ   ó†  K  — |j                  dd«      }| j                  |«      }| j                  |||¬«      ƒ d {  –—† }|j                  d«      xs1 |j                  d«      xs t        j                  «       j
                  }d||dœdt        j                  «       j
                  › �d	d
|||r	d|dœgdœfS g dœfS 7 Œ�­w)Nr5   r‚   rü   r0   r1   r¼   )Úrolerˆ   Úcontentrÿ   rE   rF   rA   r   r  )ry   r  r  rÊ   rË   rÌ   )	rh   rl   r³   r…   rI   r5   rH   r  rˆ   s	            r=   r   zDCodeInterpreterInterceptionLogger._build_chat_completion_tool_resultK  sá   è ø€ ð %Ÿ=™=¨°bÓ9ˆ	Ø×&Ñ& yÓ1ˆØ"×1Ñ1¸IÈfÐ`iÐ1Ój×jˆØ'Ÿm™m¨DÓ1Òa°Y·]±]À9Ó5MÒaÔQU×Q[ÑQ[ÓQ]×QaÑQaˆð Ø ,Ø!ñð œDŸJ™J›L×,Ñ,Ð-Ð.Ø/Ø%ØØ ,ÙAG V°VÑ<Ð=ñð
ð 	
ð NPñð
ð 	
ð kús   ‚;C½B?¾BCÚplanc              ƒ   ó¬   K  — |r|j                   xs i ni }|j                  d«      ry | j                  | j                  |«      «      ƒ d {  –—†  y 7 Œ­w)Nr  )rŒ   ry   r  Ú_metadata_sandbox_key)rh   r+  rŠ   rŒ   s       r=   Úasync_agentic_loop_cleanup_hookzACodeInterpreterInterceptionLogger.async_agentic_loop_cleanup_hookf  sG   è ø€ ÙDH¨T¯]©]Ò-@¹bÈbˆØ�<‰<Ð+Ô,ØØ×2Ñ2°4×3MÑ3MÈhÓ3WÓX×XÒXús   ‚A
AÁAÁArŒ   c                 óL   — | j                  d«      }t        |t        «      r|S d S )Nr  r”   )rŒ   r  s     r=   r-  z7CodeInterpreterInterceptionLogger._metadata_sandbox_keyl  s$   € à%Ÿ\™\¨-Ó8ˆÜ(¨´cÔ:ˆ{ÐDÀÐDr<   c                 ó€   — | j                  «       D ��ci c]  \  }}|dvrt        |t        ¬«      s||“Œ c}}S c c}}w )N>   rÇ   Úlitellm_logging_obj)Úprefixes)rÖ   r   r   )rŠ   ÚkÚvs      r=   r  z=CodeInterpreterInterceptionLogger._filter_agentic_loop_kwargsq  sF   € ð Ÿ™›÷
á��1ØÐ>Ñ>Ü0°Ô=pÕqð ˆq‰Dó
ð 	
ùó 
s   ”":c                 óÌ   — t        |t        «      sy |D �cg c]C  }t        |t        «      r/|j                  d«      dk(  rt        | j	                  |¬«      «      n|‘ŒE c}S c c}w )Nr3   rº   rÀ   )rx   rK   rQ   ry   rÎ   )rh   r¸   rµ   r¼   s       r=   r  z5CodeInterpreterInterceptionLogger._get_followup_toolsz  sk   € Ü˜%¤Ô&Øð ö
ð ô ˜d¤DÔ)¨d¯h©h°vÓ.>ÐBTÒ.Tô �T×,Ñ,°yÐ,ÓAÔBàñò
ð 	
ùò 
s   –AA!c                 ó²   — | j                  |j                  d«      «      }|j                  «       D ��ci c]  \  }}|dk7  sŒ|dk(  r|rŒ||“Œ c}}S c c}}w )NrÁ   r¸   )rÏ   ry   rÖ   )rh   rù   Údrop_tool_choicer3  r4  s        r=   r  z?CodeInterpreterInterceptionLogger._get_followup_optional_params†  s^   € Ø"&×"LÑ"LÈ_×M`ÑM`ÐanÓMoÓ"pÐà,×2Ñ2Ó4÷
Ù�Q˜¸¸W»ÈaÐS`ÒN`ÒeuˆAˆq‰Dó
ð 	
ùó 
s   ´AÁAÁ
Ac              ƒ   óÜ  K  — |r|j                   xs i ni }|j                  d«      s(| j                  | j                  |«      «      ƒ d {  –—†  |j                  d«      }|rt	        |t
        «      s|S t	        |t        «      r,|}| j                  |j                  d«      |«      }|�||d<   |S t	        |t        «      s|S | j                  |j                  |«      }|�||_	        |S 7 Œž­w)Nr  r  rs   )
rŒ   ry   r  r-  rx   rK   rQ   Ú_merge_code_interpreter_callsrr   rs   )	rh   r}   r+  rŠ   rŒ   Úcallsr   Úmerged_mapping_outputÚmerged_attr_outputs	            r=   Ú%async_post_agentic_loop_response_hookzGCodeInterpreterInterceptionLogger.async_post_agentic_loop_response_hookŒ  sï   è ø€ ñ EI¨T¯]©]Ò-@¹bÈbˆØ�|‰|Ð/Ô0Ø×6Ñ6°t×7QÑ7QÐRZÓ7[Ó\×\Ð\à—|‘|Ð$<Ó=ˆÙœJ u¬dÔ3ØˆOä�h¤Ô%Ø9AÐØ+/×+MÑ+MÐN^×NbÑNbÐckÓNlÐnsÓ+tÐ!Ø$Ð0Ø-BÐ  Ñ*ØˆOä˜(¤OÔ4ØˆOØ$(×$FÑ$FÀxÇÁÐX]Ó$^ÐØÐ)Ø0ˆHŒOØˆð% ]ús   ‚A	C,ÁC*ÁBC,rs   r:  c                 ó    — t        | t        «      sy | }t        d„ t        |«      D «       t	        |«      «      }|d | t        |«      z   ||d  z   S )Nc              3   óD   K  — | ]  \  }}t        |«      d k(  sŒ|–— Œ y­w)ÚmessageN)r|   )r»   Úiru   s      r=   r½   zRCodeInterpreterInterceptionLogger._merge_code_interpreter_calls.<locals>.<genexpr>«  s!   è ø€ ÒW‘7�1�dÔ2CÀDÓ2IÈYÓ2VŒQÑWùs   ‚ ™ )rx   rK   ÚnextÚ	enumerateÚlen)rs   r:  rÖ   Ú	insert_ats       r=   r9  z?CodeInterpreterInterceptionLogger._merge_code_interpreter_calls¥  sV   € ä˜&¤$Ô'ØØ%+ˆÜÙWœi¨Ó.ÔWÜ�‹Jó
ˆ	ð �Z�iÐ ¤4¨£;Ñ.°°y°zÐ1BÑBÐBr<   r5   c                 óž   — 	 | r%t        j                  | «      j                  dd«      S dS # t         j                  t        t
        f$ r Y yw xY w)NrH   r‚   )ÚjsonÚloadsry   ÚJSONDecodeErrorÚ	TypeErrorÚAttributeErrorrƒ   s    r=   r  z-CodeInterpreterInterceptionLogger._parse_code°  sI   € ð	Ù<E”4—:‘:˜iÓ(×,Ñ,¨V°RÓ8ÐMÈ2ÐMøÜ×$Ñ$¤i´Ð@ò 	Ùð	ús   ‚&+ ©+ «AÁAc              ƒ   ó´  K  — 	 |r%t        j                  |«      j                  dd«      nd}| j                  |||¬«      ƒ d {  –—† }t        |dd «      rP|j                  }t        |t        «      r$|j                  d«      xs |j                  d«      n
t        |«      }d|› �S t        |d	d«      xs dS # t         j                  t        f$ r Y yw xY w7 Œ‘­w)
NrH   r‚   z.[invalid tool arguments: could not parse code])rl   r³   rH   ÚerrorrÚ   r4   z[execution error] r  )rG  rH  ry   rI  rJ  Ú	_run_coderz   rM  rx   rQ   r9   )rh   rl   r³   r5   rH   r#  rM  r@  s           r=   r  z0CodeInterpreterInterceptionLogger._run_tool_call·  sÓ   è ø€ ð	DÙCLœ$Ÿ*™* YÓ/×3Ñ3°F¸BÔ?ÐRTˆDð #Ÿn™n°yÈÐVZ˜nÓ[×[ˆÜ�6˜7 DÔ)Ø!Ÿ<™<ˆEÜHRÐSXÔZ^ÔH_˜UŸY™Y wÓ/ÒD°5·9±9¸VÔ3DÔehÐinÓeoˆGØ'¨ yÐ1Ð1Ü�v˜x¨Ó,Ò2°Ð2øô ×$Ñ$¤iÐ0ò 	DÙCð	Dúð \ús4   ‚C„)B7 ­CÁCÁA2CÂ7CÃCÃCÃCrû   r•   c              ƒ   ó‚  K  — |rU| j                   j                  |«      }|�8|d   |d   t        j                  «       |d   f| j                   |<   |d   |d   fS | j                  «       ƒ d {  –—† \  }}|r@|�| j	                  |«      ƒ d {  –—†  ||t        j                  «       |f| j                   |<   ||fS 7 ŒM7 Œ/­w)Nr   ré   é   )r§   ry   ÚtimeÚ_create_containerÚ_evict_lru_session_if_over_cap)rh   rû   r•   Úcachedrl   r³   s         r=   r  z:CodeInterpreterInterceptionLogger._get_or_create_containerÄ  sÒ   è ø€ ñ
 Ø ×1Ñ1×5Ñ5°iÓ@ˆFØÐ!Ø4:¸1±I¸vÀa¹yÌ$Ï)É)Ë+ÐW]Ð^_ÑW`Ð3a�×%Ñ% iÑ0Ø˜a‘y &¨¡)Ð+Ð+à"&×"8Ñ"8Ó":×:Ñˆ	�6ÙØÐ#Ø×9Ñ9¸(ÓC×CÐCØ09¸6Ä4Ç9Á9Ã;ÐPXÐ/YˆD×!Ñ! )Ñ,Ø˜&Ð Ð ð ;øð Dús$   ‚A+B?Á-B;Á.B?ÂB=Â.B?Â=B?c              ƒ   óL  K  — | j                   j                  «       D ��cg c]  \  }}|d   |k(  sŒ||f‘Œ }}}t        |«      t        k  ry t	        |d„ ¬«      \  }}| j                   j                  |d «       | j                  |d   |d   ¬«      ƒ d {  –—†  y c c}}w 7 Œ­w)NrP  c                 ó   — | d   d   S )Nré   é   r;   )ru   s    r=   ú<lambda>zRCodeInterpreterInterceptionLogger._evict_lru_session_if_over_cap.<locals>.<lambda>Ú  s   € ÀDÈÁGÈAÁJ€ r<   )rÙ   r   ré   ©rl   r³   )r§   rÖ   rD  r-   ÚminrÂ   Ú_delete_container)rh   r•   r3  r4  Úidentity_entriesÚlru_keyÚ	lru_entrys          r=   rS  z@CodeInterpreterInterceptionLogger._evict_lru_session_if_over_capÖ  s¨   è ø€ Ø6:×6KÑ6K×6QÑ6QÓ6S×"h©d¨a°ÐWXÐYZÑW[Ð_gÓWg A q¢6Ð"hÐÑ"hÜÐÓ Ô#CÒCØÜ Ð!1Ñ7NÔOÑˆ�Ø×Ñ×!Ñ! '¨4Ô0Ø×$Ñ$¨y¸©|ÀIÈaÁLÐ$ÓQ×QÑQùó #ið
 	Rús!   ‚B$ B±B·AB$ÂB"ÂB$c              ƒ   ó@  K  — | j                   �$| j                   j                  «       ƒ d {  –—† d fS t        | j                  «      }|€t	        d«      ‚t        j                  |d   |j                  d«      |j                  d«      ¬«      ƒ d {  –—† }||fS 7 Œm7 Œ
­w)Nz‰CodeInterpreterInterception: no sandbox available. Provide a sandbox_config or configure a sandbox tool resolvable via sandbox_tool_name.r`   ra   rb   )r�   ra   rb   )r£   ri   rž   r—   Ú
ValueErrorrê   ry   )rh   r³   rl   s      r=   rR  z3CodeInterpreterInterceptionLogger._create_containerÞ  s¦   è ø€ Ø×ÑÐ*Ø×,Ñ,×<Ñ<Ó>×>ÀÐDÐDä-¨d×.DÑ.DÓEˆØˆ>Üð%óð ô
 ")×!8Ñ!8ØÐ.Ñ/Ø—J‘J˜yÓ)Ø—Z‘Z 
Ó+ô"
÷ 
ˆ	ð
 ˜&Ð Ð ð ?øð
ús"   ‚*B¬B­A$BÂBÂ	BÂBrH   c              ƒ   óô   K  — | j                   �%| j                   j                  ||¬«      ƒ d {  –—† S |€t        d«      ‚t        j                  |d   |||j	                  d«      ¬«      ƒ d {  –—† S 7 ŒD7 Œ­w)N)rl   rH   z>CodeInterpreterInterception: no sandbox available to run code.r`   ra   )r�   rl   rH   ra   )r£   rn   r`  rê   ry   )rh   rl   r³   rH   s       r=   rN  z+CodeInterpreterInterceptionLogger._run_codeð  s„   è ø€ ð ×ÑÐ*Ø×,Ñ,×6Ñ6ÀÐQUÐ6ÓV×VÐVØˆ>ÜÐ]Ó^Ð^Ü×&Ñ&ØÐ.Ñ/ØØØ—J‘J˜yÓ)ô	
÷ 
ð 	
ð Wøð
ús!   ‚-A8¯A4°?A8Á/A6Á0A8Á6A8c              ƒ   óJ  K  — 	 | j                   �%| j                   j                  |¬«      ƒ d {  –—†  y |€y t        j                  |d   ||j                  d«      |j                  d«      ¬«      ƒ d {  –—†  y 7 ŒK7 Œ# t        $ r t        j                  d«       Y y w xY w­w)N)rl   r`   ra   rb   )r�   rl   ra   rb   z?CodeInterpreterInterception: failed to delete sandbox container)r£   rp   rê   ry   rì   r   Ú	exception)rh   rl   r³   s      r=   r[  z3CodeInterpreterInterceptionLogger._delete_containerþ  s©   è ø€ ð	hØ×"Ñ"Ð.Ø×)Ñ)×9Ñ9ÀIÐ9ÓN×NÐNØØˆ~ØÜ×)Ñ)ØÐ 2Ñ3Ø#ØŸ
™
 9Ó-ØŸ™ JÓ/ô	÷ ñ ð	 Oøðùô ò 	hÜ×$Ñ$Ð%fÖgð	hüs^   ‚B#„+A? ¯A;°A? ´B#µA? ·B#¸=A? Á5A=Á6A? Á:B#Á;A? Á=A? Á?B ÂB#ÂB Â B#c              ƒ   ó–   K  — |sy | j                   j                  |d «      }|€y | j                  |d   |d   ¬«      ƒ d {  –—†  y 7 Œ­w)Nr   ré   rY  )r§   rÂ   r[  )rh   rû   rT  s      r=   r  zACodeInterpreterInterceptionLogger._delete_container_for_cache_key  sM   è ø€ ÙØØ×-Ñ-×1Ñ1°)¸TÓBˆØˆ>ØØ×$Ñ$¨v°a©yÀÈÁÐ$ÓK×KÒKús   ‚?A	ÁAÁA	c                 óh   — t        |t        «      rd|dœgS t        |t        «      rt        |«      S g S )NÚuser)r)  r*  )rx   r9   rK   )rh   rí   s     r=   r  z5CodeInterpreterInterceptionLogger._normalize_messages  s3   € Ü�h¤Ô$Ø#°Ñ9Ð:Ð:Ü�h¤Ô%Ü˜“>Ð!Øˆ	r<   c           
      óH  — t        |«      }t        |t        «      sg S |D �cg c]u  }| j                  |«      rbt        |t        «      r|j                  d«      nt        |dd «      t        t        |t        «      r|j                  d«      nt        |dd«      dœ‘Œw c}S c c}w )Nr1   r5   r‚   )r1   r4   r5   )r€   rx   rK   Ú_is_code_execution_callrQ   ry   rz   r    )rh   r}   rs   ru   s       r=   rò   zDCodeInterpreterInterceptionLogger._extract_code_execution_tool_calls  s™   € Ü(¨Ó2ˆÜ˜&¤$Ô'ØˆIð ö
ð Ø×+Ñ+¨DÔ1ô 4>¸dÄDÔ3I˜DŸH™H YÔ/ÌwÐW[Ð]fÐhlÓOmÜ8Ü7AÀ$ÌÔ7M˜dŸh™h {Ô3ÔSZÐ[_ÐalÐnpÓSqóò
ð 	
ùò 
s   ¢A:Bc                 óâ   — | j                  |«      }|€g S |j                  xs g }|sg S |d   j                  }|j                  xs g }|D �cg c]  }| j	                  |«      x}�|‘Œ c}S c c}w )Nr   )Ú_to_model_responseÚchoicesr@  rð   Ú$_normalize_chat_completion_tool_call)rh   r}   Úmodel_responserk  r@  rð   r…   Ú
normalizeds           r=   rñ   zTCodeInterpreterInterceptionLogger._extract_chat_completion_code_execution_tool_calls,  sŒ   € Ø $× 7Ñ 7¸Ó AˆØÐ!ØˆIØ'×/Ñ/Ò5°2ˆÙØˆIØ  ™×+Ñ+ˆØ#×.Ñ.Ò4°"ˆ
ð (ö
àØ"×GÑGÈ	ÓRÐR�
Ð_ò ò
ð 	
ùò 
s   ÁA,c                 óR  — | j                   dk7  s| j                  j                  t        k7  ry | j                  j                  }t        |t        «      rt        j                  |«      }nt        |t        «      s|€dn
t        |«      }| j                  | j                  dt        |dœS )Nr2   r‚   r‡   )r3   r2   r4   r    r5   rx   rQ   rG  Údumpsr9   r0   )r…   r5   s     r=   rl  zFCodeInterpreterInterceptionLogger._normalize_chat_completion_tool_call<  s�   € ð �>‰>˜ZÒ'¨9×+=Ñ+=×+BÑ+BÔFfÒ+fØà×&Ñ&×0Ñ0ˆ	Ü�i¤Ô&ÜŸ
™
 9Ó-‰IÜ˜I¤sÔ+Ø'Ð/™´S¸³^ˆIð —,‘,Ø —|‘|ØÜ4Ø"ñ
ð 	
r<   rð   c           
      óˆ   — | D �cg c].  }|j                  d«      dt        |j                  dd«      dœdœ‘Œ0 }}d|dœS c c}w )	Nr0   r2   r5   r‚   )r4   r5   )r0   r3   r2   Ú	assistant)r)  rð   )ry   r    )rð   r…   Úassistant_tool_callss      r=   r!  zJCodeInterpreterInterceptionLogger._build_chat_completion_assistant_messageQ  sf   € ð (ö
N
ð ð  —m‘m DÓ)Ø"ä<Ø!*§¡¨{¸BÓ!?ñóð
N
Ðð 
N
ð  Ø.ñ
ð 	
ùò
N
s   …3?c                 óŽ   — t        | t        «      r| S t        | t        «      sy | }	 t        di |¤ŽS # t        t        f$ r Y y w xY w)Nr;   )rx   r   rQ   rJ  r   )r}   Úresponse_fieldss     r=   rj  z4CodeInterpreterInterceptionLogger._to_model_responsee  sM   € ä�h¤Ô.ØˆOÜ˜(¤DÔ)ØØ4<ˆð	Ü Ñ3 ?Ñ3Ð3øÜœ?Ð+ò 	Ùð	ús   §
2 ²AÁAru   c                 óÖ   — t        |t        «      r0|}|j                  d«      dk(  xr |j                  d«      t        k(  S t	        |dd «      }t	        |dd «      }|dk(  xr	 |t        k(  S )Nr3   rý   r4   )rx   rQ   ry   r    rz   )rh   ru   r{   Ú	item_typeÚ	item_names        r=   rh  z9CodeInterpreterInterceptionLogger._is_code_execution_callq  sw   € Ü�dœDÔ!Ø59ˆLà× Ñ  Ó(¨OÑ;ò QØ ×$Ñ$ VÓ,Ô0PÑPðô $+¨4°¸Ó#>ˆ	Ü#*¨4°¸Ó#>ˆ	Ø˜OÑ+Ò]°	Ô=]Ñ0]Ð]r<   c              ƒ   óX  K  — t        j                   «       }| j                  j                  «       D �����cg c]  \  }^}}}}||z
  t        kD  r|||f‘Œ }}}}}}|D ]=  \  }}}| j                  j	                  |d «       | j                  ||¬«      ƒ d {  –—†  Œ? y c c}}}}}w 7 Œ­w)NrY  )rQ  r§   rÖ   r+   rÂ   r[  )rh   Únowrû   rl   r³   Úlast_accessedÚ_Úexpireds           r=   r  z6CodeInterpreterInterceptionLogger._prune_expired_cache|  s¼   è ø€ Ü—Y‘Y“[ˆð FJ×EZÑEZ×E`ÑE`ÓEb÷
ò 
áA�	ÐA˜I v¨}¸qØ�]Ñ"Ô%7Ò7ð ˜	 6Ò*ð
ˆô 
ð
 -4ò 	MÑ(ˆI�y &Ø×!Ñ!×%Ñ% i°Ô6Ø×(Ñ(°9ÀVÐ(ÓL×LÑLñ	Mùö
ð Mús   ‚5B*·BÁAB*ÂB(ÂB*)TNNNrg   )re   N)Ir6   r7   r8   Ú__doc__r«   rK   r9   rd   r¦   Úclassmethodr   r­   ÚstaticmethodrQ   r   r´   rN   r   rÒ   rÃ   rÍ   rM   rà   ÚCodeExecutionFunctionToolrÎ   ÚCodeExecutionFunctionToolChoicerÐ   rÏ   rÈ   Útupleró   r   r  r  r   r  r/   r  r  r_   r   rD   r   r.  r   r-  r  r  r  r=  r   r9  r  r  r  rS  rR  r   rN  r[  r  r  rò   rñ   r   rl  r   r!  r   rj  rh  r  Ú__classcell__)r¨   s   @r=   r    r    Ò   sp  ø„ ñ
ð Ø.2Ø(,Ø7;ñ@àð@ð   ™9 tÑ+ð@ð  ™:ð	@ð
 .°Ñ4õ@ð ð
Ð&Gð 
ÐLoò 
ó ð
ð ðJØ˜s C˜x™.ðJà"& s¨C x¡.ðJð 
-òJó ðJð-Ø˜3 ˜;Ñ'ð-Ø4=ÀÑ4Dð-à	�‰ó-ð^ ð4¨T°#°v°+Ñ->ð 4À4ò 4ó ð4ð$ ð1¨T°#°v°+Ñ->ð 1À4ò 1ó ð1ð ð
Ð&Eò 
ó ð
ð
¨I¸Ñ,<ð 
ÐAZó 
ð$ ð
Ø˜tÑ#ð
à	(ò
ó ð
ð ð

¸6ð 

Àdò 

ó ð

ð
¨¨S°&¨[Ñ(9ð 
¸cÀD¹jó 
ð0àð0ð ð0ð �t‘*ð	0ð
 �D‰z˜DÑ ð0ð ð0ð !ð0ð ð0ð 
ˆt�TˆzÑ	ó0ð6V
àðV
ð ðV
ð �t‘*ð	V
ð
 ðV
ð -3ðV
ð 59¸¸f¸Ñ4EðV
ð )ðV
ð ðV
ð �S˜&�[Ñ!ðV
ð 
óV
ðp5
à�C˜�KÑ ð5
ð ð5
ð �t‘*ð	5
ð
 ˜c 6˜kÑ*ð5
ð �S˜&�[Ñ!ð5
ð 
ó5
ðn ðG ð G°S¸4±Zò Gó ðGð ðU 4¨¨V¨Ñ#4ð U¸Ð>SÑ9Tò Uó ðUð ðE T¨#¨v¨+Ñ%6ð E¸3À¹:ò Eó ðEð
à"ð
ð " DÑ(ð
ð )ð	
ð
 ˜D‘jð
ð 
Ð(Ð*=Ð=Ñ	>ó
ð6Y¸/ð YÐSWð YÐ\`ó Yð ðE¨°°V°Ñ(<ð EÀÀtÁò Eó ðEð ð
¨D°°f°Ñ,=ð 
À$ÀsÈFÀ{ÑBSò 
ó ð
ð

¨ð 

¸IÈÑ<Lð 

ÐQUÐVZÐ[^Ð`fÐ[fÑVgÑQhÐkoÑQoó 

ð
¸TÀ#ÀvÀ+Ñ=Nð 
ÐSWÐX[Ð]cÐXcÑSdó 
ðØðØ&5ðØ?Cðà	óð2 ðC¨fð C¸XÀfÑ=Mð CÐRVÐW]ÑR^ÐaeÑReò Có ðCð ð˜sð  sò ó ðð3¨oð 3ÐGXÐ[_ÑG_ð 3Ðloð 3Ðtwó 3ð   $ñ!à˜‘:ð!ð ˜‘*ð!ð 
ˆÐ 1°DÑ 8Ð8Ñ	9ó	!ð$R¸Sð RÀTó Rð!¨¨Ð@QÐTXÑ@XÐ/XÑ)Yó !ð$
Ø(ð
Ø2CÀdÑ2Jð
ØRUð
à	ó
ðh°ð hÐJ[Ð^bÑJbð hÐgkó hð L¸sÀT¹zð LÈdó Lð¨Fð °t¸DÀÀfÀÑ<MÑ7Nó ð
¸6ð 
ÀdÐK`ÑFaó 
ð
È6ð 
ÐVZÐ[pÑVqó 
ð  ð
Ø0ð
à	 Ñ	%ò
ó ð
ð( ð
ØÐ2Ñ3ð
à	'ò
ó ð
ð& ð	 Vð 	°ÀÑ0Dò 	ó ð	ð	^¨Fð 	^°tó 	^÷	Mr<   r    )Rr~  rG  rQ  rÊ   Úcollections.abcr   r   Útypingr   r   r   r   r	   r
   r   r   Úpydanticr   rê   Úlitellm._loggingr   Ú"litellm.integrations.custom_loggerr   Ú,litellm.llms.base_llm.sandbox.transformationr   r   Ú8litellm.types.integrations.code_interpreter_interceptionr   Ú(litellm.types.integrations.custom_loggerr   r   r   r   r   Úlitellm.types.llms.openair   r   r   Úlitellm.types.utilsr   r   r   Ú*litellm.litellm_core_utils.litellm_loggingr   r÷   r    r:   r"   r$   r&   r(   r*   r+   r-   r/   r@   rD   rM   rS   rW   rY   r�  r[   r]   r‚  r_   rd   rr   rƒ  Úfloatr9   rt   rN   r|   r€   r„   r‰   rQ   r‘   r–   rž   r    r;   r<   r=   ú<module>r‘     s[  ðòó Û Û ß -ß h× hÓ hå $ã Ý +Ý ;÷õ÷õ ÷ñ ÷
ñ ñ ÝWà*BÐ   %Ó BØ"IÐ ˜%Ó IØB€ˆeÓ BØLÐ �UÓ LØPÐ �uÓ PØ1Ð �uÓ 1Ø#Ð �EÓ #Ø*,Ð   %Ó ,ô˜I¨Uõ ô˜yô ô
,˜)ô ,ô iô ô0˜Iô 0ô0 yô 0ô/ ô /ð
 2Ð4NÑNÐ ô )ô ô
 yô ð
 #>Ð@`Ñ"`Ð ô˜	ô ôR˜Hô Rð ô�hó ó ðð $ OÐ5FÈÑ5MÈuÐVYÐ\`ÑV`Ð$`ÑaÐ �)Ó að'˜Fð ' vó 'ð1˜vð 1¨&ó 1ð7 Fð 7¨só 7ð	 ¨¨f¨Ñ!5ð 	Ð:Oó 	ð  S¨& [Ñ 1ð °c¸D±jó ð9˜g c¨6 kÑ2ð 9°só 9ð
¨S°4©Zð Ð<MÐPTÑ<Tó ô(s
M¨õ s
Mr<   