import argparse # locally defined agent from agent import DemoAgentArgs # browsergym experiments utils from browsergym.experiments import EnvArgs, ExpArgs, get_exp_result def str2bool(v): if isinstance(v, bool): return v if v.lower() in ("yes", "true", "t", "y", "1"): return True elif v.lower() in ("no", "false", "f", "n", "0"): return False else: raise argparse.ArgumentTypeError("Boolean value expected.") def parse_args(): parser = argparse.ArgumentParser(description="Run experiment with hyperparameters.") parser.add_argument( "--model_name", type=str, default="gpt-4o-mini", help="OpenAI model name.", ) parser.add_argument( "--task_name", type=str, default="openended", help="Name of the Browsergym task to run. If 'openended', you need to specify a 'start_url'", ) parser.add_argument( "--start_url", type=str, default="https://www.google.com", help="Starting URL (only for the openended task).", ) parser.add_argument( "--visual_effects", type=str2bool, default=True, help="Add visual effects when the agents performs actions.", ) parser.add_argument( "--use_html", type=str2bool, default=False, help="Use HTML in the agent's observation space.", ) parser.add_argument( "--use_axtree", type=str2bool, default=True, help="Use AXTree in the agent's observation space.", ) parser.add_argument( "--use_screenshot", type=str2bool, default=False, help="Use screenshot in the agent's observation space.", ) return parser.parse_args() def main(): print( """\ --- WARNING --- This is a basic agent for demo purposes. Visit AgentLab for more capable agents with advanced features. https://github.com/ServiceNow/AgentLab""" ) args = parse_args() # setting up agent config agent_args = DemoAgentArgs( model_name=args.model_name, chat_mode=False, demo_mode="default" if args.visual_effects else "off", use_html=args.use_html, use_axtree=args.use_axtree, use_screenshot=args.use_screenshot, ) # setting up environment config env_args = EnvArgs( task_name=args.task_name, task_seed=None, max_steps=100, headless=False, # keep the browser open # viewport={"width": 1500, "height": 1280}, # can be played with if needed ) # for openended task, set environment and agent to interactive chat mode on a start url if args.task_name == "openended": agent_args.chat_mode = True env_args.wait_for_user_message = True env_args.task_kwargs = {"start_url": args.start_url} # setting up the experiment exp_args = ExpArgs( env_args=env_args, agent_args=agent_args, ) # running and logging results exp_args.prepare("./results") exp_args.run() # loading and printing results exp_result = get_exp_result(exp_args.exp_dir) exp_record = exp_result.get_exp_record() for key, val in exp_record.items(): print(f"{key}: {val}") if __name__ == "__main__": main()