| |
|
|
| """ |
| Code Interpreter Examples for EvoAgentX |
| |
| This module provides comprehensive examples for: |
| - PythonInterpreterToolkit: Execute Python code in a secure environment |
| - DockerInterpreterToolkit: Execute code within isolated Docker containers |
| |
| The examples demonstrate various use cases including: |
| - Basic code execution (Hello World, Math operations) |
| - Platform information and system details |
| - Script file execution |
| - Dynamic code generation |
| - Visualization attempts (with import handling) |
| """ |
|
|
| import os |
| import sys |
| from pathlib import Path |
|
|
| |
| sys.path.append(str(Path(__file__).parent.parent)) |
|
|
| from evoagentx.tools import ( |
| PythonInterpreterToolkit, |
| DockerInterpreterToolkit |
| ) |
|
|
|
|
| def run_simple_hello_world(interpreter): |
| """ |
| Run a simple Hello World example using the provided interpreter. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| code = """ |
| print("Hello, World!") |
| print("This code is running inside a secure Python interpreter.") |
| """ |
| |
| |
| result = interpreter.execute(code, "python") |
| print("\nSimple Hello World Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_math_example(interpreter): |
| """ |
| Run a math example using the provided interpreter. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| code = """ |
| print("Running math operations...") |
| |
| # Using math library |
| import math |
| print(f"The value of pi is: {math.pi:.4f}") |
| print(f"The square root of 16 is: {math.sqrt(16)}") |
| print(f"The value of e is: {math.e:.4f}") |
| """ |
|
|
| |
| result = interpreter.execute(code, "python") |
| print("\nMath Example Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_platform_info(interpreter): |
| """ |
| Run a platform info example using the provided interpreter. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| code = """ |
| print("Getting platform information...") |
| |
| # System information |
| import platform |
| import sys |
| |
| print(f"Python version: {platform.python_version()}") |
| print(f"Platform: {platform.system()} {platform.release()}") |
| print(f"Processor: {platform.processor()}") |
| print(f"Implementation: {platform.python_implementation()}") |
| """ |
|
|
| |
| result = interpreter.execute(code, "python") |
| print("\nPlatform Info Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_script_execution(interpreter): |
| """ |
| Run a script file using the execute_script method of the interpreter. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| script_path = os.path.join(os.getcwd(), "examples", "tools", "hello_world.py") |
| |
| |
| if not os.path.exists(script_path): |
| print(f"Error: Script file not found at {script_path}") |
| return |
| |
| print(f"Executing script file: {script_path}") |
| |
| |
| result = interpreter.execute_script(script_path, "python") |
| |
| print("\nScript Execution Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_dynamic_code_generation(interpreter): |
| """ |
| Run an example that demonstrates dynamic code generation and execution. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| code = """ |
| print("Generating and executing code dynamically...") |
| |
| # Generate a function definition |
| function_code = ''' |
| def calculate_factorial(n): |
| if n == 0 or n == 1: |
| return 1 |
| else: |
| return n * calculate_factorial(n-1) |
| ''' |
| |
| # Execute the generated code to define the function |
| exec(function_code) |
| |
| # Now use the dynamically defined function |
| for i in range(1, 6): |
| print(f"Factorial of {i} is {calculate_factorial(i)}") |
| """ |
|
|
| |
| result = interpreter.execute(code, "python") |
| print("\nDynamic Code Generation Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_visualization_example(interpreter): |
| """ |
| Run an example that would generate a visualization if matplotlib was allowed. |
| This demonstrates handling imports that might not be allowed. |
| |
| Args: |
| interpreter: An instance of a code interpreter |
| """ |
| |
| code = """ |
| print("Attempting to create a simple visualization...") |
| |
| try: |
| import matplotlib.pyplot as plt |
| import numpy as np |
| |
| # Generate some data |
| x = np.linspace(0, 10, 100) |
| y = np.sin(x) |
| |
| # Create a plot |
| plt.figure(figsize=(8, 4)) |
| plt.plot(x, y) |
| plt.title("Sine Wave") |
| plt.xlabel("x") |
| plt.ylabel("sin(x)") |
| plt.grid(True) |
| |
| # Save the plot (would work if matplotlib was available) |
| plt.savefig("examples/output/sine_wave.png") |
| plt.close() |
| |
| print("Visualization created and saved as 'examples/output/sine_wave.png'") |
| except ImportError as e: |
| print(f"Import error: {e}") |
| print("Note: This example requires matplotlib to be in the allowed_imports.") |
| """ |
|
|
| |
| result = interpreter.execute(code, "python") |
| print("\nVisualization Example Result:") |
| print("-" * 50) |
| print(result) |
| print("-" * 50) |
|
|
|
|
| def run_python_interpreter_examples(): |
| """Run all examples using the Python InterpreterToolkit""" |
| print("\n===== PYTHON INTERPRETER EXAMPLES =====\n") |
| |
| |
| |
| interpreter_toolkit = PythonInterpreterToolkit( |
| project_path=os.getcwd(), |
| directory_names=["examples", "evoagentx"], |
| allowed_imports={"os", "sys", "time", "datetime", "math", "random", "platform", "matplotlib.pyplot", "numpy"} |
| ) |
| |
| |
| interpreter = interpreter_toolkit.python_interpreter |
| |
| |
| run_simple_hello_world(interpreter) |
| run_math_example(interpreter) |
| run_platform_info(interpreter) |
| run_script_execution(interpreter) |
| run_dynamic_code_generation(interpreter) |
| run_visualization_example(interpreter) |
|
|
|
|
| def run_docker_interpreter_examples(): |
| """Run all examples using the Docker InterpreterToolkit""" |
| print("\n===== DOCKER INTERPRETER EXAMPLES =====\n") |
| print("Running Docker interpreter examples...") |
| |
| try: |
| |
| interpreter_toolkit = DockerInterpreterToolkit( |
| image_tag="python:3.9-slim", |
| print_stdout=True, |
| print_stderr=True, |
| container_directory="/app" |
| ) |
| |
| |
| interpreter = interpreter_toolkit.docker_interpreter |
| |
| |
| run_simple_hello_world(interpreter) |
| run_math_example(interpreter) |
| run_platform_info(interpreter) |
| run_script_execution(interpreter) |
| run_dynamic_code_generation(interpreter) |
| |
| except Exception as e: |
| print(f"Error running Docker interpreter examples: {str(e)}") |
| print("Make sure Docker is installed and running on your system.") |
| print("You may need to pull the python:3.9-slim image first using: docker pull python:3.9-slim") |
|
|
|
|
| def main(): |
| """Main function to run interpreter examples""" |
| print("===== CODE INTERPRETER EXAMPLES =====") |
| |
| |
| run_python_interpreter_examples() |
| |
| |
| run_docker_interpreter_examples() |
| |
| print("\n===== ALL INTERPRETER EXAMPLES COMPLETED =====") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|