Ë
    uPêj.  ã                   ó  — U d 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	  G d„ de
e«      Zdee
ef   fd	„Zdee
ef   fd
„Z e«       Zeed<    G d„ d«      Zdee   dz  defd„Zdee   dz  dee   fd„Z e«       Zeed<   y)aÌ  
Automatic Code Execution Handler for LiteLLM Skills

When `litellm_code_execution` tool is present, this handler automatically:
1. Makes the LLM call
2. Executes any code the model generates
3. Continues the conversation with results
4. Returns final response with generated files inline (base64)

This mimics Anthropic's behavior where code execution happens automatically.
Generated files are returned directly in the response - no separate storage needed.
é    N)ÚEnum)ÚAnyÚFinal)Úverbose_loggerc                   ó   — e Zd ZdZdZy)ÚLiteLLMInternalToolszÆ
    Enum for internal LiteLLM tools that are injected into requests.

    These tools are handled automatically by LiteLLM hooks and are not
    passed to the underlying LLM provider directly.
    Úlitellm_code_executionN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCODE_EXECUTION© ó    úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/litellm_proxy/skills/code_execution.pyr   r      s   „ ñð .�Nr   r   Úreturnc                  óX   — dt         j                  j                  ddddddœidgdœd	œd
œS )zÉ
    Returns the litellm_code_execution tool definition in OpenAI format.

    This tool enables automatic code execution in a sandboxed environment
    when skills include executable Python code.
    Úfunctionú¯Execute Python code in a sandboxed environment. Use this to run code that generates files, processes data, or performs computations. Generated files will be returned directly.ÚobjectÚcodeÚstringúPython code to execute©ÚtypeÚdescription©r   Ú
propertiesÚrequired)Únamer   Ú
parameters)r   r   ©r   r   Úvaluer   r   r   Úget_litellm_code_execution_toolr$   !   sF   € ð ä(×7Ñ7×=Ñ=ð Mà Ø%°ÐIaÑ'bÐcØ#˜Hññ
ñð r   c                  óR   — t         j                  j                  ddddddœidgdœdœS )	zÙ
    Returns the litellm_code_execution tool definition in Anthropic/messages API format.

    This tool enables automatic code execution in a sandboxed environment
    when skills include executable Python code.
    r   r   r   r   r   r   r   )r    r   Úinput_schemar"   r   r   r   Ú)get_litellm_code_execution_tool_anthropicr'   6   s>   € ô %×3Ñ3×9Ñ9ð IàØ!¨HÐE]Ñ#^Ð_Ø˜ñ
ñð r   ÚLITELLM_CODE_EXECUTION_TOOLc                   ó|   — e Zd ZdZ	 	 ddedz  dedz  fd„Z	 ddedee   dee   d	eee	f   d
edz  deee
f   fd„Zy)ÚCodeExecutionHandlerzú
    Handles automatic code execution for LiteLLM skills.

    When enabled, this handler intercepts LLM responses with code execution
    tool calls, executes them in a sandbox, and continues the conversation
    automatically until completion.
    NÚmax_iterationsÚsandbox_timeoutc                 ó@   — ddl m}m} |xs || _        |xs || _        y )Nr   )ÚDEFAULT_MAX_ITERATIONSÚDEFAULT_SANDBOX_TIMEOUT)Ú+litellm.llms.litellm_proxy.skills.constantsr.   r/   r+   r,   )Úselfr+   r,   r.   r/   s        r   Ú__init__zCodeExecutionHandler.__init__U   s%   € ÷
	
ð
 -ÒFÐ0FˆÔØ.ÒIÐ2IˆÕr   ÚmodelÚmessagesÚtoolsÚskill_filesÚskill_idr   c              ‹   ó¢  K  — ddl }ddlm} t        |«      }	g }
g } || j                  ¬«      }d}t        | j                  «      D �]  }t        j                  d|dz   | j                  «        |j                  d.||	|dœ|¤Žƒ d{  –—† }|j                  d   j                  }|j                  d   j                  }d|j                  d	œ}|j                  rV|j                  D �cg c]=  }|j                  d
|j                   j"                  |j                   j$                  dœdœ‘Œ? c}|d<   |	j'                  |«       |dk7  s|j                  s"t        j                  d|dz   «       ||
||	dœc S |j                  D �]Û  }|j                   j"                  }|t(        j*                  j,                  k(  �r�	 t/        j0                  |j                   j$                  «      }|j3                  dd«      }t        j                  dt5        |«      «       |j7                  ||¬«      }t        j                  d|«       |j'                  ||d   |d   |d   |d   D �cg c]  }|d   ‘Œ	 c}dœ«       |d   xs d}|d   rŠ|dz  }|d   D ]}  }t9        j:                  |d   «      }|
j'                  |d   |d   |d   t5        |«      dœ«       |d|d   › d t5        |«      › d!�z  }t        j                  d"|d   t5        |«      «       Œ |d   r|d#|d   › �z  }|	j'                  d'|j                  |d(œ«       �Œ¹|	j'                  d'|j                  d)|› d*�d(œ«       �ŒÞ �Œ t        j@                  d+| j                  «       ||
||	d,d-œS 7 �Œc c}w c c}w # t<        $ r-}d$|› �}|j'                  |d%t?        |«      d&œ«       Y d}~Œ°d}~ww xY w­w)/a‚  
        Execute an LLM call with automatic code execution handling.

        This method:
        1. Makes the initial LLM call
        2. If model calls litellm_code_execution, executes the code
        3. Continues conversation with results
        4. Repeats until model stops calling tools
        5. Returns final response with generated files inline

        Args:
            model: Model to use
            messages: Initial messages
            tools: Tools including litellm_code_execution
            skill_files: Dict of skill files for execution
            skill_id: Optional skill ID for tracking
            **kwargs: Additional args for litellm.acompletion

        Returns:
            Dict with:
            - response: Final LLM response
            - files: List of generated files with content (base64)
            - execution_results: List of code execution results
        r   N)ÚSkillsSandboxExecutor)Útimeoutz%CodeExecutionHandler: Iteration %s/%sé   )r3   r4   r5   Ú	assistant)ÚroleÚcontentr   )r    Ú	arguments)Úidr   r   Ú
tool_callsz3CodeExecutionHandler: Completed after %s iterations)ÚresponseÚfilesÚexecution_resultsr4   r   Ú z/CodeExecutionHandler: Executing code (%s chars))r   r6   z*CodeExecutionHandler: Execution result: %sÚsuccessÚoutputÚerrorrC   r    )Ú	iterationrF   rG   rH   rC   z

Generated files:Úcontent_base64Ú	mime_type)r    rK   rJ   Úsizez
- z (z bytes)z2CodeExecutionHandler: Generated file %s (%s bytes)z	

Error:
zCode execution failed: F)rI   rF   rH   Útool)r=   Útool_call_idr>   zTool 'z'' not handled by code execution handlerz1CodeExecutionHandler: Max iterations (%s) reachedT)rB   rC   rD   r4   Úmax_iterations_reachedr   )!ÚlitellmÚ2litellm.llms.litellm_proxy.skills.sandbox_executorr9   Úlistr,   Úranger+   r   ÚdebugÚacompletionÚchoicesÚmessageÚfinish_reasonr>   rA   r@   r   r    r?   Úappendr   r   r#   ÚjsonÚloadsÚgetÚlenÚexecuteÚbase64Ú	b64decodeÚ	ExceptionÚstrÚwarning)r1   r3   r4   r5   r6   r7   ÚkwargsrP   r9   Úcurrent_messagesÚgenerated_filesrD   ÚexecutorrB   rI   Úassistant_messageÚstop_reasonÚassistant_msg_dictÚtcÚ	tool_callÚ	tool_nameÚargsr   Úexec_resultÚfÚtool_resultÚfile_contentÚes                               r   Úexecute_with_code_executionz0CodeExecutionHandler.execute_with_code_executionb   s\  è ø€ óB 	õ	
ô #' x£.ÐØ79ˆØ/1Ðá/¸×8LÑ8LÔMˆØˆä˜t×2Ñ2Ó3ó }	ˆIÜ× Ñ Ð!HÈ)ÐVWÉ-ÐY]×YlÑYlÔmð 1˜W×0Ñ0ð ØØ)Øñð ñ	÷ ˆHð !)× 0Ñ 0°Ñ 3× ;Ñ ;ÐØ"×*Ñ*¨1Ñ-×;Ñ;ˆKð $Ø,×4Ñ4ñ2Ðð !×+Ò+ð 0×:Ñ:ö
4ð ð !Ÿe™eØ *à$&§K¡K×$4Ñ$4Ø)+¯©×)>Ñ)>ñ%óò
4Ð" <Ñ0ð ×#Ñ#Ð$6Ô7ð ˜lÒ*Ð2C×2NÒ2NÜ×$Ñ$Ð%ZÐ\eÐhiÑ\iÔjà (Ø,Ø):Ø 0ñ	ò ð /×9Ñ9ó Q�	Ø%×.Ñ.×3Ñ3�	àÔ 4× CÑ C× IÑ IÓIð9Ü#Ÿz™z¨)×*<Ñ*<×*FÑ*FÓG˜Ø#Ÿx™x¨°Ó3˜ä&×,Ñ,Ð-^Ô`cÐdhÓ`iÔjà&.×&6Ñ&6Ø!%Ø(3ð '7ó '˜ô
 '×,Ñ,Ð-YÐ[fÔgà)×0Ñ0à-6Ø+6°yÑ+AØ*5°hÑ*?Ø)4°WÑ)=Ø=HÈÑ=QÖ)R¸¨!¨F«)Ò)Rñôð '2°(Ñ&;Ò&A¸r˜ð ' wÒ/Ø'Ð+AÑA˜KØ%0°Ñ%9ò " Ü/5×/?Ñ/?ÀÐBRÑ@SÓ/T à /× 6Ñ 6à01°&±	Ø56°{±^Ø:;Ð<LÑ:MÜ03°LÓ0Añ	%&ô!"ð !,°°a¸±i°[ÀÄ3À|ÓCTÐBUÐU\Ð/]Ñ ] ä .× 4Ñ 4Ø$XÐZ[Ð\bÑZcÔehÐiuÓevõ!"ð"ð" ' wÒ/Ø'¨\¸+ÀgÑ:NÐ9OÐ+PÑP˜Kð %×+Ñ+à$*Ø,5¯L©LØ'2ñöð %×+Ñ+à$*Ø,5¯L©LØ)/°	¨{Ð:aÐ'bñöòWQðY}	ô@ 	×ÑÐRÐTX×TgÑTgÔhà Ø$Ø!2Ø(Ø&*ñ
ð 	
ð{ûò 
4ùò` *Søô< %ò Ø(?À¸sÐ&C˜Ø)×0Ñ0à-6Ø+0Ü),¨Q«ñ÷ñ ûðüsf   ‚BOÂN	ÂAOÃ'ANÄ)BOÆ8B"NÉNÉ&B1NÌA3OÎOÎNÎ	OÎ#OÏOÏOÏO)NN)N)r
   r   r   r   Úintr2   rb   rR   ÚdictÚbytesr   rt   r   r   r   r*   r*   L   s™   „ ñð &*Ø&*ñJà˜d™
ðJð ˜t™óJð&  $ñt
àðt
ð �t‘*ðt
ð �D‰zð	t
ð
 ˜#˜u˜*Ñ%ðt
ð ˜‘*ðt
ð 
ˆc�3ˆh‰ôt
r   r*   r5   c                 ó˜   — | sy| D ]B  }|j                  di «      }|j                  d«      t        j                  j                  k(  sŒB y y)z:Check if litellm_code_execution tool is in the tools list.Fr   r    T)r\   r   r   r#   )r5   rM   Úfuncs      r   Úhas_code_execution_toolrz     sM   € áØØò ˆØ�x‰x˜
 BÓ'ˆØ�8‰8�FÓÔ3×BÑB×HÑHÓHÙðð r   c                 óR   — | xs g } t        | «      s| j                  t        «       | S )z7Add litellm_code_execution tool if not already present.)rz   rY   r(   )r5   s    r   Úadd_code_execution_toolr|   $  s%   € àŠK�R€EÜ" 5Ô)Ø�‰Ô0Ô1Ø€Lr   Úcode_execution_handler)r   r_   rZ   Úenumr   Útypingr   r   Úlitellm._loggingr   rb   r   rv   r$   r'   r(   Ú__annotations__r*   rR   Úboolrz   r|   r}   r   r   r   ú<module>rƒ      s»   ðòó Û Ý ß å +ô.˜3 ô .ð¨¨c°3¨h©ó ð*°4¸¸S¸±>ó ñ& &EÓ%FÐ ˜UÓ F÷J
ñ J
ðZ 4¨¡:°Ñ#4ð ¸ó ð 4¨¡:°Ñ#4ð ¸¸d¹ó ñ !5Ó 6Ð ˜Ô 6r   