Tools / Modules /Code_Interpreter.py
Nymbo's picture
Update Modules/Code_Interpreter.py
9f1e882 verified
raw
history blame
1.6 kB
from __future__ import annotations
import sys
from io import StringIO
from typing import Annotated
import gradio as gr
from ._docstrings import autodoc
from app import _log_call_end, _log_call_start, _truncate_for_log
# Single source of truth for the LLM-facing tool description
TOOL_SUMMARY = (
"Execute Python code; returns captured stdout or the exception text."
)
@autodoc(
summary=TOOL_SUMMARY,
)
def Code_Interpreter(code: Annotated[str, "Python source code to run; stdout is captured and returned."]) -> str:
_log_call_start("Code_Interpreter", code=_truncate_for_log(code or "", 300))
if code is None:
result = "No code provided."
_log_call_end("Code_Interpreter", result)
return result
old_stdout = sys.stdout
redirected_output = sys.stdout = StringIO()
try:
exec(code)
result = redirected_output.getvalue()
except Exception as exc: # pylint: disable=broad-except
result = str(exc)
finally:
sys.stdout = old_stdout
_log_call_end("Code_Interpreter", _truncate_for_log(result))
return result
def build_interface() -> gr.Interface:
return gr.Interface(
fn=Code_Interpreter,
inputs=gr.Code(label="Python Code", language="python"),
outputs=gr.Textbox(label="Output", lines=5, max_lines=20),
title="Code Interpreter",
description="<div style=\"text-align:center\">Execute Python code and see the output.</div>",
api_description=TOOL_SUMMARY,
flagging_mode="never",
)
__all__ = ["Code_Interpreter", "build_interface"]