Spaces:
Running
Running
import os | |
from typing_extensions import Annotated | |
from IPython import get_ipython | |
default_path = "coding/" | |
class IPythonUtils: | |
def exec_python(cell: Annotated[str, "Valid Python cell to execute."]) -> str: | |
""" | |
run cell in ipython and return the execution result. | |
""" | |
ipython = get_ipython() | |
result = ipython.run_cell(cell) | |
log = str(result.result) | |
if result.error_before_exec is not None: | |
log += f"\n{result.error_before_exec}" | |
if result.error_in_exec is not None: | |
log += f"\n{result.error_in_exec}" | |
return log | |
def display_image( | |
image_path: Annotated[str, "Path to image file to display."] | |
) -> str: | |
""" | |
Display image in Jupyter Notebook. | |
""" | |
log = __class__.exec_python( | |
f"from IPython.display import Image, display\n\ndisplay(Image(filename='{image_path}'))" | |
) | |
if not log: | |
return "Image displayed successfully" | |
else: | |
return log | |
class CodingUtils: # Borrowed from https://microsoft.github.io/autogen/docs/notebooks/agentchat_function_call_code_writing | |
def list_dir(directory: Annotated[str, "Directory to check."]) -> str: | |
""" | |
List files in choosen directory. | |
""" | |
files = os.listdir(default_path + directory) | |
return str(files) | |
def see_file(filename: Annotated[str, "Name and path of file to check."]) -> str: | |
""" | |
Check the contents of a chosen file. | |
""" | |
with open(default_path + filename, "r") as file: | |
lines = file.readlines() | |
formatted_lines = [f"{i+1}:{line}" for i, line in enumerate(lines)] | |
file_contents = "".join(formatted_lines) | |
return file_contents | |
def modify_code( | |
filename: Annotated[str, "Name and path of file to change."], | |
start_line: Annotated[int, "Start line number to replace with new code."], | |
end_line: Annotated[int, "End line number to replace with new code."], | |
new_code: Annotated[ | |
str, | |
"New piece of code to replace old code with. Remember about providing indents.", | |
], | |
) -> str: | |
""" | |
Replace old piece of code with new one. Proper indentation is important. | |
""" | |
with open(default_path + filename, "r+") as file: | |
file_contents = file.readlines() | |
file_contents[start_line - 1 : end_line] = [new_code + "\n"] | |
file.seek(0) | |
file.truncate() | |
file.write("".join(file_contents)) | |
return "Code modified" | |
def create_file_with_code( | |
filename: Annotated[str, "Name and path of file to create."], | |
code: Annotated[str, "Code to write in the file."], | |
) -> str: | |
""" | |
Create a new file with provided code. | |
""" | |
directory = os.path.dirname(default_path + filename) | |
os.makedirs(directory, exist_ok=True) | |
with open(default_path + filename, "w") as file: | |
file.write(code) | |
return "File created successfully" | |