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" | |