From 59fdd9f1a2d9333c30ca7630c7fbe06d71cf3005 Mon Sep 17 00:00:00 2001 From: David Chang Date: Sun, 14 Jan 2024 23:13:56 +0800 Subject: [PATCH] ver Jan14th setup method for Thunderbird composing tasks --- desktop_env/controllers/setup.py | 8 +-- desktop_env/server/main.py | 7 ++- .../d088f539-cab4-4f9a-ac92-9999fc3a656e.json | 59 +++++++++++++++++++ main.py | 8 +-- 4 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 evaluation_examples/examples/thunderbird/d088f539-cab4-4f9a-ac92-9999fc3a656e.json diff --git a/desktop_env/controllers/setup.py b/desktop_env/controllers/setup.py index f62a303..cd42003 100644 --- a/desktop_env/controllers/setup.py +++ b/desktop_env/controllers/setup.py @@ -204,15 +204,15 @@ class SetupController: except requests.exceptions.RequestException as e: logger.error("An error occurred while trying to send the request: %s", e) - def _launch_setup(self, command: Union[str, List[str]]): + def _launch_setup(self, command: Union[str, List[str]], shell: bool = False): if not command: raise Exception("Empty command to launch.") - if isinstance(command, str) and len(command.split()) > 1: + if not shell and isinstance(command, str) and len(command.split()) > 1: logger.warning("Command should be a list of strings. Now it is a string. Will split it by space.") command = command.split() - payload = json.dumps({"command": command}) + payload = json.dumps({"command": command, "shell": shell}) headers = {"Content-Type": "application/json"} try: @@ -239,7 +239,7 @@ class SetupController: while not terminates: try: - response = requests.post(self.http_server_setup_root + "/execute", headers=headers, data=payload) + response = requests.post(self.http_server + "/setup" + "/execute", headers=headers, data=payload) if response.status_code == 200: results: Dict[str, str] = response.json() if stdout: diff --git a/desktop_env/server/main.py b/desktop_env/server/main.py index 06fc308..9a93e65 100644 --- a/desktop_env/server/main.py +++ b/desktop_env/server/main.py @@ -61,11 +61,12 @@ def execute_command(): @app.route('/setup/launch', methods=["POST"]) def launch_app(): data = request.json - command: List[str] = data.get("command", []) + shell = data.get("shell", False) + command: List[str] = data.get("command", "" if shell else []) try: - subprocess.Popen(command) - return "{:} launched successfully".format(" ".join(command)) + subprocess.Popen(command, shell=shell) + return "{:} launched successfully".format(command if shell else " ".join(command)) except Exception as e: return jsonify({"status": "error", "message": str(e)}), 500 diff --git a/evaluation_examples/examples/thunderbird/d088f539-cab4-4f9a-ac92-9999fc3a656e.json b/evaluation_examples/examples/thunderbird/d088f539-cab4-4f9a-ac92-9999fc3a656e.json new file mode 100644 index 0000000..c34764c --- /dev/null +++ b/evaluation_examples/examples/thunderbird/d088f539-cab4-4f9a-ac92-9999fc3a656e.json @@ -0,0 +1,59 @@ +{ + "id": "d088f539-cab4-4f9a-ac92-9999fc3a656e", + "snapshot": "thunderbird", + "instruction": "Attach the my AWS bill to the email. The bill is stored at ~/aws-bill.pdf. Don't close it or send it. I haven't finish all the contents.", + "source": "https://support.mozilla.org/en-US/kb/how-use-attachments", + "config": [ + { + "type": "download", + "parameters": { + "files": [ + { + "url": "https://drive.usercontent.google.com/download?id=1JDUxe8Cs0D9La9ECoYbHJAIQ95DZfkDT&export=download&authuser=0&confirm=t&uuid=1e0f94d8-4fb1-4f9b-878a-516cf4a7ebc4&at=APZUnTXHBZKTuW_vQUzi-1XKuAYg:1705242554801", + "path": "/home/user/aws-bill.pdf" + }, + { + "url": "https://drive.usercontent.google.com/download?id=1EHLRWzBCOsyERkSMUnTF2pnsR0n6ZvtR&export=download&authuser=0&confirm=t&uuid=de09bd5e-bef8-499a-b599-c642af190e10&at=APZUnTXqOsQkxl0zMSX6R1Sgp_v3:1704362491712", + "path": "/home/user/thunderbird-profile.tar.gz" + }, + { + "url": "https://drive.usercontent.google.com/download?id=17LutYTkEXhM__sxvrdldar7p-eQba4Pm&export=download&authuser=0&confirm=t&uuid=34730e1c-0fac-401a-ab91-102a47f02224&at=APZUnTX4eFTnG9vnYlQEJX6N0jqP:1705227498314", + "path": "/home/user/.aws-bill-mail-body.html" + } + ] + } + }, + { + "type": "execute", + "parameters": { + "command": [ + "tar", + "-xzv", + "--recursive-unlink", + "-f", + "/home/user/thunderbird-profile.tar.gz", + "-C", + "/home/user/" + ] + } + }, + { + "type": "launch", + "parameters": { + "command": "/usr/bin/thunderbird -compose \"from='Anonym Tester ',to=assistant@outlook.com,subject='New-month AWS Bill',body='$(cat /home/user/.aws-bill-mail-body.html)'\"", + "shell": true + } + } + ], + "trajectory": "trajectories/d088f539-cab4-4f9a-ac92-9999fc3a656e", + "related_apps": [ + "thunderbird" + ], + "evaluator": { + "func": "run_sqlite3", + "result": { + "type": "rule", + "rules": {} + } + } +} diff --git a/main.py b/main.py index 6f5650a..dd551f9 100644 --- a/main.py +++ b/main.py @@ -44,9 +44,9 @@ def human_agent(): Runs the Gym environment with human input. """ - with open("evaluation_examples/examples/thunderbird/3d1682a7-0fb0-49ae-a4dc-a73afd2d06d5.json.nosetup", "r") as f: + with open("evaluation_examples/examples/thunderbird/d088f539-cab4-4f9a-ac92-9999fc3a656e.json", "r") as f: example = json.load(f) - example["snapshot"] = "Snapshot 20" + example["snapshot"] = "Snapshot 21" env = DesktopEnv( path_to_vm="../../../../大文件/镜像/Ubuntu-1218/Ubuntu/Ubuntu.vmx" , action_space="computer_13" @@ -87,8 +87,8 @@ def human_agent(): logger.info("The episode is done.") break - result = env.evaluate() - logger.info("Result: %.2f", result) + #result = env.evaluate() + #logger.info("Result: %.2f", result) #input("PAUSING")