From c2d959c3628fd4ead424a6d3232e416b61570051 Mon Sep 17 00:00:00 2001 From: better629 Date: Mon, 29 Jan 2024 19:33:34 +0800 Subject: [PATCH] update task_dir/docs_dir --- .../roles/android_assistant.py | 22 ++++++++++++++++++- examples/andriod_assistant/run_assistant.py | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/examples/andriod_assistant/roles/android_assistant.py b/examples/andriod_assistant/roles/android_assistant.py index ee510f25c..05665b90b 100644 --- a/examples/andriod_assistant/roles/android_assistant.py +++ b/examples/andriod_assistant/roles/android_assistant.py @@ -1,10 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- # @Desc : android assistant to learn from app operations and operate apps - +import time from typing import Optional from pathlib import Path from pydantic import Field +from datetime import datetime from examples.andriod_assistant.actions.manual_record import ManualRecord from examples.andriod_assistant.actions.parse_record import ParseRecord @@ -35,6 +36,10 @@ class AndroidAssistant(Role): self._watch([UserRequirement]) + app_name = config.get_other("app_name", "demo") + data_dir = Path(__file__).parent.joinpath("..", "output") + cur_datetime = datetime.fromtimestamp(int(time.time())).strftime("%Y-%m-%d_%H-%M-%S") + """Firstly, we decide the state with user config, further, we can do it automatically, like if it's new app, run the learn first and then do the act stage or learn it during the action. """ @@ -42,14 +47,29 @@ class AndroidAssistant(Role): # choose ManualRecord and then run ParseRecord # Remember, only run each action only one time, no need to run n_round. self.set_actions([ManualRecord, ParseRecord]) + self.task_dir = data_dir.joinpath(app_name, f"manual_learn_{cur_datetime}") + self.docs_dir = data_dir.joinpath(f"manual_docs") elif config.get_other("stage") == "learn" and config.get_other("mode") == "auto": # choose SelfLearnAndReflect to run self.set_actions([SelfLearnAndReflect]) + self.task_dir = data_dir.joinpath(app_name, f"auto_learn_{cur_datetime}") + self.docs_dir = data_dir.joinpath(f"auto_docs") elif config.get_other("stage") == "act": # choose ScreenshotParse to run self.set_actions([ScreenshotParse]) + self.task_dir = data_dir.joinpath(app_name, f"act_{cur_datetime}") + if config.get_other("mode") == "manual": + self.docs_dir = data_dir.joinpath(f"manual_docs") + else: + self.docs_dir = data_dir.joinpath(f"auto_docs") + self._check_dir() + self._set_react_mode(RoleReactMode.BY_ORDER) + def _check_dir(self): + self.task_dir.mkdir(exist_ok=True) + self.docs_dir.mkdir(exist_ok=True) + async def react(self) -> Message: self.round_count += 1 super().react() diff --git a/examples/andriod_assistant/run_assistant.py b/examples/andriod_assistant/run_assistant.py index 4d599e80b..ce15d9511 100644 --- a/examples/andriod_assistant/run_assistant.py +++ b/examples/andriod_assistant/run_assistant.py @@ -20,6 +20,7 @@ def startup( n_round: int = typer.Option(default=20, help="The max round to do an app operation task."), stage: str = typer.Option(default="learn", help="stage: learn / act"), mode: str = typer.Option(default="auto", help="mode: auto / manual , when state=learn"), + app_name: str = typer.Option(default="demo", help="the name of app you want to run"), investment: float = typer.Option(default=5.0, help="Dollar amount to invest in the AI company."), refine_doc: bool = typer.Option( default=False, help="Refine existing operation docs based on the latest observation if True." @@ -40,6 +41,7 @@ def startup( { "stage": stage, "mode": mode, + "app_name": app_name, "refine_doc": refine_doc, "min_dist": min_dist, "android_screenshot_dir": android_screenshot_dir,