Agent_GAIA_Benchmark / agent_tools /CodeInterpreterTool.py
Daksh Chaudhary
Update agent_tools/CodeInterpreterTool.py
e433fba verified
import io
import contextlib
from llama_index.core.tools import FunctionTool
def execute_python_code(file_path: str) -> str:
"""
Executes Python code from a given file path and captures its output. It only works when provided the path to a .py script
Args:
file_path (str): The local path to the .py file to execute.
"""
print(f"Executing Python code from: {file_path}")
# Use io.StringIO to create an in-memory text buffer to capture output
string_io = io.StringIO()
try:
with open(file_path, 'r', encoding='utf-8') as f:
code = f.read()
# Use contextlib.redirect_stdout to temporarily redirect all print() output to our in-memory buffer.
with contextlib.redirect_stdout(string_io):
exec(code, {})
# Get the content that was "printed" from the buffer
output = string_io.getvalue()
if not output.strip():
# Fallback for scripts that don't print but end with an expression
try:
lines = code.strip().split('\n')
last_line = lines[-1]
# Safely evaluate the last line if it's a simple expression
output = str(eval(last_line, {"__builtins__": None}, {}))
except:
output = "Code executed successfully with no print output."
return f"Successfully executed. Output:\n---\n{output.strip()}\n---"
except Exception as e:
return f"Error executing Python code: {e}"
def get_code_interpreter_tool() -> FunctionTool:
"""Initializes and returns the Python Code Interpreter tool."""
return FunctionTool.from_defaults(
fn=execute_python_code,
name="python_code_interpreter",
description="A tool that can execute Python code from a local file and return its output. It takes a 'file_path' to the Python file as input. Use this to find the output of a provided .py script."
)