Spaces:
Runtime error
Runtime error
| import abc | |
| import pydantic | |
| from typing import Literal | |
| class EnvState(pydantic.BaseModel): | |
| # The screenshot in PNG format. | |
| screenshot: bytes | |
| url: str | |
| class Computer(abc.ABC): | |
| """Defines an interface for environments.""" | |
| def screen_size(self) -> tuple[int, int]: | |
| """Returns the screen size of the environment.""" | |
| def open_web_browser(self) -> EnvState: | |
| """Opens the web browser.""" | |
| def click_at(self, x: int, y: int) -> EnvState: | |
| """Clicks at a specific x, y coordinate on the screen. | |
| The 'x' and 'y' values are absolute values, scaled to the height and width of the screen. | |
| """ | |
| def hover_at(self, x: int, y: int) -> EnvState: | |
| """Hovers at a specific x, y coordinate on the screen. | |
| May be used to explore UI elements such as tooltips or sub-menus that appear on hover. | |
| The 'x' and 'y' values are absolute values, scaled to the height and width of the screen. | |
| """ | |
| def type_text_at( | |
| self, | |
| x: int, | |
| y: int, | |
| text: str, | |
| press_enter: bool, | |
| clear_before_typing: bool, | |
| ) -> EnvState: | |
| """Types text at a specific x, y coordinate on the screen. | |
| The system automatically presses ENTER after typing. To disable this, set `press_enter` to False. | |
| The system automatically clears any existing content before typing the specified `text`. To disable this, set `clear_before_typing` to False. | |
| The 'x' and 'y' values are absolute values, scaled to the height and width of the screen. | |
| """ | |
| def scroll_document( | |
| self, direction: Literal["up", "down", "left", "right"] | |
| ) -> EnvState: | |
| """Scrolls the active window or document in the specified direction. | |
| Direction can be "up", "down", "left", or "right". | |
| """ | |
| def scroll_at( | |
| self, | |
| x: int, | |
| y: int, | |
| direction: Literal["up", "down", "left", "right"], | |
| magnitude: int = 5, | |
| ) -> EnvState: | |
| """Scrolls at a specific x, y coordinate in the specified direction by magnitude. | |
| The 'x' and 'y' values are absolute values, scaled to the height and width of the screen. | |
| The magnitude parameter controls the scroll amount (default: 5). | |
| """ | |
| def wait(self, seconds: int = 5) -> EnvState: | |
| """Waits for a specified number of seconds. | |
| Args: | |
| seconds: Number of seconds to wait (default: 5) | |
| """ | |
| def go_back(self) -> EnvState: | |
| """Navigates back to the previous page in the browser history.""" | |
| def go_forward(self) -> EnvState: | |
| """Navigates forward to the next page in the browser history.""" | |
| def search(self) -> EnvState: | |
| """Directly jumps to a search engine home page. | |
| Used when you need to start with a search. For example, this is used when | |
| the current page doesn't have the information needed or because a new | |
| task is being started. | |
| """ | |
| def navigate(self, url: str) -> EnvState: | |
| """Navigates directly to a specified URL.""" | |
| def key_combination(self, keys: list[str]) -> EnvState: | |
| """Executes keyboard key combinations. | |
| Examples: ["control", "c"], ["alt", "tab"], ["enter"] | |
| """ | |
| def drag_and_drop( | |
| self, x: int, y: int, destination_x: int, destination_y: int | |
| ) -> EnvState: | |
| """Drag and drop an element from a x, y coordinate to a destination destination_y, destination_x coordinate. | |
| The 'x', 'y', 'destination_y' and 'destination_x' values are absolute values, scaled to the height and width of the screen. | |
| """ | |
| def current_state(self) -> EnvState: | |
| """Returns the current state of the environment including screenshot and URL.""" | |
| # ========== Shell Operations ========== | |
| def exec_command(self, command: str, timeout: int = 30): | |
| """Execute a shell command in the environment. | |
| Args: | |
| command: Shell command to execute | |
| timeout: Command timeout in seconds (default: 30) | |
| Returns: | |
| Command result with stdout, stderr, and exit code | |
| """ | |
| def exec_script(self, script: str, timeout: int = 60): | |
| """Execute a multi-line bash script. | |
| Args: | |
| script: Multi-line bash script to execute | |
| timeout: Script timeout in seconds (default: 60) | |
| Returns: | |
| Command result with stdout, stderr, and exit code | |
| """ | |
| # ========== File Operations ========== | |
| def read_file(self, path: str) -> str: | |
| """Read file contents from the environment. | |
| Args: | |
| path: File path to read | |
| Returns: | |
| File contents as string | |
| """ | |
| def write_file(self, path: str, content: str) -> None: | |
| """Write content to a file in the environment. | |
| Args: | |
| path: File path to write | |
| content: Content to write to the file | |
| """ | |
| def list_directory(self, path: str = ".") -> list[str]: | |
| """List contents of a directory. | |
| Args: | |
| path: Directory path to list (default: current directory) | |
| Returns: | |
| List of file and directory names | |
| """ | |
| # ========== Code Execution Operations ========== | |
| def run_python(self, code: str, timeout: int = 60): | |
| """Execute Python code in the environment. | |
| Args: | |
| code: Python code to execute | |
| timeout: Execution timeout in seconds (default: 60) | |
| Returns: | |
| Code execution result with stdout, stderr, and exit code | |
| """ | |
| def run_javascript(self, code: str, timeout: int = 60): | |
| """Execute JavaScript code in the environment. | |
| Args: | |
| code: JavaScript code to execute | |
| timeout: Execution timeout in seconds (default: 60) | |
| Returns: | |
| Code execution result with stdout, stderr, and exit code | |
| """ | |
| def run_bash(self, code: str, timeout: int = 60): | |
| """Execute Bash code in the environment. | |
| Args: | |
| code: Bash code to execute | |
| timeout: Execution timeout in seconds (default: 60) | |
| Returns: | |
| Code execution result with stdout, stderr, and exit code | |
| """ | |