From 0c6f5492147877ab709c0567466aaa4daab2de32 Mon Sep 17 00:00:00 2001 From: xiao9905 Date: Sun, 20 Oct 2024 00:10:34 +0800 Subject: [PATCH] Add documentation for VAB-WebArena-Lite --- README.md | 48 +- VAB-WebArena-Lite/README.md | 218 + VAB-WebArena-Lite/new/agent.py | 227 + VAB-WebArena-Lite/new/api_utils.py | 682 ++ VAB-WebArena-Lite/new/evaluators.py | 649 ++ VAB-WebArena-Lite/new/generate_test_data.py | 63 + VAB-WebArena-Lite/new/helper_functions.py | 647 ++ VAB-WebArena-Lite/new/llms_init.py | 23 + VAB-WebArena-Lite/new/lm_config.py | 57 + VAB-WebArena-Lite/new/openai_utils.py | 286 + VAB-WebArena-Lite/new/prompt_constructor.py | 501 ++ VAB-WebArena-Lite/new/run.py | 562 ++ .../new/test_webarena_lite.raw.json | 5838 +++++++++++++++++ VAB-WebArena-Lite/new/tokenizers.py | 29 + VAB-WebArena-Lite/new/utils.py | 87 + VAB-WebArena-Lite/new/wa_parallel_run.sh | 78 + VAB-WebArena-Lite/refresh_website_dockers.sh | 71 + VAB-WebArena-Lite/replace.sh | 37 + assets/framework.png | Bin 0 -> 417134 bytes docs/detailed_setups/VAB-Minecraft.md | 49 + .../VAB-OmniGibson.md} | 54 - 21 files changed, 10137 insertions(+), 69 deletions(-) create mode 100644 VAB-WebArena-Lite/README.md create mode 100644 VAB-WebArena-Lite/new/agent.py create mode 100644 VAB-WebArena-Lite/new/api_utils.py create mode 100644 VAB-WebArena-Lite/new/evaluators.py create mode 100644 VAB-WebArena-Lite/new/generate_test_data.py create mode 100644 VAB-WebArena-Lite/new/helper_functions.py create mode 100644 VAB-WebArena-Lite/new/llms_init.py create mode 100644 VAB-WebArena-Lite/new/lm_config.py create mode 100644 VAB-WebArena-Lite/new/openai_utils.py create mode 100644 VAB-WebArena-Lite/new/prompt_constructor.py create mode 100644 VAB-WebArena-Lite/new/run.py create mode 100644 VAB-WebArena-Lite/new/test_webarena_lite.raw.json create mode 100644 VAB-WebArena-Lite/new/tokenizers.py create mode 100644 VAB-WebArena-Lite/new/utils.py create mode 100644 VAB-WebArena-Lite/new/wa_parallel_run.sh create mode 100644 VAB-WebArena-Lite/refresh_website_dockers.sh create mode 100644 VAB-WebArena-Lite/replace.sh create mode 100644 assets/framework.png create mode 100644 docs/detailed_setups/VAB-Minecraft.md rename docs/{README_setup.md => detailed_setups/VAB-OmniGibson.md} (57%) diff --git a/README.md b/README.md index cf75e79..1d0782c 100644 --- a/README.md +++ b/README.md @@ -26,32 +26,30 @@ Compared to its predecessor [AgentBench](https://github.com/THUDM/AgentBench), V ## Table of Contents +- [Quick Start](#quick-start) - [Dataset Summary](#dataset-summary) - [Leaderboard](#leaderboard) - [Quick Start](#quick-start) - [Acknowledgement](#acknowledgement) - [Citation](#citation) -## Dataset Summary - -We offer two splits for each dataset: Testing and Training. Different from its predecessor [AgentBench](https://github.com/THUDM/AgentBench), VAB is accompanied with a trajectory training set for behavior cloning (BC) training, which allows development of more potent visual foundation agents with emerging open LMMs. - -![](./assets/statistics.png) - -## Leaderboard +## Quick Start -Here is the scores on test set results of VAB. All metrics are task Success Rate (SR). Noted that proprietary LMMs are tested with mere **Prompting**, and open LMMs are tested after **Multitask Finetuning** on VAB training set, as they usually fail to follow complicated agent task instructions. +This section will first give you an overview to the use and architecture of VAB. +Next, it will guide you on how to use `gpt-4o-2024-05-13` as an exemplar agent to launch 4 concurrent `VAB-Minecraft` tasks. -![](./assets/leaderboard.png) +### Overview on VAB Framework -## Quick Start - -This section will guide you on how to use `gpt-4o-2024-05-13` as an agent to launch 4 concurrent `VAB-Minecraft` tasks. -For the specific framework structure, please refer to AgentBench's [Framework Introduction](https://github.com/THUDM/AgentBench/blob/main/docs/Introduction_en.md). +To allow fast evaluation over agent tasks, we leverage AgentBench's framework as the backbone (currently for VAB-OmniGibson, VAB-Minecraft, and VAB-CSS). +If you are interested in its detailed implementation, please refer to AgentBench's [Framework Introduction](https://github.com/THUDM/AgentBench/blob/main/docs/Introduction_en.md) (which may not be necessary). +Basically, the framework calls all LLM/LMM in API formats via `Agent-Controller`, and accesses to environments via `Task-Controller`. +The `Assigner` will automatically assign evaluation tasks by pairing `Agent-Controller` and `Task-Controller` to optimize the overall evaluation speed. For more detailed configuration and launch methods, please check [Configuration Guide](docs/Config_en.md) and [Program Entrance Guide](docs/Entrance_en.md). -### Step 1. Prerequisites +![](./assets/framework.png) + +### Step 1. Prerequisites for All Environments Clone this repo and install the dependencies. @@ -68,7 +66,14 @@ Ensure that [Docker](https://www.docker.com/) is properly installed. docker ps ``` -For specific environments, please refer to their respective prerequisites: [VAB-OmniGibson](docs/README_setup.md#Setup-for-VAB-OmniGibson), [VAB-Minecraft](docs/README_setup.md#Setup-for-VAB-Minecraft), [VAB-CSS](docs/README_setup.md#Setup-for-VAB-CSS). +For specific environments, please refer to their additional prerequisites respectively. +For VAB-WebArena-Lite, it is based on [WebArena](https://github.com/webarena-x/webarena) with some modifications, so please read its individual setup carefully. + +* [VAB-OmniGibson Setup](docs/detailed_setups/VAB-OmniGibson.md) +* [VAB-Minecraft Setup](docs/detailed_setups/VAB-Minecraft.md) +* VAB-Mobile: Ongoing +* [VAB-WebArena-Lite Setup](VAB-WebArena-Lite/README.md) (Separate installation and evaluation method) +* VAB-CSS: Ongoing ### Step 2. Configure the Agent @@ -117,6 +122,19 @@ python -m src.assigner --auto-retry --config configs/assignments/omnigibson.yaml You can modify the config files to launch other tasks or change task concurrency. +## Dataset Summary + +We offer two splits for each dataset: Testing and Training. Different from its predecessor [AgentBench](https://github.com/THUDM/AgentBench), VAB is accompanied with a trajectory training set for behavior cloning (BC) training, which allows development of more potent visual foundation agents with emerging open LMMs. + +![](./assets/statistics.png) + +## Leaderboard + +Here is the scores on test set results of VAB. All metrics are task Success Rate (SR). Noted that proprietary LMMs are tested with mere **Prompting**, and open LMMs are tested after **Multitask Finetuning** on VAB training set, as they usually fail to follow complicated agent task instructions. + +![](./assets/leaderboard.png) + + ## Acknowledgement This project is heavily built upon the following repositories (to be updated): diff --git a/VAB-WebArena-Lite/README.md b/VAB-WebArena-Lite/README.md new file mode 100644 index 0000000..15a2c34 --- /dev/null +++ b/VAB-WebArena-Lite/README.md @@ -0,0 +1,218 @@ +# Setup for VAB-WebArena-Lite + +## Brief Introduction + +VAB-WebArena-Lite is a 165-task refined subset from WebArena. +The purpose of building this subset is to manually ensure task correctness & feasibility, and speed up testing (original 812-task WebArena usually takes more than 6h to run through, while VAB-WebArena-Lite takes around 40m in practice). +The modified version of the test cases can be found in `config_files/wa/test_webarena_lite.raw.json`. + + +## Install + +First, you should clone the official repository of VisualWebArena to this directory + +```bash +# Assume you have cloned VAB and is now in the `VAB-WebArena-Lite` directory +git clone https://github.com/web-arena-x/visualwebarena.git visualwebarena +cd visualwebarena +git reset --hard ad57aae4dad71531504726900b80db02e0526158 +cd .. +``` + +Then, you should substitute the file with the commands below: + +```bash +bash replace.sh +``` + +After that, you should install the dependencies for VAB-WebArena-Lite (recommend using a independent conda environment to VAB): + +```bash +# Python 3.10 (or 3.11, but not 3.12 cause 3.12 deprecated distutils needed here) +python -m wal wal +source venv/bin/activate +pip install -r requirements.txt +playwright install +pip install -e . +``` + +You can also run the unit tests to ensure that WebArena-Lite is installed correctly: + +```bash +pytest -x +``` + +## Setup WebArena-Lite Environments + +1. Setup the standalone environments. +Please check out [this page](https://github.com/web-arena-x/webarena/tree/main/environment_docker) for details. + +2. Configurate the urls for each website. +First, export the `DATASET` to be `webarena`: + +```bash +export DATASET=webarena +``` + +Then, set the URL for the websites +(🚨 Notice: check if default ports of websites below correspond to those you setup in the first step) + +```bash +# Actually, the CLASSIFIEDS environment is not included in the WebArena-Lite evaluation, we keep the environment variables here just for consistency. +export CLASSIFIEDS=":9980" +export CLASSIFIEDS_RESET_TOKEN="4b61655535e7ed388f0d40a93600254c" + +# Below are the variables you should set for the evaluation. +export SHOPPING=":7770" +export REDDIT=":9999" +export SHOPPING_ADMIN=":7780/admin" +export GITLAB=":8023" +export MAP=":3000" +export WIKIPEDIA=":8888" +export HOMEPAGE=":4399" +``` + +3. Generate config files for each test example: + +```bash +python scripts/generate_test_data.py +``` + +You will see `*.json` files generated in the [config_files](./config_files) folder. Each file contains the configuration for one test example. + +4. Obtain and save the auto-login cookies for all websites: + +```bash +bash prepare.sh +``` + +5. Set up API keys. + +```bash +export OPENAI_API_KEY=your_key + +# Optional: if you use a different OpenAI model source +export OPENAI_API_URL=your_url + +# Optional: you can set the following variables to evaluate the preset model in llms/providers/api_utils.py +export GEMENI_API_KEY=your_key +export QWEN_API_KEY=your_key +export CLAUDE_API_KEY=your_key + +# Optional: if you have trained your model, we recommend deploying it as an API service, where you can set a FINETUNED_URL to evaluate it. +export FINETUNED_URL=your_url + +``` + +If using Gemini, first install the [gcloud CLI](https://cloud.google.com/sdk/docs/install). Configure the API key by authenticating with Google Cloud: + +```bash +gcloud auth login +gcloud config set project +``` + +## 🖼️ Evaluating in VAB Standard Setting with SoM (Set-of-Marks) Visual Agents + +### 👎 Run Single Agent For Evalution (Slow, but please read to understand meaning of arguments) + +To run your own model with SoM visual agent, you can run evaluation with the following flags: + +```bash +python run.py \ + --instruction_path agent/prompts/jsons/p_som_cot_id_actree_3s.json \ + --test_start_idx 0 \ + --test_end_idx 1 \ + --result_dir \ + --test_config_base_dir config_files/wa/test_webarena_lite \ + --provider api \ + --model openai_gpt-4-vision-preview \ + --action_set_tag som --observation_type image_som +``` + +Besides the original model providers (OpenAI, Google), you can also add your models in `llms/providers/api_utils.py`. Remember to set `--provider` to: + +- `api`: Keep the same input style as WebArena, suitable for regular API calls +- `finetune`: This is required for models trained with the data we provide. + +For the `--model` variable, we use the format `_` . + +- If there is no more optional models under source, you can set it to just `source`. +- Remember that the source name here should be added in the init function of `APIModel` in `llms/providers/api_utils.py`. +- For example, if you want to use the openai model "gpt-4o", you can set the flag like this: `--model openai_gpt-4o`. + +Finally, run `score.py` to get the pass rate +```bash +python score.py +``` + +### 👍 Run Parallel Agent For Evaluation (Recommended) + +To run the tests in parallel, you can first configure `wa_parallel_run.sh`, then run it. We default split the test set to 5 parallel-group for evaluation in VAB. + +```bash +# Remember to first launch a tmux session +tmux +bash wa_parallel_run.sh +``` + +The script is enabled with auto-resuming if it is interrupted or met unexpected error. Please feel free to rerun the above command until all tasks finish. + +After all parallel groupes finish, run `score.py` to get the pass rate +```bash +python score.py +``` + +### 🚨 Important: Refresh all websites before re-run another round of testing! +Since tasks in WebArena may involve changing status and database of websites (e.g., posting comments on Reddit), if websites are not all refreshed before another round of evaluation, the results would be problematic. + +Please remember to run following command (assume you are hosting WebArena websites on your own) to restart and refresh all website dockers to avoid potential contamination. +The process usually takes 3-5 minites. + +```bash +# Make sure the script is executed on the machine that you run those website dockers +bash refresh_website_docker.sh +``` + +You may need to change some contents in the script (e.g. configured ports of websites, names of dockers, etc.). + +## Run Visualized Demostration +Original WebArena have also prepared a demo for you to run the agents on your own task on an arbitrary webpage. An example is shown above where the agent is tasked to find the best Thai restaurant in Pittsburgh. + +After following the setup instructions above and setting the OpenAI API key (the other environment variables for website URLs aren't really used, so you should be able to set them to some dummy variable), you can run the GPT-4V + SoM agent with the following command: + +```bash +python run_demo.py \ + --instruction_path agent/prompts/jsons/p_som_cot_id_actree_3s.json \ + --start_url "https://www.amazon.com" \ + --image "https://media.npr.org/assets/img/2023/01/14/this-is-fine_wide-0077dc0607062e15b476fb7f3bd99c5f340af356-s1400-c100.jpg" \ + --intent "Help me navigate to a shirt that has this on it." \ + --result_dir demo_test_amazon \ + --model gpt-4-vision-preview \ + --action_set_tag som --observation_type image_som \ + --render +``` + +This tasks the agent to find a shirt that looks like the provided image (the "This is fine" dog) from Amazon. Have fun! + +## Acknowledgements + +Our code is heavily based off the WebArena codebase and VisualWebArena codebase. + +If you find this environment useful, please consider citing VisualWebArena as well as WebArena: + +```bibtex +@article{koh2024visualwebarena, + title={VisualWebArena: Evaluating Multimodal Agents on Realistic Visual Web Tasks}, + author={Koh, Jing Yu and Lo, Robert and Jang, Lawrence and Duvvur, Vikram and Lim, Ming Chong and Huang, Po-Yu and Neubig, Graham and Zhou, Shuyan and Salakhutdinov, Ruslan and Fried, Daniel}, + journal={arXiv preprint arXiv:2401.13649}, + year={2024} +} + +@article{zhou2024webarena, + title={WebArena: A Realistic Web Environment for Building Autonomous Agents}, + author={Zhou, Shuyan and Xu, Frank F and Zhu, Hao and Zhou, Xuhui and Lo, Robert and Sridhar, Abishek and Cheng, Xianyi and Bisk, Yonatan and Fried, Daniel and Alon, Uri and others}, + journal={ICLR}, + year={2024} +} +``` + diff --git a/VAB-WebArena-Lite/new/agent.py b/VAB-WebArena-Lite/new/agent.py new file mode 100644 index 0000000..461ba7e --- /dev/null +++ b/VAB-WebArena-Lite/new/agent.py @@ -0,0 +1,227 @@ +import argparse +import json +from typing import Any, Optional + +import tiktoken +from beartype import beartype +from PIL import Image + +from agent.prompts import * +from browser_env import Trajectory +from browser_env.actions import ( + Action, + ActionParsingError, + create_id_based_action, + create_none_action, + create_playwright_action, +) +from browser_env.utils import Observation, StateInfo +from llms import ( + call_llm, + generate_from_huggingface_completion, + generate_from_openai_chat_completion, + generate_from_openai_completion, + lm_config, +) +from llms.tokenizers import Tokenizer + + +class Agent: + """Base class for the agent""" + + def __init__(self, *args: Any) -> None: + pass + + def next_action( + self, trajectory: Trajectory, intent: str, meta_data: Any + ) -> Action: + """Predict the next action given the observation""" + raise NotImplementedError + + def reset( + self, + test_config_file: str, + ) -> None: + raise NotImplementedError + + +class TeacherForcingAgent(Agent): + """Agent that follows a pre-defined action sequence""" + + def __init__(self) -> None: + super().__init__() + + def set_action_set_tag(self, tag: str) -> None: + self.action_set_tag = tag + + def set_actions(self, action_seq: str | list[str]) -> None: + if isinstance(action_seq, str): + action_strs = action_seq.strip().split("\n") + else: + action_strs = action_seq + action_strs = [a.strip() for a in action_strs] + + actions = [] + for a_str in action_strs: + try: + if self.action_set_tag == "playwright": + cur_action = create_playwright_action(a_str) + elif self.action_set_tag == "id_accessibility_tree": + cur_action = create_id_based_action(a_str) + else: + raise ValueError( + f"Unknown action type {self.action_set_tag}" + ) + except ActionParsingError as e: + cur_action = create_none_action() + + cur_action["raw_prediction"] = a_str + actions.append(cur_action) + + self.actions: list[Action] = actions + + def next_action( + self, trajectory: Trajectory, intent: str, meta_data: Any + ) -> Action: + """Predict the next action given the observation""" + return self.actions.pop(0) + + def reset( + self, + test_config_file: str, + ) -> None: + with open(test_config_file) as f: + ref_actions = json.load(f)["reference_action_sequence"] + tag = ref_actions["action_set_tag"] + action_seq = ref_actions["action_sequence"] + self.set_action_set_tag(tag) + self.set_actions(action_seq) + + +class PromptAgent(Agent): + """prompt-based agent that emits action given the history""" + + @beartype + def __init__( + self, + action_set_tag: str, + lm_config: lm_config.LMConfig, + prompt_constructor: PromptConstructor, + captioning_fn = None, + ) -> None: + super().__init__() + self.lm_config = lm_config + self.prompt_constructor = prompt_constructor + self.action_set_tag = action_set_tag + self.captioning_fn = captioning_fn + + # Check if the model is multimodal. + if ("gemini" in lm_config.model or "gpt-4" in lm_config.model and "vision" in lm_config.model or lm_config.provider in ["api", "finetune"]) and type(prompt_constructor) == MultimodalCoTPromptConstructor: + self.multimodal_inputs = True + else: + self.multimodal_inputs = False + + def set_action_set_tag(self, tag: str) -> None: + self.action_set_tag = tag + + @beartype + def next_action( + self, trajectory: Trajectory, intent: str, meta_data: dict[str, Any], images: Optional[list[Image.Image]] = None, + output_response: bool = False + ) -> Action: + # Create page screenshot image for multimodal models. + if self.multimodal_inputs: + page_screenshot_arr = trajectory[-1]["observation"]["image"] + page_screenshot_img = Image.fromarray( + page_screenshot_arr + ) # size = (viewport_width, viewport_width) + + # Caption the input image, if provided. + if images is not None and len(images) > 0: + if self.captioning_fn is not None: + image_input_caption = "" + for image_i, image in enumerate(images): + if image_i == 0: + image_input_caption += f'Input image {image_i+1}: "{self.captioning_fn([image])[0]}"' + else: + image_input_caption += f'input image {image_i+1}: "{self.captioning_fn([image])[0]}"' + if len(images) > 1: + image_input_caption += ", " + # Update intent to include captions of input images. + intent = f"{image_input_caption}\nIntent: {intent}" + elif not self.multimodal_inputs: + print( + "WARNING: Input image provided but no image captioner available." + ) + + if self.multimodal_inputs: + prompt = self.prompt_constructor.construct( + trajectory, intent, page_screenshot_img, images, meta_data + ) + else: + prompt = self.prompt_constructor.construct( + trajectory, intent, meta_data + ) + lm_config = self.lm_config + n = 0 + while True: + response = call_llm(lm_config, prompt) + force_prefix = self.prompt_constructor.instruction[ + "meta_data" + ].get("force_prefix", "") + response = f"{force_prefix}{response}" + if output_response: + print(f'Agent: {response}', flush=True) + n += 1 + try: + parsed_response = self.prompt_constructor.extract_action( + response + ) + if self.action_set_tag == "id_accessibility_tree": + action = create_id_based_action(parsed_response) + elif self.action_set_tag == "playwright": + action = create_playwright_action(parsed_response) + elif self.action_set_tag == "som": + action = create_id_based_action(parsed_response) + else: + raise ValueError( + f"Unknown action type {self.action_set_tag}" + ) + action["raw_prediction"] = response + break + except ActionParsingError as e: + if n >= lm_config.gen_config["max_retry"]: + action = create_none_action() + action["raw_prediction"] = response + break + + return action + + def reset(self, test_config_file: str) -> None: + pass + + +def construct_agent(args: argparse.Namespace, captioning_fn=None) -> Agent: + llm_config = lm_config.construct_llm_config(args) + + agent: Agent + if args.agent_type == "teacher_forcing": + agent = TeacherForcingAgent() + elif args.agent_type == "prompt": + with open(args.instruction_path) as f: + constructor_type = json.load(f)["meta_data"]["prompt_constructor"] + tokenizer = Tokenizer(args.provider, args.model) + prompt_constructor = eval(constructor_type)( + args.instruction_path, lm_config=llm_config, tokenizer=tokenizer + ) + agent = PromptAgent( + action_set_tag=args.action_set_tag, + lm_config=llm_config, + prompt_constructor=prompt_constructor, + captioning_fn=captioning_fn + ) + else: + raise NotImplementedError( + f"agent type {args.agent_type} not implemented" + ) + return agent diff --git a/VAB-WebArena-Lite/new/api_utils.py b/VAB-WebArena-Lite/new/api_utils.py new file mode 100644 index 0000000..54cef30 --- /dev/null +++ b/VAB-WebArena-Lite/new/api_utils.py @@ -0,0 +1,682 @@ +import os +import copy +import json +import time +import base64 +import shutil +import requests + +import dashscope +import http.client +import anthropic + +import google.auth +from google.oauth2 import service_account +from google.auth.transport.requests import Request + +from openai import OpenAI +from typing import List, Tuple, Dict +from http import HTTPStatus +from PIL import Image +from io import BytesIO + +PROXIES = { # gemini + "http": "http://127.0.0.1:7890", + "https": "http://127.0.0.1:7890" +} + +SEED = int(os.environ.get("SEED", 42)) + +GCLOUD_KEY_FILE_PATH = "" # path to the google cloud project json file +GCLOUD_REGIONAL_CODE = "asia-east1" +OPENAI_API_URL = os.environ.get("OPENAI_API_URL") +FINETUNED_URL = os.environ.get("FINETUNED_URL") # finetuned model url + +OPENAI_API_KEY = os.environ["OPENAI_API_KEY"] # you should alway setup openai api key for evaluation +GEMINI_API_KEY = os.environ.get("GEMENI_API_KEY", "") # no need when using google cloud +QWEN_API_KEY = os.environ.get("QWEN_API_KEY" , "") +CLAUDE_API_KEY = os.environ.get("CLAUDE_API_KEY", "") + +class BasicModel(object): + def __init__(self): + super().__init__() + # make temp dir here + file_path = os.path.dirname(__file__) + self.base_dir = os.path.join(file_path, "temp", f"{int(time.time())}") + os.makedirs(self.base_dir, exist_ok=True) + + def __del__(self): + # remove temp dir + shutil.rmtree(self.base_dir, ignore_errors=True) + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + return messages + + @staticmethod + def process_system_prompt(messages: List[Dict]) -> List[Dict]: + if messages[0]["role"] != "system": + return messages + + new_messages = copy.deepcopy(messages[1:]) + system_prompt = messages[0]["content"] + + # Search for first user message and add system prompt to it + for item in new_messages: + if item.get("role") != "user": + continue + + for ct in item["content"]: + # Case 1: directly appended to the text + if ct["type"] == "text": + ct["text"] = system_prompt + "\n" + ct["text"] + return new_messages + + # Case 2: create a new text item + item["content"].insert(0, { + "type": "text", + "text": system_prompt + }) + return new_messages + + # Case 3: no user message found, add a new user message + new_messages.insert(0, { + "role": "user", + "content": [{ + "type": "text", + "text": system_prompt + }] + }) + return new_messages + + @staticmethod + def pil_to_b64(img: Image.Image) -> str: + with BytesIO() as image_buffer: + img.save(image_buffer, format="PNG") + byte_data = image_buffer.getvalue() + img_b64 = base64.b64encode(byte_data).decode("utf-8") + img_b64 = "data:image/png;base64," + img_b64 + return img_b64 + + # save base64 image and return filename + def b64_to_image(self, base64_data: str) -> str: + base64_data = base64_data.split(",")[1] + image_data = base64.b64decode(base64_data) + + filename = os.path.join(self.base_dir, f"{int(time.time())}.png") + with open(filename, "wb") as f: + f.write(image_data) + + return filename + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + raise NotImplementedError("Subclasses must implement this method") + + +class OpenAIModel(BasicModel): + def __init__(self): + super().__init__() + self.client = OpenAI(api_key=OPENAI_API_KEY, base_url=OPENAI_API_URL) + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + return messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + + response = self.client.chat.completions.create( + model=model_name, + messages=messages, + temperature=args.get("temperature", 0.0), + max_tokens=args.get("max_tokens", 1024), + top_p=args.get("top_p", 1.0), + ) + + try: + answer: str = response.choices[0].message.content + return True, answer + except: + return False, str(response.error) + + +class FinetuneModel(BasicModel): + def __init__(self): + super().__init__() + self.url = FINETUNED_URL # inference api + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + dialog, images = "", [] + for message in messages: + if message["role"] == "system": + dialog += f"<|system|>\n{message['content']}\n\n" + continue + elif message["role"] == "assistant": + dialog += f"<|assistant|>\n{message['content']}\n\n" + continue + + dialog += f"<|user|>\n" + for content in message["content"]: + if content["type"] == "text": + dialog += f"{content['text']}\n" + else: + # TODO: we use filename as image url here + images.append(self.b64_to_image(content["image_url"]["url"])) + dialog += "\n\n" + + dialog += "<|assistant|>\n" + images = [open(image, "rb") for image in images] + new_messages = [ + {"image": images[0]}, + {"prompt": dialog} + ] + + return new_messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + try: + response = requests.post(self.url, files=messages[0], data=messages[1], timeout=40) + response = response.json() + except Exception as e: + return False, str(e) + + if "error" in response: + return False, response["error"]["message"] + + # TODO: you should change the response format here + resp = f'```\n{response["response"].split("<|end_of_text|>")[0]}\n```' + return True, resp + + +class QwenModel(BasicModel): + def __init__(self): + super().__init__() + dashscope.api_key = QWEN_API_KEY + self.seed = SEED + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + messages = self.process_system_prompt(messages) + + new_messages = [] + for message in messages: + if message["role"] != "user": + new_messages.append({ + "role": "assistant", + "content": [{"text": message["content"]}] + }) + continue + + new_content = [] + for content in message["content"]: + if content["type"] == "text": + new_content.append({ + "text": content["text"], + }) + else: + filename = self.b64_to_image(content["image_url"]["url"]) + new_content.append({ + "image": f"file://{filename}" + }) + new_messages.append({ + "role": "user", + "content": new_content + }) + + return new_messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + if "QWEN_API_KEY" not in os.environ: + raise ValueError( + "QWEN_API_KEY environment variable must be set when using Qwen API." + ) + + response = dashscope.MultiModalConversation.call( + model=model_name, + messages=messages, + top_k=args.get("top_k"), + seed=self.seed + ) + + if response.status_code == HTTPStatus.OK: + return True, response.output.choices[0].message.content[0]['text'] + else: + return False, response.message + + +class ClaudeModel(BasicModel): + def __init__(self): + super().__init__() + self.client = anthropic.Anthropic(api_key=CLAUDE_API_KEY) + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + new_messages = [] + for message in messages: + if message["role"] in ["system", "assistant"]: + new_messages.append(message) + continue + + new_content = [] + for content in message["content"]: + if content["type"] == "text": + new_content.append(content) + continue + + hdr, idata = content["image_url"]["url"].split(";base64,") + new_content.append({ + "type": "image", + "source": { + "type": "base64", + "media_type": hdr.split("data:")[1], + "data": idata + } + }) + + new_messages.append({ + "role": "user", + "content": new_content + }) + + return new_messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + try: + if messages[0]["role"] == "system": + system_prompt = messages[0]["content"] + messages = messages[1:] + response = self.client.messages.create( + model="claude-3-5-sonnet-20240620", + max_tokens=args.get("max_tokens"), + temperature=args.get("temperature"), + system=system_prompt, + messages=messages + ) + + else: + response = self.client.messages.create( + model="claude-3-5-sonnet-20240620", + max_tokens=args.get("max_tokens"), + temperature=args.get("temperature"), + messages=messages + ) + + usage = response.usage + prompt_tokens = usage.input_tokens + completion_tokens = usage.output_tokens + + # print(response) + print(response.content) + print(f"Prompt Tokens: {prompt_tokens}\nCompletion Tokens: {completion_tokens}\n") + return True, response.content + + except Exception as e: + return False, str(e) + + def get_model_response_thirdapi(self, messages) -> Tuple[bool, str]: + + conn = http.client.HTTPSConnection("cn2us02.opapi.win", timeout=900) + + system_prompt = None + if messages[0]["role"] == "system": + system_prompt = messages[0]["content"] + messages = messages[1:] + payload = { + "model": "claude-3-opus", + "stream": False, + "system": system_prompt, + "messages": messages, + "temperature": self.temperature, + "max_tokens": self.max_tokens + } + else: + payload = { + "model": "claude-3-opus", + "stream": False, + "messages": messages, + "temperature": self.temperature, + "max_tokens": self.max_tokens + } + payload = json.dumps(payload) + headers = { + 'Accept': 'application/json', + 'Authorization': f'Bearer {CLAUDE_API_KEY}', + 'User-Agent': 'Apifox/1.0.0 (https://apifox.com)', + 'Content-Type': 'application/json' + } + try: + conn.request("POST", "/v1/messages", payload, headers) + res = conn.getresponse() + data = res.read() + response = json.loads(data.decode("utf-8")) + + except Exception as e: + return False, str(e) + + if "statusCode" in response and response["statusCode"] != 200: + return False, response["message"] + + usage = response["usage"] + prompt_tokens = usage["input_tokens"] + completion_tokens = usage["output_tokens"] + print(f"Prompt Tokens: {prompt_tokens}\nCompletion Tokens: {completion_tokens}\n") + + return True, response["content"][0]["text"] + + +class GeminiModel(BasicModel): + def __init__(self): + super().__init__() + self.api_key = GEMINI_API_KEY + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + parts = [] + dialog = "" + sep = "\n\n###\n\n" + for message in messages: + if message["role"] == "system": + dialog += f"SYSTEM:\n{message['content']}{sep}" + elif message["role"] == "assistant": + dialog += f"ASSISTANT:\n{message['content']}{sep}" + elif message["role"] == "user": + dialog += "USER:\n" + for content in message["content"]: + if content["type"] == "text": + dialog += content["text"] + "\n" + continue + + assert content["type"] == "image_url" + + # save text + parts.append({ "text": dialog }) + dialog = "" + + # new content type for image + hdr, idata = content["image_url"]["url"].split(";base64,") + parts.append({ + "inline_data": { + "mime_type": hdr.split("data:")[1], + "data": idata + } + }) + dialog += sep + else: + raise ValueError(f"Invalid role: {message['role']}") + + parts.append({ + "text": dialog + "ASSISTANT:\n" + }) + + new_messages = [{ + "parts": parts, + "role": "user" + }] + + return new_messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + + headers = { + "Content-Type": "application/json" + } + + proxies = PROXIES + url = f"https://generativelanguage.googleapis.com/v1beta/models/{model_name}-latest:generateContent?key={self.api_key}" + + generation_config = { + "temperature": args.get('temperature'), + "maxOutputTokens": args.get('max_tokens'), + "stopSequences": ["\n\n###\n\n"] + } + + safety_settings = [ + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "threshold": "BLOCK_ONLY_HIGH" + } + ] + + payload = { + "contents": messages, + "generationConfig": generation_config, + "safetySettings": safety_settings + } + + try: + response = requests.post(url, headers=headers, json=payload, proxies=proxies, timeout=30) + response = response.json() + except Exception as e: + return False, str(e) + + if "error" in response: + return False, response["error"]["message"] + if "content" not in response['candidates'][0]: + self.generation_config['maxOutputTokens'] *= 2 + return False, "No content generated." + return True, response['candidates'][0]['content']['parts'][0]['text'] + + +class VertexGeminiModel(BasicModel): + def __init__(self): + super().__init__() + + def prompt_construct(self, messages: List[Dict]) -> List[Dict]: + parts = [] + dialog = "" + sep = "\n\n###\n\n" + for message in messages: + if message["role"] == "system": + dialog += f"SYSTEM:\n{message['content']}{sep}" + elif message["role"] == "assistant": + dialog += f"ASSISTANT:\n{message['content']}{sep}" + elif message["role"] == "user": + dialog += "USER:\n" + for content in message["content"]: + if content["type"] == "text": + dialog += content["text"] + "\n" + continue + + assert content["type"] == "image_url" + # save text + parts.append({ "text": dialog }) + dialog = "" + # new content type for image + hdr, idata = content["image_url"]["url"].split(";base64,") + parts.append({ + "inline_data": { + "mime_type": hdr.split("data:")[1], + "data": idata + } + }) + dialog += sep + else: + raise ValueError(f"Invalid role: {message['role']}") + + parts.append({ + "text": dialog + "ASSISTANT:\n" + }) + + new_messages = [{ + "parts": parts, + "role": "user" + }] + + return new_messages + + def get_model_response(self, messages: List[Dict], model_name: str, **args) -> Tuple[bool, str]: + def get_gcloud_token(): + def get_token(): + try: + # Load the credentials from the key file + creds = service_account.Credentials.from_service_account_file( + GCLOUD_KEY_FILE_PATH, + # You can list multiple scopes if needed + scopes=['https://www.googleapis.com/auth/cloud-platform'] + ) + # Refresh the token (this is needed even for the first time) + creds.refresh(Request()) + return creds.token + + except Exception as e: + print(f"An error occurred while trying to fetch the gcloud token: {str(e)}") + return None + + os.environ['HTTP_PROXY'] = PROXIES['http'] + os.environ['HTTPS_PROXY'] = PROXIES['https'] + + fail_time = 0 + while not api_key and fail_time < 10: + time.sleep(5) + api_key = get_token() + fail_time += 1 + + return api_key + + def get_url(model_name: str) -> str: + region_code = GCLOUD_REGIONAL_CODE + model_id = f"{model_name}:generateContent" + with open(GCLOUD_KEY_FILE_PATH, "r") as f: + project_id = json.load(f)["project_id"] + return f"https://{region_code}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{region_code}/publishers/google/models/{model_id}" + + url = get_url(model_name) + api_key = get_gcloud_token() + + if not api_key: + return False, "Failed to fetch gcloud token." + + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {api_key}" + } + + proxies = PROXIES + safety_settings = [ + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_HARASSMENT", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "threshold": "BLOCK_ONLY_HIGH" + }, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "threshold": "BLOCK_ONLY_HIGH" + } + ] + + generation_config = { + "temperature": args.get('temperature'), + "maxOutputTokens": args.get('max_tokens'), + "stopSequences": ["\n\n###\n\n"] + } + + payload = { + "contents": messages, + "generationConfig": generation_config, + "safetySettings": safety_settings + } + + try: + response = requests.post(url, headers=headers, json=payload, proxies=proxies, timeout=120) + response = response.json() + except Exception as e: + return False, str(e) + + if "error" in response: + return False, response["error"]["message"] + if "content" not in response['candidates'][0]: + self.generation_config['maxOutputTokens'] *= 2 + return False, "No content generated." + + return True, response['candidates'][0]['content']['parts'][0]['text'] + + +class APIModel(object): + def __init__(self): + super().__init__() + self.models = { + "openai": OpenAIModel(), + "gemini": VertexGeminiModel(), + "qwen": QwenModel(), + "finetuned": FinetuneModel(), + "claude": ClaudeModel() + } + + def inference(self, model_id: str, messages: List[Dict], args: Dict) -> Tuple[bool, str]: + model_provider, model_name = model_id.split("_")[:2] if "_" in model_id else (model_id, model_id) # eg. "openai_gpt4o" + if model_provider not in self.models: + return False, f"Unsupported model: {model_provider} ({model_name})" + + model = self.models[model_provider] + prompt = model.prompt_construct(messages) + resp = model.get_model_response(prompt, model_name, **args) + + return resp + +model = APIModel() + +def generate_with_api(prompt: List[dict], model_id: str, args: Dict) -> str: + success, response = model.inference(model_id, prompt, args) + return response + +if __name__ == "__main__": + path_to_image = "../../coco_images/000000000285.jpg" + + from PIL import Image + image = Image.open(path_to_image) + img_str = BasicModel.pil_to_b64(image) + + messages = [ + { + "role": "system", + "content": "You are a helpful assistant. Please response concisely." + }, + { + "role": "user", + "content": [{ + "type": "text", + "text": "what's annotated in this image? Image: Omitted." + }] + }, + { + "role": "assistant", + "content": "Only 5.cart is annotated in this image." + }, + { + "role": "user", + "content": [{ + "type": "text", + "text": "What can you see?" + },{ + "type": "image_url", + "image_url": { + "url": img_str, + "detail": "high" + } + }] + } + ] + + response = generate_with_api(messages, "openai", { + "temperature": 0.5, + "max_tokens": 1024, + "top_p": 0.9, + "n": 1, + }) \ No newline at end of file diff --git a/VAB-WebArena-Lite/new/evaluators.py b/VAB-WebArena-Lite/new/evaluators.py new file mode 100644 index 0000000..85b5363 --- /dev/null +++ b/VAB-WebArena-Lite/new/evaluators.py @@ -0,0 +1,649 @@ +"""base class for evaluation""" +# answer string match +import importlib +import json +import re +import time +import urllib +from pathlib import Path +from typing import Any, Optional, Tuple, Union +from urllib.parse import urljoin + +import evaluate # type: ignore[import] +import requests +from beartype import beartype +from beartype.door import is_bearable +from nltk.tokenize import word_tokenize # type: ignore +from PIL import Image +from playwright.sync_api import CDPSession, Page + +from browser_env.actions import Action +from browser_env.utils import StateInfo +from evaluation_harness import image_utils +from evaluation_harness.helper_functions import ( + PseudoPage, + get_query_text, + get_query_text_lowercase, + gitlab_get_project_memeber_role, + llm_fuzzy_match, + llm_ua_match, + reddit_get_latest_comment_content_by_username, + reddit_get_latest_comment_obj_by_username, + reddit_get_parent_comment_username_of_latest_comment_by_username, + reddit_get_post_url, + shopping_get_latest_order_url, + shopping_get_num_reviews, + shopping_get_order_product_name_list, + shopping_get_order_product_option, + shopping_get_order_product_quantity, + shopping_get_product_attributes, + shopping_get_product_price, + shopping_get_rating_as_percentage, + shopping_get_sku_latest_review_author, + shopping_get_sku_latest_review_rating, + shopping_get_sku_latest_review_text, +) + +Trajectory = list[Union[Action, StateInfo]] + + +@beartype +class Evaluator(object): + def __init__(self, eval_tag: str = "") -> None: + self.eval_tag = eval_tag + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage + ) -> float: + raise NotImplementedError + + @staticmethod + def get_last_action(trajectory: Trajectory) -> Action: + try: + is_bearable(trajectory[-1], Action) + last_action = trajectory[-1] + except Exception: + raise ValueError( + "The last element of trajectory should be an action, add a fake stop action if needed" + ) + + return last_action # type: ignore[return-value] + + @staticmethod + def get_last_state(trajectory: Trajectory) -> StateInfo: + try: + is_bearable(trajectory[-2], StateInfo) + last_state = trajectory[-2] + except Exception: + raise ValueError( + "The second last element of trajectory should be a state, add a fake stop action if needed" + ) + + return last_state # type: ignore[return-value] + + +@beartype +class NumericEvaluator(Evaluator): + """Check if the numerical relationship is correct""" + + @staticmethod + @beartype + def str_2_int(s: str) -> Optional[int]: + try: + s = s.strip() + if "," in s: + s = s.replace(",", "") + + return int(s) + except ValueError: + # Return None if the string cannot be converted to int + print(f"[NumericEvaluator error]: Cannot convert {s} to int") + return None + + @staticmethod + @beartype + def compare_inequality( + value: Union[int, float], inequality: str, tol: float = 1e-8 + ) -> bool: + """ + Compare a value (int or float) against an inequality string. + + Args: + - value (int/float): The value to be compared. + - inequality (str): Inequality in the form of "< 700", ">= 300", etc. + - tol (float): Tolerance for floating point comparisons. + + Returns: + - bool: True if the value satisfies the inequality, False otherwise. + """ + # Extract the operator and the number from the inequality string + ops = { + "<=": lambda x, y: x <= y + tol, + ">=": lambda x, y: x >= y - tol, + "==": lambda x, y: abs(x - y) <= tol, + "<": lambda x, y: x < y + tol, + ">": lambda x, y: x > y - tol, + } + + for op, func in ops.items(): + if op in inequality: + _, num = inequality.split(op) + return func(value, float(num.strip())) + + raise ValueError(f"Invalid inequality string: {inequality}") + + +@beartype +class StringEvaluator(Evaluator): + """Check whether the answer is correct with: + exact match: the answer is exactly the same as the reference answer + must include: each phrase in the reference answer must be included in the answer + fuzzy match: the answer is similar to the reference answer, using LLM judge + """ + + @staticmethod + @beartype + def clean_answer(answer: str) -> str: + if answer.startswith("'") and answer.endswith("'"): + answer = answer[1:-1] + elif answer.startswith('"') and answer.endswith('"'): + answer = answer[1:-1] + return answer.lower() + + @staticmethod + @beartype + def exact_match(ref: str, pred: Union[str, int]) -> float: + if isinstance(pred, int): + pred = str(pred) + return float( + StringEvaluator.clean_answer(pred) + == StringEvaluator.clean_answer(ref) + ) + + @staticmethod + @beartype + def must_include(ref: str, pred: str) -> float: + clean_ref = StringEvaluator.clean_answer(ref) + clean_pred = StringEvaluator.clean_answer(pred) + # tokenize the answer if the ref is a single word + # prevent false positive (e.g, 0) + if len(word_tokenize(clean_ref)) == 1: + tok_pred = word_tokenize(clean_pred) + return float(clean_ref in tok_pred) + else: + return float(clean_ref in clean_pred) + + @staticmethod + @beartype + def must_exclude(ref: str, pred: str) -> float: + """Returns 1 if pred is not in ref, and 0 otherwise""" + clean_ref = StringEvaluator.clean_answer(ref) + clean_pred = StringEvaluator.clean_answer(pred) + # tokenize the answer if the ref is a single word + # prevent false positive (e.g, 0) + if len(word_tokenize(clean_ref)) == 1: + tok_pred = word_tokenize(clean_pred) + return float(clean_ref not in tok_pred) + else: + return float(clean_ref not in clean_pred) + + @staticmethod + @beartype + def fuzzy_match(ref: str, pred: str, intent: str) -> float: + return llm_fuzzy_match(pred, ref, intent) + + @staticmethod + @beartype + def ua_match(ref: str, pred: str, intent: str) -> float: + return llm_ua_match(pred, ref, intent) + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage | None = None + ) -> float: + with open(config_file, "r") as f: + configs = json.load(f) + + last_action = self.get_last_action(trajectory) + pred = self.clean_answer(last_action["answer"]) + + score = 1.0 + for approach, value in configs["eval"]["reference_answers"].items(): + match approach: + case "exact_match": + score *= self.exact_match(ref=value, pred=pred) + case "required_values": + required_values = value + assert isinstance(required_values, list) + pred = NumericEvaluator.str_2_int(pred) + if pred is None: + score = 0.0 + else: + for v in required_values: + value_or = v.split(" |OR| ") + score *= any( + [ + NumericEvaluator.compare_inequality( + pred, value + ) + for value in value_or + ] + ) + case "must_include": + assert isinstance(value, list) + for must_value in value: + value_or = must_value.split(" |OR| ") + score *= any([self.must_include(ref=v, pred=pred) for v in value_or]) + case "must_exclude": + assert isinstance(value, list) + for must_excl_value in value: + score *= self.must_exclude( + ref=must_excl_value, pred=pred + ) + case "one_of": + assert isinstance(value, list) + found = False + for one_of_value in value: + one_of_value = self.clean_answer(one_of_value) + if one_of_value in pred: + found = True + break + score = score * found + case "fuzzy_match": + intent = configs["intent"] + if value == "N/A": + # if the instruction only asks the model to generate N/A when encountering an unachievable task + # without more concrete reasons + score *= self.exact_match(ref=value, pred=pred) + # if the instruction also asks the model to generate the reason why the task is unachievable + # this should be the default as it will prevent false positive N/A` + if score != 1: + score = 1.0 * self.ua_match( + intent=configs["intent"], + ref=configs["eval"]["string_note"], + pred=pred, + ) + else: + assert isinstance(value, list) + reference = ', '.join(value) + score *= self.fuzzy_match( + ref=reference, pred=pred, intent=intent + ) + return score + + +@beartype +class StringSoftEvaluator(Evaluator): + """Use text generation metrics such as BLEU, ROUGE, etc. to evaluate the answer""" + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage | None = None + ) -> float: + with open(config_file, "r") as f: + configs = json.load(f) + + last_action = self.get_last_action(trajectory) + pred = last_action["answer"] + ref = configs["eval"]["reference_answers"] + # rouge + m = evaluate.load("rouge") + rouge = m.compute(predictions=[pred], references=[ref]) + return float(rouge["rouge1"]) + + +@beartype +class URLExactEvaluator(Evaluator): + """Check whether the URL is exactly the same as of the reference URLs""" + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage + ) -> float: + with open(config_file, "r") as f: + configs = json.load(f) + + def clean_url(url: str) -> str: + url = str(url) + # Replace http://localhost with http://127.0.0.1 to keep things consistent across evals. + url = url.replace("localhost", "127.0.0.1") + if url.endswith("/"): + url = url[:-1] + return url + + pred = clean_url(page.url) + ref_urls = configs["eval"]["reference_url"].split(" |OR| ") + ref_urls = [clean_url(url) for url in ref_urls] + matching_rule = configs["eval"].get("url_note", "EXACT") + if matching_rule == "EXACT": + if pred in ref_urls: + return 1.0 + else: + return 0.0 + elif matching_rule == "GOLD in PRED": + if any([ref in pred for ref in ref_urls]): + return 1.0 + else: + return 0.0 + else: + raise ValueError(f"Unknown matching rule: {matching_rule}") + + +@beartype +class HTMLContentExactEvaluator(Evaluator): + """Check whether the contents appear in the page""" + + @staticmethod + @beartype + def fuzzy_match(ref: str, pred: str, intent: str) -> float: + return llm_fuzzy_match(pred, ref, intent) + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage + ) -> float: + with open(config_file, "r") as f: + configs = json.load(f) + + targets = configs["eval"]["program_html"] + + score = 1.0 + for target in targets: + target_url: str = target["url"] # which url to check + if target_url.startswith("func"): + func = target_url.split("func:")[1] + func = func.replace("__last_url__", page.url) + target_url = eval(func) + + locator: str = target["locator"] # js element locator + + # navigate to that url + if target_url != "last": + page.goto(target_url) + time.sleep(3) # TODO [shuyanzh]: fix this hard-coded sleep + + # empty, use the full page + if not locator.strip(): + selected_element = page.content() + # use JS to select the element + elif locator.startswith("document.") or locator.startswith( + "[...document." + ): + if "prep_actions" in target: + try: + for prep_action in target["prep_actions"]: + page.evaluate(f"() => {prep_action}") + except Exception: + pass + try: + selected_element = str(page.evaluate(f"() => {locator}")) + if not selected_element: + selected_element = "" + except Exception: + # the page is wrong, return empty + selected_element = "" + elif locator.startswith("lambda:"): + try: + locator = locator.lstrip("lambda:") + selected_element = page.evaluate(locator) + if not selected_element: + selected_element = None + except Exception: + # the page is wrong, return empty + selected_element = None + # run program to call API + elif locator.startswith("func:"): # a helper function + func = locator.split("func:")[1] + func = func.replace("__page__", "page") + selected_element = eval(func) + else: + raise ValueError(f"Unknown locator: {locator}") + + # If the selected element is None, then the page is wrong + if selected_element is None: + score = 0.0 + break + + if "exact_match" in target["required_contents"]: + required_contents = target["required_contents"]["exact_match"] + score *= StringEvaluator.exact_match( + ref=required_contents, pred=selected_element + ) + elif "must_include" in target["required_contents"]: + required_contents = target["required_contents"]["must_include"] + assert isinstance(required_contents, list) + for content in required_contents: + content_or = content.split(" |OR| ") + score *= any( + [ + StringEvaluator.must_include( + ref=content, pred=selected_element + ) + for content in content_or + ] + ) + elif "must_exclude" in target["required_contents"]: + required_contents = target["required_contents"]["must_exclude"] + assert isinstance(required_contents, list) + for content in required_contents: + assert " |OR| " not in content + score *= StringEvaluator.must_exclude( + content, pred=selected_element + ) + elif "required_values" in target["required_contents"]: + required_values = target["required_contents"][ + "required_values" + ] + assert isinstance(required_values, list) + if isinstance(selected_element, str): + selected_element = NumericEvaluator.str_2_int( + selected_element + ) + if selected_element is None: + score = 0.0 + else: + for value in required_values: + value_or = value.split(" |OR| ") + score *= any( + [ + NumericEvaluator.compare_inequality( + selected_element, value + ) + for value in value_or + ] + ) + elif "fuzzy_match" in target["required_contents"]: + required_contents = target["required_contents"]["fuzzy_match"] + intent = configs["intent"] + + assert isinstance(required_contents, list) + reference = ', '.join(required_contents) + score *= self.fuzzy_match( + ref=reference, pred=selected_element, intent=intent + ) + else: + raise ValueError( + f"Unknown required_contents: {target['required_contents'].keys()}" + ) + + return score + + +@beartype +class PageImageEvaluator(Evaluator): + """Check whether the answer is correct by querying a vision model.""" + + def __init__(self, captioning_fn): + self.captioning_fn = captioning_fn + # Default to 0.8 as the threshold for similarity to account for compression, resizing, etc + # This might be too generous but we bias towards minimizing false negatives. + self.ssim_threshold = 0.8 + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage | None = None + ) -> float: + with open(config_file, "r") as f: + configs = json.load(f) + + for query in configs["eval"]["page_image_query"]: + locator: str = query["eval_image_class"] + target_url: str = query["eval_image_url"] + if target_url.startswith("func"): + func = target_url.split("func:")[1] + func = func.replace("__last_url__", page.url) + target_url = eval(func) + + # navigate to that url + if target_url != "last": + page.goto(target_url) + time.sleep(3) # TODO(jykoh): fix this hard-coded sleep + + # empty, use the full page + if not locator.strip(): + images = page.get_by_role("img").all() + # use JS to select the element + elif locator.startswith("."): + # Get all img children under the locator + elements = page.query_selector_all(locator) + images = [] + for element in elements: + is_img = element.evaluate( + 'element => element.tagName === "IMG"' + ) + if is_img: + images.append(element) + else: + images.extend(element.query_selector_all("img")) + else: + raise ValueError(f"Unknown locator: {locator}") + + if images == []: + return 0.0 + + all_image_pixels = [] + for image in images: + try: + # Get image from URL. + image_url = image.get_attribute("src") + if not image_url.startswith( + ("http://", "https://", "www.") + ): + image_url = urljoin(page.url, image_url) + image = Image.open( + requests.get(image_url, stream=True).raw + ) + all_image_pixels.append(image) + except Exception as e: + print("[WARNING]: ", e) + + score = 1.0 + if all_image_pixels == []: + return 0.0 + else: + # Run the VQA eval on the image elements. + eval_vqas = query.get("eval_vqa", []) + assert ( + len(eval_vqas) > 0 or "eval_fuzzy_image_match" in query + ), "eval_vqa must have at least 2 questions or eval_fuzzy_image_match must be True" + for qa in eval_vqas: + question, answer = qa["question"], qa["answer"] + prompt = f"Q: {question} A:" + pred_ans = self.captioning_fn( + all_image_pixels, [prompt] * len(all_image_pixels) + ) + score *= float( + any( + [answer.lower() in ans.lower() for ans in pred_ans] + ) + ) + + if "eval_fuzzy_image_match" in query: + ssim_threshold = query.get( + "ssim_threshold", self.ssim_threshold + ) + exact_match_imgs = query["eval_fuzzy_image_match"].split( + " |OR| " + ) + all_exact_match_pixels = [] + + for exact_match_img in exact_match_imgs: + if exact_match_img.startswith("http"): + exact_match_pixels = Image.open( + requests.get(exact_match_img, stream=True).raw + ) + else: + exact_match_pixels = Image.open(exact_match_img) + all_exact_match_pixels.append(exact_match_pixels) + + # Check if any of the images on the page match + found_exact_match = False + for exact_match_pixels in all_exact_match_pixels: + for image_pixels in all_image_pixels: + ssim = image_utils.get_image_ssim( + image_pixels, exact_match_pixels + ) + if ssim > ssim_threshold: + found_exact_match = True + break + score *= float(found_exact_match) + + return score + + +class EvaluatorComb: + def __init__(self, evaluators: list[Evaluator]) -> None: + self.evaluators = evaluators + + def __call__( + self, + trajectory: Trajectory, + config_file: Path | str, + page: Page | PseudoPage + ) -> float: + + score = 1.0 + for evaluator in self.evaluators: + cur_score = evaluator(trajectory, config_file, page) + score *= cur_score + + return score + + +@beartype +def evaluator_router( + config_file: Path | str, captioning_fn=None +) -> EvaluatorComb: + """Router to get the evaluator class""" + with open(config_file, "r") as f: + configs = json.load(f) + + eval_types = configs["eval"]["eval_types"] + evaluators: list[Evaluator | EvaluatorPartial] = [] + for eval_type in eval_types: + match eval_type: + case "string_match": + evaluators.append(StringEvaluator()) + case "url_match": + evaluators.append(URLExactEvaluator()) + case "program_html": + evaluators.append(HTMLContentExactEvaluator()) + case "page_image_query": + evaluators.append(PageImageEvaluator(captioning_fn)) + case _: + raise ValueError(f"eval_type {eval_type} is not supported") + + return EvaluatorComb(evaluators) diff --git a/VAB-WebArena-Lite/new/generate_test_data.py b/VAB-WebArena-Lite/new/generate_test_data.py new file mode 100644 index 0000000..0938d29 --- /dev/null +++ b/VAB-WebArena-Lite/new/generate_test_data.py @@ -0,0 +1,63 @@ +"""Replace the website placeholders with website domains from env_config +Generate the test data""" +import json +import os + +from browser_env.env_config import * + + +def main() -> None: + DATASET = os.environ["DATASET"] + if DATASET == "webarena": + print("DATASET: webarena") + print(f"REDDIT: {REDDIT}") + print(f"SHOPPING: {SHOPPING}") + print(f"SHOPPING_ADMIN: {SHOPPING_ADMIN}") + print(f"GITLAB: {GITLAB}") + print(f"WIKIPEDIA: {WIKIPEDIA}") + print(f"MAP: {MAP}") + + inp_paths = ["config_files/wa/test_webarena.raw.json", "config_files/wa/test_webarena_lite.raw.json"] + replace_map = { + "__REDDIT__": REDDIT, + "__SHOPPING__": SHOPPING, + "__SHOPPING_ADMIN__": SHOPPING_ADMIN, + "__GITLAB__": GITLAB, + "__WIKIPEDIA__": WIKIPEDIA, + "__MAP__": MAP, + } + elif DATASET == "visualwebarena": + print("DATASET: visualwebarena") + print(f"CLASSIFIEDS: {CLASSIFIEDS}") + print(f"REDDIT: {REDDIT}") + print(f"SHOPPING: {SHOPPING}") + inp_paths = [ + "config_files/vwa/test_classifieds.raw.json", "config_files/vwa/test_shopping.raw.json", "config_files/vwa/test_reddit.raw.json", + ] + replace_map = { + "__REDDIT__": REDDIT, + "__SHOPPING__": SHOPPING, + "__WIKIPEDIA__": WIKIPEDIA, + "__CLASSIFIEDS__": CLASSIFIEDS, + } + else: + raise ValueError(f"Dataset not implemented: {DATASET}") + + for inp_path in inp_paths: + output_dir = inp_path.replace('.raw.json', '') + os.makedirs(output_dir, exist_ok=True) + with open(inp_path, "r") as f: + raw = f.read() + for k, v in replace_map.items(): + raw = raw.replace(k, v) + + with open(inp_path.replace(".raw", ""), "w") as f: + f.write(raw) + data = json.loads(raw) + for idx, item in enumerate(data): + with open(os.path.join(output_dir, f"{idx}.json"), "w") as f: + json.dump(item, f, indent=2) + + +if __name__ == "__main__": + main() diff --git a/VAB-WebArena-Lite/new/helper_functions.py b/VAB-WebArena-Lite/new/helper_functions.py new file mode 100644 index 0000000..f98b24d --- /dev/null +++ b/VAB-WebArena-Lite/new/helper_functions.py @@ -0,0 +1,647 @@ +"""Implements helper functions to assist evaluation cases where other evaluators are not suitable.""" +import json +from datetime import datetime, timezone +from typing import Any, Union +from urllib.parse import urlparse + +import requests +from beartype import beartype +from beartype.typing import Dict, List +from playwright.sync_api import CDPSession, Page + +from browser_env.env_config import ( + ACCOUNTS, + REDDIT, + SHOPPING, + WIKIPEDIA, +) +from llms.providers.openai_utils import ( + generate_from_openai_chat_completion, +) + +import logging +logger = logging.getLogger("logger") + +class PseudoPage: + def __init__(self, original_page: Page, url: str): + self.url = url + self.original_page = original_page + + def __getattr__(self, attr: str) -> Any: + # Delegate attribute access to the original page object + if attr not in ["url"]: + return getattr(self.original_page, attr) + else: + return getattr(self, attr) + + +@beartype +def shopping_get_auth_token() -> str: + response = requests.post( + url=f"{SHOPPING}/rest/default/V1/integration/admin/token", + headers={"content-type": "application/json"}, + data=json.dumps( + { + "username": ACCOUNTS["shopping_site_admin"]["username"], + "password": ACCOUNTS["shopping_site_admin"]["password"], + } + ), + ) + token: str = response.json() + return token + + +@beartype +def shopping_get_latest_order_url() -> str: + """Get the latest order url from the shopping website.""" + + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + + params = { + "searchCriteria[sortOrders][0][field]": "created_at", + "searchCriteria[sortOrders][0][direction]": "DESC", + "searchCriteria[pageSize]": "1", + } + + response = requests.get( + f"{SHOPPING}/rest/V1/orders", params=params, headers=header + ) + assert response.status_code == 200 + response_obj = response.json()["items"][0] + order_id = int(response_obj["increment_id"]) + order_url = f"{SHOPPING}/sales/order/view/order_id/{order_id}/" + return order_url + + +@beartype +def shopping_get_sku_latest_review_author(sku: str) -> str: + """Get the latest review for shopping admin.""" + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + response = requests.get( + f"{SHOPPING}/rest/V1/products/{sku}/reviews", headers=header + ) + assert response.status_code == 200 + response_obj = response.json() + if len(response_obj) == 0: + return "" + author: str = response_obj[-1]["nickname"] + return author + + +@beartype +def shopping_get_sku_latest_review_rating(sku: str) -> str: + """Get the latest review for shopping admin.""" + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + response = requests.get( + f"{SHOPPING}/rest/V1/products/{sku}/reviews", headers=header + ) + assert response.status_code == 200 + response_obj = response.json() + if len(response_obj) == 0: + return "" + assert response_obj[0]["ratings"][0]["rating_name"] == "Rating" + rating: str = str(response_obj[-1]["ratings"][0]["percent"]) + return rating + + +@beartype +def shopping_get_sku_latest_review_text(sku: str) -> str: + """Get the latest review text for shopping admin.""" + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + response = requests.get( + f"{SHOPPING}/rest/V1/products/{sku}/reviews", headers=header + ) + assert response.status_code == 200 + response_obj = response.json() + if len(response_obj) == 0: + return "" + text: str = response_obj[-1]["detail"] + return text + + +@beartype +def shopping_get_sku_latest_review_title(sku: str) -> str: + """Get the latest review title for shopping admin.""" + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + response = requests.get( + f"{SHOPPING}/rest/V1/products/{sku}/reviews", headers=header + ) + assert response.status_code == 200 + response_obj = response.json() + if len(response_obj) == 0: + return "" + title: str = response_obj[-1]["title"] + return title + + +@beartype +def shopping_get_sku_product_page_url(sku: str) -> str: + """Get product page url from sku""" + header = { + "Authorization": f"Bearer {shopping_get_auth_token()}", + "Content-Type": "application/json", + } + response = requests.get( + f"{SHOPPING}/rest/V1/products/{sku}", headers=header + ) + assert response.status_code == 200 + response_obj = response.json() + if len(response_obj) == 0: + return "" + for custom_attributes in response_obj["custom_attributes"]: + if custom_attributes["attribute_code"] == "url_key": + return f"{SHOPPING}/{custom_attributes['value']}.html" + return "" + + +@beartype +def shopping_get_all_product_order( + page: Page | PseudoPage, +) -> List[Dict[str, str]]: + """ + Get info of all product in a given order page. + + Example output: + [ + { + "name": "Kellogg's Special K Protein Bars, Meal Replacement, Protein Snacks, Value Size, Strawberry, 19oz Box (12 Bars)\nSize\n12 Count (Pack of 1)", + "options": { + "Size": "12 Count (Pack of 1)" + }, + "sku": "B00MXUFL0E", + "price": "$24.50", + "qty": "Ordered2", + "subtotal": "$49.00" + }, + { + "name": "Kellogg's Special K Protein Bars, Meal Replacement, Protein Snacks, Value Size, Chocolatey Chip Cookie Dough, 19oz Box (12 Bars)", + "sku": "B07ZD2PB9F", + "price": "$42.30", + "qty": "Ordered2", + "subtotal": "$84.60" + } + ] + """ + try: + result = page.evaluate( + f""" +(() => {{ + try {{ + const products = [...document.querySelector("#my-orders-table").getElementsByTagName('tbody')].map( + (x) => {{ + return [...x.getElementsByTagName('td')].reduce(function(obj, y) {{ + const key = y.className.split(' ')[1]; + obj[key] = y.outerText; + // check if options exist + if (key === 'name' && y.querySelector('dl')) {{ + var option_dict = {{}} + const options = [...y.querySelector('dl').children]; + for (let i = 0; i < options.length; i += 2) {{ + option_dict[options[i].outerText] = options[i+1].outerText; + }} + obj['options'] = option_dict; + }} + return obj; + }}, {{}}) + }} + ); + return products; + }} catch (e) {{ + // If any errors are caught, return an empty string + return e; + return []; + }} +}})(); + """ + ) + return result + except Exception as e: + result = [] + + return result + + +@beartype +def shopping_get_order_product_name_list(page: Page | PseudoPage) -> str: + try: + products = shopping_get_all_product_order(page) + + return " |OR| ".join([p["name"] for p in products]) + except Exception: + return "" + + +@beartype +def shopping_get_order_product_quantity( + page: Page | PseudoPage, sku: str +) -> int: + try: + if "|OR|" in sku: + skus = sku.split(" |OR| ") + else: + skus = [sku] + + products = shopping_get_all_product_order(page) + for product in products: + if product["sku"].strip() in skus: + # Ordered{qty} + return int(product["qty"][7:]) + return 0 + except Exception: + return 0 + + +@beartype +def shopping_get_order_product_option( + page: Page | PseudoPage, sku: str, option_name: str +) -> str: + try: + products = shopping_get_all_product_order(page) + for product in products: + if product["sku"].strip() == sku: + # Ordered{qty} + return product["options"][option_name] + return "" + except Exception as e: + return "" + + +@beartype +def shopping_get_product_attributes( + page: Page | PseudoPage, attribute: str +) -> str: + # Get the values of all cells in the table for the given attribute + try: + result = page.evaluate( + f""" + (() => {{ + try {{ + // Create an array of search terms, splitting the string by ' |OR| ' + const searchTerms = '{attribute}'.toLowerCase().split(' |or| '); + // Convert the children of the tbody inside the element with the given ID into an array + return Array.from( + document.querySelector('#productDetails_detailBullets_sections1 > tbody').children + ) + // Filter the array to only include elements where the first child's text includes any of the search terms + .filter(x => + searchTerms.some(term => x.children[0].outerText.toLowerCase().includes(term)) + ) + // Map over the filtered elements to get the outerText of their second child + .map(x => x.children[1].outerText) + // Join all the resulting strings with a comma and a space + .join(', ') + }} catch (e) {{ + // If any errors are caught, return an empty string + return '' + }} + }})(); + """ + ) + except Exception: + result = "" + + return result + + +@beartype +def shopping_get_product_price(page: Page | PseudoPage) -> Union[float, int]: + """Get the price of the product on the shopping website.""" + try: + result = page.evaluate( + """ + (() => {{ + res = parseFloat(document.querySelector(\"#maincontent > div.columns > div > div.product-info-main > div.product-info-price > div.price-box.price-final_price > span > span\") + .outerText.substr(1)); + return res ? res : 0; + }})(); + """ + ) + except Exception: + result = 0 + + return result + + +@beartype +def shopping_get_num_reviews(page: Page | PseudoPage) -> int: + """Get the price of the product on the shopping website.""" + try: + result = page.evaluate( + """ + (() => {{ + res = parseInt(document.querySelector(\"#tab-label-reviews-title\") + .outerText.split(' ')[1]); + return res ? res : 0; }} + )(); + """ + ) + except Exception: + result = 0 + + return result + + +@beartype +def shopping_get_rating_as_percentage(page: Page | PseudoPage) -> int: + """Get the rating of the product on the shopping website as a percentage out of 100.""" + try: + rating = page.evaluate( + """ + (() => {{ + ratingPercentage = parseFloat(document.querySelector('.rating-result').title.replace('%', '')); + return ratingPercentage ? ratingPercentage : 0; + }})(); + """ + ) + except Exception: + rating = 0 + + return rating + + +@beartype +def get_query_text(page: Page | PseudoPage, selector: str) -> str: + """Get the text content of the element matching the given selector. + + Note that this function DOES NOT perform downcasing. + """ + try: + result = page.evaluate( + f""" + (() => {{ + try {{ + return document.querySelector('{selector}').textContent; + }} catch (e) {{ + return ''; + }} + }})(); + """ + ) + except Exception: + result = "" + + return result + + +@beartype +def get_query_text_lowercase(page: Page | PseudoPage, selector: str) -> str: + """Get the lowercase text content of the element matching the given selector.""" + return get_query_text(page, selector).lower() + + +@beartype +def reddit_get_post_url(url: str) -> str: + """Get the post url""" + # Url is http://domain/f/subreddit/post_id/... + # get domain, subreddit, post_id + domain = urlparse(url).netloc + tok_url = urlparse(url).path.split("/") + # not a valid post/comment url, return the url as is + if len(tok_url) < 4: + return url + if tok_url[1] != "f": + return url + subreddit = urlparse(url).path.split("/")[2] + post_id = urlparse(url).path.split("/")[3] + scheme = urlparse(url).scheme + post_url = f"{scheme}://{domain}/f/{subreddit}/{post_id}/" + return post_url + + +@beartype +def reddit_get_post_comment_tree(page: Page | PseudoPage) -> Dict[str, Any]: + try: + comment_tree = page.evaluate( + f"""(function buildCommentTree(node, data_level) {{ + let tree = {{ + "username": node.querySelector(".fg-inherit").outerText, + "net_score": parseInt(node.querySelector(".vote__net-score").outerText), + "content": node.querySelector(".comment__content").outerText, + "time": new Date(node.querySelector('.comment__main > header > h1 > span > time').dateTime), + "children": [] + }}; + node.querySelectorAll(".comment").forEach((child) => {{ + if (parseInt(child.getAttribute('data-level')) === data_level+1) {{ + tree['children'].push(buildCommentTree(child, data_level+1)); + }} + }}) + + return tree; +}})(document.querySelector("#main"), 0)""" + ) + except Exception: + comment_tree = {} + + return comment_tree + + +@beartype +def reddit_get_latest_comment_obj_by_username( + page: Page | PseudoPage, username: str +) -> Dict[str, Any]: + try: + comment_tree = reddit_get_post_comment_tree(page) + latest_time = datetime.min.replace(tzinfo=timezone.utc) + comment = {} + + def dfs(node): + nonlocal latest_time + nonlocal comment + if node["username"] == username: + if node["time"] > latest_time: + comment = { + "username": node["username"], + "net_score": node["net_score"], + "content": node["content"], + "time": node["time"], + } + latest_time = node["time"] + + for child in node["children"]: + dfs(child) + + dfs(comment_tree) + + except Exception as e: + comment = {} + return comment + + +@beartype +def reddit_get_latest_comment_content_by_username( + page: Page | PseudoPage, username: str +) -> str: + try: + comment = reddit_get_latest_comment_obj_by_username(page, username) + content = comment["content"] + + except Exception: + content = "" + + return content + + +@beartype +def reddit_get_parent_comment_obj_of_latest_comment_by_username( + page: Page | PseudoPage, username: str +) -> Dict[str, Any]: + try: + comment_tree = reddit_get_post_comment_tree(page) + latest_time = datetime.min.replace(tzinfo=timezone.utc) + comment = {} + + def dfs(node): + nonlocal latest_time + nonlocal comment + for child in node["children"]: + if child["username"] == username: + if child["time"] > latest_time: + comment = { + "username": node["username"], + "net_score": node["net_score"], + "content": node["content"], + "time": node["time"], + } + latest_time = child["time"] + else: + dfs(child) + + dfs(comment_tree) + + except Exception: + comment = {} + return comment + + +@beartype +def reddit_get_parent_comment_username_of_latest_comment_by_username( + page: Page | PseudoPage, username: str +) -> str: + try: + comment = reddit_get_parent_comment_obj_of_latest_comment_by_username( + page, username + ) + username = comment["username"] + + except Exception: + username = "" + + return username + + +@beartype +def gitlab_get_project_memeber_role( + page: Page | PseudoPage, account_name: str +) -> str: + # get the account index + try: + account_idx = page.evaluate( + f"""(() => {{ + const elements = document.querySelectorAll("td[data-label='Account'] span.gl-avatar-labeled-sublabel"); + let index = -1; // Default value if not found + + for(let i = 0; i < elements.length; i++) {{ + if(elements[i].outerText === '@{account_name}') {{ + index = i; + break; + }} + }} + + return index; + }})()""" + ) + + # get the role + role: str = page.evaluate( + f"""(() => {{ + return document.querySelectorAll("td.col-max-role span")[{account_idx}].outerText; + }})()""" + ) + except Exception: + role = "" + + return role + + +@beartype +def llm_fuzzy_match(pred: str, reference: str, question: str) -> float: + """Check whether the prediction matches the reference with GPT-4-turbo""" + messages: list[dict[str, Any]] = [] + # construct the question to ask + message = "Help a teacher to grade the answer of a student given a question. Keep in mind that the student may use different phrasing or wording to answer the question. The goal is to evaluate whether the answer is semantically equivalent to the reference answer.\n" + message += f"question: {question}\n" + message += f"reference answer: {reference}\n" + message += "all the string 'N/A' that you see is a special sequence that means 'not achievable'\n" + message += f"student answer: {pred}\n" + message += "Conclude the judgement by 'correct', 'incorrect', or 'partially correct'. Only output one of these options, and nothing else." + messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": message}, + ] + + logger.info(f'[R] {reference}') + logger.info(f'[P] {pred}') + + response = generate_from_openai_chat_completion( + model="gpt-4-1106-preview", + messages=messages, + temperature=0, + max_tokens=768, + top_p=1.0, + context_length=0, + ).lower() + if "partially correct" in response or "incorrect" in response: + return 0.0 + else: + assert "correct" in response, response + return 1.0 + + +def llm_ua_match(pred: str, reference: str, question: str) -> float: + """Check whether the prediction matches the reference with GPT-4-turbo""" + messages: list[dict[str, Any]] = [] + # construct the question to ask + message = "" + message += f"task: {question}\n" + message += f"actual unachievable reason: {reference}\n" + message += f"reported unachievable reason: {pred}\n" + message += ( + "The task described above is inherently unachievable due to the reason specified under 'actual unachievable reason'. " + "An individual previously attempted this task and was unable to complete it. They provided a reason for their failure, " + "which is listed under 'reported unachievable reason'. Your role is to review both the actual and reported reasons. " + "Determine if the reported reason aligns with the actual reason, even if implicitly. " + "If the stated reason is in line with the actual reason, respond with 'same'. Otherwise, respond with 'different'." + ) + messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": message}, + ] + + response = generate_from_openai_chat_completion( + model="gpt-4-1106-preview", + messages=messages, + temperature=0, + max_tokens=768, + top_p=1.0, + context_length=0, + ).lower() + if "different" in response: + return 0.0 + else: + assert "same" in response + return 1.0 diff --git a/VAB-WebArena-Lite/new/llms_init.py b/VAB-WebArena-Lite/new/llms_init.py new file mode 100644 index 0000000..09dba08 --- /dev/null +++ b/VAB-WebArena-Lite/new/llms_init.py @@ -0,0 +1,23 @@ +"""This module is adapt from https://github.com/zeno-ml/zeno-build""" +try: + from .providers.gemini_utils import generate_from_gemini_completion +except: + print('Google Cloud not set up, skipping import of providers.gemini_utils.generate_from_gemini_completion') + +from .providers.hf_utils import generate_from_huggingface_completion +from .providers.openai_utils import ( + generate_from_openai_chat_completion, + generate_from_openai_completion, +) +from .providers.api_utils import ( + generate_with_api, +) +from .utils import call_llm + +__all__ = [ + "generate_from_openai_completion", + "generate_from_openai_chat_completion", + "generate_from_huggingface_completion", + "generate_from_gemini_completion", + "call_llm", +] diff --git a/VAB-WebArena-Lite/new/lm_config.py b/VAB-WebArena-Lite/new/lm_config.py new file mode 100644 index 0000000..7d73a64 --- /dev/null +++ b/VAB-WebArena-Lite/new/lm_config.py @@ -0,0 +1,57 @@ +"""Config for language models.""" + +from __future__ import annotations + +import argparse +import dataclasses +from dataclasses import dataclass +from typing import Any + + +@dataclass(frozen=True) +class LMConfig: + """A config for a language model. + + Attributes: + provider: The name of the API provider. + model: The name of the model. + model_cls: The Python class corresponding to the model, mostly for + Hugging Face transformers. + tokenizer_cls: The Python class corresponding to the tokenizer, mostly + for Hugging Face transformers. + mode: The mode of the API calls, e.g., "chat" or "generation". + """ + + provider: str + model: str + model_cls: type | None = None + tokenizer_cls: type | None = None + mode: str | None = None + gen_config: dict[str, Any] = dataclasses.field(default_factory=dict) + + +def construct_llm_config(args: argparse.Namespace) -> LMConfig: + llm_config = LMConfig( + provider=args.provider, model=args.model, mode=args.mode + ) + if args.provider in ["openai", "google", "api", "finetune"]: + llm_config.gen_config["temperature"] = args.temperature + llm_config.gen_config["top_p"] = args.top_p + llm_config.gen_config["context_length"] = args.context_length + llm_config.gen_config["max_tokens"] = args.max_tokens + llm_config.gen_config["stop_token"] = args.stop_token + llm_config.gen_config["max_obs_length"] = args.max_obs_length + llm_config.gen_config["max_retry"] = args.max_retry + elif args.provider == "huggingface": + llm_config.gen_config["temperature"] = args.temperature + llm_config.gen_config["top_p"] = args.top_p + llm_config.gen_config["max_new_tokens"] = args.max_tokens + llm_config.gen_config["stop_sequences"] = ( + [args.stop_token] if args.stop_token else None + ) + llm_config.gen_config["max_obs_length"] = args.max_obs_length + llm_config.gen_config["model_endpoint"] = args.model_endpoint + llm_config.gen_config["max_retry"] = args.max_retry + else: + raise NotImplementedError(f"provider {args.provider} not implemented") + return llm_config diff --git a/VAB-WebArena-Lite/new/openai_utils.py b/VAB-WebArena-Lite/new/openai_utils.py new file mode 100644 index 0000000..8374c7a --- /dev/null +++ b/VAB-WebArena-Lite/new/openai_utils.py @@ -0,0 +1,286 @@ +"""Tools to generate from OpenAI prompts. +Adopted from https://github.com/zeno-ml/zeno-build/""" + +import asyncio +import logging +import os +import random +import time +from typing import Any + +import aiolimiter +import openai +from openai import AsyncOpenAI, OpenAI + +base_url = os.environ.get("OPENAI_API_URL") +client = OpenAI(api_key=os.environ["OPENAI_API_KEY"], base_url=base_url) +aclient = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"], base_url=base_url) +from tqdm.asyncio import tqdm_asyncio + + +def retry_with_exponential_backoff( # type: ignore + func, + initial_delay: float = 1, + exponential_base: float = 2, + jitter: bool = True, + max_retries: int = 3, + errors: tuple[Any] = ( + openai.RateLimitError, + openai.BadRequestError, + openai.InternalServerError, + ), +): + """Retry a function with exponential backoff.""" + + def wrapper(*args, **kwargs): # type: ignore + # Initialize variables + num_retries = 0 + delay = initial_delay + + # Loop until a successful response or max_retries is hit or an exception is raised + while True: + try: + + return func(*args, **kwargs) + + # Retry on specified errors + except errors as e: + # Increment retries + num_retries += 1 + + # Check if max retries has been reached + if num_retries > max_retries: + raise Exception( + f"Maximum number of retries ({max_retries}) exceeded." + ) + + # Increment the delay + delay *= exponential_base * (1 + jitter * random.random()) + + # Sleep for the delay + time.sleep(delay) + + # Raise exceptions for any errors not specified + except Exception as e: + raise e + + return wrapper + + +async def _throttled_openai_completion_acreate( + engine: str, + prompt: str, + temperature: float, + max_tokens: int, + top_p: float, + limiter: aiolimiter.AsyncLimiter, +) -> dict[str, Any]: + async with limiter: + for _ in range(3): + try: + return await aclient.completions.create( + engine=engine, + prompt=prompt, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + ) + except openai.RateLimitError: + logging.warning( + "OpenAI API rate limit exceeded. Sleeping for 10 seconds." + ) + await asyncio.sleep(10) + except openai.APIError as e: + logging.warning(f"OpenAI API error: {e}") + break + return {"choices": [{"message": {"content": ""}}]} + + +async def agenerate_from_openai_completion( + prompts: list[str], + engine: str, + temperature: float, + max_tokens: int, + top_p: float, + context_length: int, + requests_per_minute: int = 300, +) -> list[str]: + """Generate from OpenAI Completion API. + + Args: + prompts: list of prompts + temperature: Temperature to use. + max_tokens: Maximum number of tokens to generate. + top_p: Top p to use. + context_length: Length of context to use. + requests_per_minute: Number of requests per minute to allow. + + Returns: + List of generated responses. + """ + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + + limiter = aiolimiter.AsyncLimiter(requests_per_minute) + async_responses = [ + _throttled_openai_completion_acreate( + engine=engine, + prompt=prompt, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + limiter=limiter, + ) + for prompt in prompts + ] + responses = await tqdm_asyncio.gather(*async_responses) + return [x["choices"][0]["text"] for x in responses] + + +@retry_with_exponential_backoff +def generate_from_openai_completion( + prompt: str, + engine: str, + temperature: float, + max_tokens: int, + top_p: float, + context_length: int, + stop_token: str | None = None, +) -> str: + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + + response = client.completions.create( + prompt=prompt, + engine=engine, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop=[stop_token], + ) + answer: str = response["choices"][0]["text"] + return answer + + +async def _throttled_openai_chat_completion_acreate( + model: str, + messages: list[dict[str, str]], + temperature: float, + max_tokens: int, + top_p: float, + limiter: aiolimiter.AsyncLimiter, +) -> dict[str, Any]: + async with limiter: + for _ in range(3): + try: + return await aclient.chat.completions.create( + model=model, + messages=messages, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + ) + except openai.RateLimitError: + logging.warning( + "OpenAI API rate limit exceeded. Sleeping for 10 seconds." + ) + await asyncio.sleep(10) + except asyncio.exceptions.TimeoutError: + logging.warning("OpenAI API timeout. Sleeping for 10 seconds.") + await asyncio.sleep(10) + except openai.APIError as e: + logging.warning(f"OpenAI API error: {e}") + break + return {"choices": [{"message": {"content": ""}}]} + + +async def agenerate_from_openai_chat_completion( + messages_list: list[list[dict[str, str]]], + engine: str, + temperature: float, + max_tokens: int, + top_p: float, + context_length: int, + requests_per_minute: int = 300, +) -> list[str]: + """Generate from OpenAI Chat Completion API. + + Args: + messages_list: list of message list + temperature: Temperature to use. + max_tokens: Maximum number of tokens to generate. + top_p: Top p to use. + context_length: Length of context to use. + requests_per_minute: Number of requests per minute to allow. + + Returns: + List of generated responses. + """ + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + + limiter = aiolimiter.AsyncLimiter(requests_per_minute) + async_responses = [ + _throttled_openai_chat_completion_acreate( + model=engine, + messages=message, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + limiter=limiter, + ) + for message in messages_list + ] + responses = await tqdm_asyncio.gather(*async_responses) + return [x["choices"][0]["message"]["content"] for x in responses] + + +@retry_with_exponential_backoff +def generate_from_openai_chat_completion( + messages: list[dict[str, str]], + model: str, + temperature: float, + max_tokens: int, + top_p: float, + context_length: int, + stop_token: str | None = None, +) -> str: + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + response = client.chat.completions.create( + model=model, + messages=messages, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + ) + answer: str = response.choices[0].message.content + return answer + + +@retry_with_exponential_backoff +# debug only +def fake_generate_from_openai_chat_completion( + messages: list[dict[str, str]], + model: str, + temperature: float, + max_tokens: int, + top_p: float, + context_length: int, + stop_token: str | None = None, +) -> str: + if "OPENAI_API_KEY" not in os.environ: + raise ValueError( + "OPENAI_API_KEY environment variable must be set when using OpenAI API." + ) + + answer = "Let's think step-by-step. This page shows a list of links and buttons. There is a search box with the label 'Search query'. I will click on the search box to type the query. So the action I will perform is \"click [60]\"." + return answer diff --git a/VAB-WebArena-Lite/new/prompt_constructor.py b/VAB-WebArena-Lite/new/prompt_constructor.py new file mode 100644 index 0000000..9cd5a2a --- /dev/null +++ b/VAB-WebArena-Lite/new/prompt_constructor.py @@ -0,0 +1,501 @@ +import json +import re +from pathlib import Path +from typing import Any, TypedDict +from PIL import Image + +from browser_env import Action, ActionParsingError, Trajectory +from browser_env.env_config import URL_MAPPINGS +from browser_env.utils import StateInfo, pil_to_b64, pil_to_vertex +from llms import lm_config +from llms.tokenizers import Tokenizer +from llms.utils import APIInput + + +class Instruction(TypedDict): + """Instruction for constructing prompt""" + + intro: str + examples: list[tuple[str, str]] + template: str + meta_data: dict[str, Any] + + +class PromptConstructor(object): + def __init__( + self, + instruction_path: str | Path, + lm_config: lm_config.LMConfig, + tokenizer: Tokenizer, + ): + self.instruction_path = Path(instruction_path) + self.obs_modality = "text" + self.lm_config = lm_config + instruction = json.load(open(self.instruction_path)) + instruction["examples"] = [tuple(e) for e in instruction["examples"]] + self.instruction: Instruction = instruction + self.tokenizer = tokenizer + + def get_lm_api_input( + self, intro: str, examples: list[tuple[str, str]], current: str + ) -> APIInput: + + """Return the require format for an API""" + message: list[dict[str, str]] | str + if "openai" in self.lm_config.provider: + if self.lm_config.mode == "chat": + message = [{"role": "system", "content": intro}] + for (x, y) in examples: + message.append( + { + "role": "system", + "name": "example_user", + "content": x, + } + ) + message.append( + { + "role": "system", + "name": "example_assistant", + "content": y, + } + ) + message.append({"role": "user", "content": current}) + return message + elif self.lm_config.mode == "completion": + message = f"{intro}\n\n" + message += "Here are a few examples:\n" + for example in examples: + message += f"Observation\n:{example[0]}\n\n" + message += f"Action: {example[1]}\n\n" + message += "Now make prediction given the observation\n\n" + message += f"Observation\n:{current}\n\n" + message += "Action:" + return message + else: + raise ValueError( + f"OpenAI models do not support mode {self.lm_config.mode}" + ) + elif "huggingface" in self.lm_config.provider: + # https://huggingface.co/blog/llama2#how-to-prompt-llama-2 + # https://github.com/facebookresearch/llama/blob/main/llama/generation.py#L320 + if "Llama-2" in self.lm_config.model: + if self.lm_config.mode == "chat": + B_INST, E_INST = "[INST]", "[/INST]" + B_SYS, E_SYS = "<>\n", "\n<>\n\n" + BOS, EOS = "", "" + # adding the system message to be the starting of the first example + examples = [ + ( + B_SYS + intro + E_SYS + examples[0][0], + examples[0][1], + ) + ] + examples[1:] + message = "".join( + [ + f"{BOS}{B_INST} {x.strip()} {E_INST} {y.strip()} {EOS}" + for (x, y) in examples + ] + ) + # add the current observation + message += f"{BOS}{B_INST} {current.strip()} {E_INST} {self.instruction['meta_data'].get('force_prefix', '')}" + + return message + else: + raise ValueError("Only chat mode is supported for Llama-2") + else: + raise ValueError( + f"Huggingface models do not support model_tag {self.lm_config.gen_config['model_tag']}" + ) + else: + raise NotImplementedError( + f"Provider {self.lm_config.provider} not implemented" + ) + + def construct( + self, + trajectory: Trajectory, + intent: str, + meta_data: dict[str, Any] = {}, + ) -> APIInput: + raise NotImplementedError + + def map_url_to_real(self, url: str) -> str: + """Map the urls to their real world counterparts""" + for i, j in URL_MAPPINGS.items(): + if i in url: + url = url.replace(i, j) + return url + + def map_url_to_local(self, url: str) -> str: + """Map the urls to their local counterparts""" + for i, j in URL_MAPPINGS.items(): + if j in url: + url = url.replace(j, i) + # https + if j.replace("http", "https") in url: + url = url.replace(j.replace("http", "https"), i) + return url + + def _extract_action(self, response: str) -> str: + raise NotImplementedError + + def extract_action(self, response: str) -> str: + response = self._extract_action(response) + response = self.map_url_to_local(response) + return response + + +class DirectPromptConstructor(PromptConstructor): + """The agent will direct predict the action""" + + def __init__( + self, + instruction_path: str | Path, + lm_config: lm_config.LMConfig, + tokenizer: Tokenizer, + ): + super().__init__(instruction_path, lm_config, tokenizer) + + def construct( + self, + trajectory: Trajectory, + intent: str, + meta_data: dict[str, Any] = {}, + ) -> APIInput: + """Construct prompt given the trajectory""" + intro = self.instruction["intro"] + examples = self.instruction["examples"] + template = self.instruction["template"] + keywords = self.instruction["meta_data"]["keywords"] + state_info: StateInfo = trajectory[-1] # type: ignore[assignment] + + obs = state_info["observation"][self.obs_modality] + max_obs_length = self.lm_config.gen_config["max_obs_length"] + if max_obs_length: + if self.lm_config.provider == "google": + print("NOTE: This is a Gemini model, so we use characters instead of tokens for max_obs_length.") + obs = obs[:max_obs_length] + else: + obs = self.tokenizer.decode(self.tokenizer.encode(obs)[:max_obs_length]) # type: ignore[arg-type] + + page = state_info["info"]["page"] + url = page.url + previous_action_str = meta_data["action_history"][-1] + + # input x + current = template.format( + objective=intent, + url=self.map_url_to_real(url), + observation=obs, + previous_action=previous_action_str, + ) + + # make sure all keywords are replaced + assert all([f"{{k}}" not in current for k in keywords]) + prompt = self.get_lm_api_input(intro, examples, current) + return prompt + + def _extract_action(self, response: str) -> str: + action_splitter = self.instruction["meta_data"]["action_splitter"] + pattern = rf"{action_splitter}((.|\n)*?){action_splitter}" + match = re.search(pattern, response) + if match: + return match.group(1).strip() + else: + raise ActionParsingError( + f"Cannot parse action from response {response}" + ) + + +class CoTPromptConstructor(PromptConstructor): + """The agent will perform step-by-step reasoning before the answer""" + + def __init__( + self, + instruction_path: str | Path, + lm_config: lm_config.LMConfig, + tokenizer: Tokenizer, + ): + super().__init__(instruction_path, lm_config, tokenizer) + self.answer_phrase = self.instruction["meta_data"]["answer_phrase"] + + def construct( + self, + trajectory: Trajectory, + intent: str, + meta_data: dict[str, Any] = {}, + ) -> APIInput: + intro = self.instruction["intro"] + examples = self.instruction["examples"] + template = self.instruction["template"] + keywords = self.instruction["meta_data"]["keywords"] + state_info: StateInfo = trajectory[-1] # type: ignore[assignment] + + obs = state_info["observation"][self.obs_modality] + max_obs_length = self.lm_config.gen_config["max_obs_length"] + if max_obs_length: + if self.lm_config.provider == "google": + print("NOTE: This is a Gemini model, so we use characters instead of tokens for max_obs_length.") + obs = obs[:max_obs_length] + else: + obs = self.tokenizer.decode(self.tokenizer.encode(obs)[:max_obs_length]) # type: ignore[arg-type] + + page = state_info["info"]["page"] + url = page.url + previous_action_str = meta_data["action_history"][-1] + current = template.format( + objective=intent, + url=self.map_url_to_real(url), + observation=obs, + previous_action=previous_action_str, + ) + + assert all([f"{{k}}" not in current for k in keywords]) + + prompt = self.get_lm_api_input(intro, examples, current) + return prompt + + def _extract_action(self, response: str) -> str: + # find the first occurence of action + action_splitter = self.instruction["meta_data"]["action_splitter"] + pattern = rf"{action_splitter}((.|\n)*?){action_splitter}" + match = re.search(pattern, response) + if match: + return match.group(1).strip() + else: + raise ActionParsingError( + f'Cannot find the answer phrase "{self.answer_phrase}" in "{response}"' + ) + + +class MultimodalCoTPromptConstructor(CoTPromptConstructor): + """The agent will perform step-by-step reasoning before the answer""" + + def __init__( + self, + instruction_path: str | Path, + lm_config: lm_config.LMConfig, + tokenizer: Tokenizer, + ): + super().__init__(instruction_path, lm_config, tokenizer) + self.answer_phrase = self.instruction["meta_data"]["answer_phrase"] + + def construct( + self, + trajectory: Trajectory, + intent: str, + page_screenshot_img: Image.Image, + images: list[Image.Image], + meta_data: dict[str, Any] = {}, + ) -> APIInput: + intro = self.instruction["intro"] + examples = self.instruction["examples"] + template = self.instruction["template"] + keywords = self.instruction["meta_data"]["keywords"] + state_info: StateInfo = trajectory[-1] # type: ignore[assignment] + + obs = state_info["observation"][self.obs_modality] + max_obs_length = self.lm_config.gen_config["max_obs_length"] + if max_obs_length: + if self.lm_config.provider in ["google", "api", "finetune"]: + print("NOTE: This is a Gemini / API model, so we use characters instead of tokens for max_obs_length.") + obs = obs[:max_obs_length] + else: + obs = self.tokenizer.decode(self.tokenizer.encode(obs)[:max_obs_length]) # type: ignore[arg-type] + + page = state_info["info"]["page"] + url = page.url + previous_action_str = meta_data["action_history"][-1] + current = template.format( + objective=intent, + url=self.map_url_to_real(url), + observation=obs, + previous_action=previous_action_str, + ) + + assert all([f"{{k}}" not in current for k in keywords]) + + # TODO: for your finetune model, you can config you prompt here + if self.lm_config.provider == "finetune": + current = "" + traj = trajectory[1::2] + for rnd, tra in enumerate(traj): + tar = '** screenshot **' if rnd > 0 else intent + raw = tra["raw_prediction"] + current += f"Round {rnd}\n\n<|user|>\n\n** node_info **\n\n{tar}\n\n<|assistant|>\n{raw}\n\n""" + + current += f"Round {len(traj)}\n\n<|user|>\n\n{obs}\n\n{'** screenshot **' if len(traj) > 0 else intent}\n" + + prompt = self.get_lm_api_input( + intro, examples, current, page_screenshot_img, images + ) + return prompt + + def get_lm_api_input( + self, + intro: str, + examples: list[tuple[str, str, str]], + current: str, + page_screenshot_img: Image.Image, + images: list[Image.Image], + ) -> APIInput: + """Return the require format for an API""" + message: list[dict[str, str]] | str | list[str | Image.Image] + if "openai" in self.lm_config.provider: + if self.lm_config.mode == "chat": + message = [ + { + "role": "system", + "content": [{"type": "text", "text": intro}], + } + ] + for (x, y, z) in examples: + example_img = Image.open(z) + message.append( + { + "role": "system", + "name": "example_user", + "content": [ + {"type": "text", "text": x}, + { + "type": "text", + "text": "IMAGES: (1) current page screenshot", + }, + { + "type": "image_url", + "image_url": { + "url": pil_to_b64(example_img) + }, + }, + ], + } + ) + message.append( + { + "role": "system", + "name": "example_assistant", + "content": [{"type": "text", "text": y}], + } + ) + + # Encode images and page_screenshot_img as base64 strings. + current_prompt = current + content = [ + { + "type": "text", + "text": "IMAGES: (1) current page screenshot", + }, + { + "type": "image_url", + "image_url": {"url": pil_to_b64(page_screenshot_img)}, + }, + ] + for image_i, image in enumerate(images): + content.extend( + [ + { + "type": "text", + "text": f"({image_i+2}) input image {image_i+1}", + }, + { + "type": "image_url", + "image_url": {"url": pil_to_b64(image)}, + }, + ] + ) + content = [{"type": "text", "text": current_prompt}] + content + + message.append({"role": "user", "content": content}) + return message + else: + raise ValueError( + f"GPT-4V models do not support mode {self.lm_config.mode}" + ) + elif "google" in self.lm_config.provider: + if self.lm_config.mode == "completion": + message = [ + intro, + "Here are a few examples:", + ] + for (x, y, z) in examples: + example_img = Image.open(z) + message.append(f"Observation\n:{x}\n") + message.extend( + [ + "IMAGES:", + "(1) current page screenshot:", + pil_to_vertex(example_img), + ] + ) + message.append(f"Action: {y}") + message.append("Now make prediction given the observation") + message.append(f"Observation\n:{current}\n") + message.extend( + [ + "IMAGES:", + "(1) current page screenshot:", + pil_to_vertex(page_screenshot_img), + ] + ) + for image_i, image in enumerate(images): + message.extend( + [ + f"({image_i+2}) input image {image_i+1}", + pil_to_vertex(image), + ] + ) + message.append("Action:") + return message + else: + raise ValueError( + f"Gemini models do not support mode {self.lm_config.mode}" + ) + elif self.lm_config.provider in ["api", "finetune"]: + message = [ + { + "role": "system", + "content": intro, + } + ] + + # we keep few-shot here, but remove the image corresponding to the current page. + for (x, y, _) in examples: + message.append({ + "role": "user", + "content": [ + { "type": "text", "text": x }, + { "type": "text", "text": "IMAGES: (1) current page screenshot\n\n** Screenshot **\n" }, + ], + }) + message.append({ + "role": "assistant", + "content": y, + }) + + + # TODO: Encode images and page_screenshot_img as base64 strings, we only keep screenshot of current page. + current_prompt = current + content = [] + + if self.lm_config.provider != "finetune": + content.append({ + "type": "text", + "text": "IMAGES: (1) current page screenshot", + }) + + if "text" not in self.lm_config.model: + content.append({ + "type": "image_url", + "image_url": {"url": pil_to_b64(page_screenshot_img)}, + }) + + content = [{"type": "text", "text": current_prompt}] + content + + message.append({"role": "user", "content": content}) + return message + + else: + raise NotImplementedError( + f"Provider {self.lm_config.provider} not implemented" + ) diff --git a/VAB-WebArena-Lite/new/run.py b/VAB-WebArena-Lite/new/run.py new file mode 100644 index 0000000..e406e2c --- /dev/null +++ b/VAB-WebArena-Lite/new/run.py @@ -0,0 +1,562 @@ +"""Script to run end-to-end evaluation on the benchmark. + +Modified from https://github.com/web-arena-x/webarena/blob/main/run.py. +""" +import argparse +import glob +import json +import logging +import os +import random +import subprocess +import tempfile +import time +from pathlib import Path +from typing import List + +import openai +import requests +import torch +from PIL import Image + +from agent import ( + PromptAgent, + construct_agent, +) +from agent.prompts import * +from browser_env import ( + Action, + ActionTypes, + ScriptBrowserEnv, + StateInfo, + Trajectory, + create_stop_action, +) +from browser_env.actions import is_equivalent +from browser_env.auto_login import get_site_comb_from_filepath +from browser_env.helper_functions import ( + RenderHelper, + get_action_description, +) +from evaluation_harness import evaluator_router, image_utils + +DATASET = os.environ["DATASET"] + +LOG_FOLDER = "log_files" +Path(LOG_FOLDER).mkdir(parents=True, exist_ok=True) +LOG_FILE_NAME = f"{LOG_FOLDER}/log_{time.strftime('%Y%m%d%H%M%S', time.localtime())}_{random.randint(0, 10000)}.log" + +logger = logging.getLogger("logger") +logger.setLevel(logging.INFO) + +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.DEBUG) +logger.addHandler(console_handler) + +file_handler = logging.FileHandler(LOG_FILE_NAME) +file_handler.setLevel(logging.DEBUG) +logger.addHandler(file_handler) + +# Set the log format +formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") +console_handler.setFormatter(formatter) +file_handler.setFormatter(formatter) + + +def config() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Run end-to-end evaluation on the benchmark" + ) + parser.add_argument( + "--render", action="store_true", help="Render the browser" + ) + + parser.add_argument( + "--slow_mo", + type=int, + default=0, + help="Slow down the browser by the specified amount", + ) + parser.add_argument( + "--action_set_tag", default="id_accessibility_tree", help="Action type" + ) + parser.add_argument( + "--observation_type", + choices=[ + "accessibility_tree", + "accessibility_tree_with_captioner", + "html", + "image", + "image_som", + ], + default="accessibility_tree", + help="Observation type", + ) + parser.add_argument( + "--current_viewport_only", + action="store_true", + help="Only use the current viewport for the observation", + ) + parser.add_argument("--viewport_width", type=int, default=1280) + parser.add_argument("--viewport_height", type=int, default=2048) + parser.add_argument("--save_trace_enabled", action="store_true") + parser.add_argument("--sleep_after_execution", type=float, default=0.0) + + parser.add_argument("--max_steps", type=int, default=30) + + # agent config + parser.add_argument("--agent_type", type=str, default="prompt") + parser.add_argument( + "--instruction_path", + type=str, + default="agents/prompts/state_action_agent.json", + ) + parser.add_argument( + "--parsing_failure_th", + help="When consecutive parsing failures exceed this threshold, the agent will terminate early.", + type=int, + default=3, + ) + parser.add_argument( + "--repeating_action_failure_th", + help="When consecutive repeated actions exceed this threshold, the agent will terminate early.", + type=int, + default=5, + ) + + parser.add_argument("--test_config_base_dir", type=str) + + parser.add_argument( + "--eval_captioning_model_device", + type=str, + default="cpu", + choices=["cpu", "cuda"], + help="Device to run eval captioning model on. By default, runs it on CPU.", + ) + parser.add_argument( + "--eval_captioning_model", + type=str, + default="Salesforce/blip2-flan-t5-xl", + choices=["Salesforce/blip2-flan-t5-xl"], + help="Captioning backbone for VQA-type evals.", + ) + parser.add_argument( + "--captioning_model", + type=str, + default="Salesforce/blip2-flan-t5-xl", + choices=["Salesforce/blip2-flan-t5-xl", "llava-hf/llava-1.5-7b-hf"], + help="Captioning backbone for accessibility tree alt text.", + ) + + # lm config + parser.add_argument("--provider", type=str, default="openai") + parser.add_argument("--model", type=str, default="gpt-3.5-turbo-0613") + parser.add_argument("--mode", type=str, default="chat") + parser.add_argument("--temperature", type=float, default=1.0) + parser.add_argument("--top_p", type=float, default=0.9) + parser.add_argument("--context_length", type=int, default=0) + parser.add_argument("--max_tokens", type=int, default=384) + parser.add_argument("--stop_token", type=str, default=None) + parser.add_argument( + "--max_retry", + type=int, + help="max retry times to perform generations when parsing fails", + default=1, + ) + parser.add_argument( + "--max_obs_length", + type=int, + help="when not zero, will truncate the observation to this length before feeding to the model", + default=3840, + ) + + # example config + parser.add_argument("--test_start_idx", type=int, default=0) + parser.add_argument("--test_end_idx", type=int, default=910) + + # logging related + parser.add_argument("--result_dir", type=str, default="") + args = parser.parse_args() + + # check the whether the action space is compatible with the observation space + if ( + args.action_set_tag == "id_accessibility_tree" + and args.observation_type + not in [ + "accessibility_tree", + "accessibility_tree_with_captioner", + "image_som", + ] + ): + raise ValueError( + f"Action type {args.action_set_tag} is incompatible with the observation type {args.observation_type}" + ) + + return args + + +def early_stop( + trajectory: Trajectory, max_steps: int, thresholds: dict[str, int] +) -> tuple[bool, str]: + """Check whether need to stop early""" + + # reach the max step + num_steps = (len(trajectory) - 1) / 2 + if num_steps >= max_steps: + return True, f"Reach max steps {max_steps}" + + last_k_actions: list[Action] + action_seq: list[Action] + + # Case: parsing failure for k times + k = thresholds["parsing_failure"] + last_k_actions = trajectory[1::2][-k:] # type: ignore[assignment] + if len(last_k_actions) >= k: + if all( + [ + action["action_type"] == ActionTypes.NONE + for action in last_k_actions + ] + ): + return True, f"Failed to parse actions for {k} times" + + # Case: same action for k times + k = thresholds["repeating_action"] + last_k_actions = trajectory[1::2][-k:] # type: ignore[assignment] + action_seq = trajectory[1::2] # type: ignore[assignment] + + if len(action_seq) == 0: + return False, "" + + last_action: Action = action_seq[-1] + + if last_action["action_type"] != ActionTypes.TYPE: + if len(last_k_actions) >= k: + if all( + [ + is_equivalent(action, last_action) + for action in last_k_actions + ] + ): + return True, f"Same action for {k} times" + + else: + # check the action sequence + if ( + sum([is_equivalent(action, last_action) for action in action_seq]) + >= k + ): + return True, f"Same typing action for {k} times" + + return False, "" + + +def update_action_history(path: str, task_id: int, actions: List[str], score: float=-0.1): + obj = { + "task_id": task_id, + "score": score, + "actions": actions + } + json.dump(obj, open(path, "w"), indent=4) + + +def test( + args: argparse.Namespace, + config_file_list: list[str] +) -> None: + scores = [] + max_steps = args.max_steps + + early_stop_thresholds = { + "parsing_failure": args.parsing_failure_th, + "repeating_action": args.repeating_action_failure_th, + } + + if args.observation_type in [ + "accessibility_tree_with_captioner", + # "image_som", + ]: + device = torch.device("cuda") if torch.cuda.is_available() else "cpu" + dtype = torch.float16 if torch.cuda.is_available() else torch.float32 + caption_image_fn = image_utils.get_captioning_fn( + device, dtype, args.captioning_model + ) + else: + caption_image_fn = None + + # Load a (possibly different) captioning model for running VQA evals. + if DATASET == 'visualwebarena': + if ( + caption_image_fn + and args.eval_captioning_model == args.captioning_model + ): + eval_caption_image_fn = caption_image_fn + else: + eval_caption_image_fn = image_utils.get_captioning_fn( + args.eval_captioning_model_device, + torch.float16 + if ( + torch.cuda.is_available() + and args.eval_captioning_model_device == "cuda" + ) + else torch.float32, + args.eval_captioning_model, + ) + else: + caption_image_fn = None + eval_caption_image_fn = None + + agent = construct_agent( + args, + captioning_fn=caption_image_fn + if args.observation_type == "accessibility_tree_with_captioner" + else None, + ) # NOTE: captioning_fn here is used for captioning input images. + + env = ScriptBrowserEnv( + headless=not args.render, + slow_mo=args.slow_mo, + observation_type=args.observation_type, + current_viewport_only=args.current_viewport_only, + viewport_size={ + "width": args.viewport_width, + "height": args.viewport_height, + }, + save_trace_enabled=args.save_trace_enabled, + sleep_after_execution=args.sleep_after_execution, + # NOTE: captioning_fn here is used for LLM + captioning baselines. + # This can be different from the captioning model used for evals. + captioning_fn=caption_image_fn, + ) + + for config_file in config_file_list: + try: + render_helper = RenderHelper( + config_file, args.result_dir, args.action_set_tag + ) + + # Load task. + with open(config_file) as f: + _c = json.load(f) + intent = _c["intent"] + task_id = _c["task_id"] + image_paths = _c.get("image", None) + images = [] + + # automatically login + if _c["storage_state"]: + cookie_file_name = os.path.basename(_c["storage_state"]) + comb = get_site_comb_from_filepath(cookie_file_name) + temp_dir = tempfile.mkdtemp() + # subprocess to renew the cookie + subprocess.run( + [ + "python", + "browser_env/auto_login.py", + "--auth_folder", + temp_dir, + "--site_list", + *comb, + ] + ) + _c["storage_state"] = f"{temp_dir}/{cookie_file_name}" + assert os.path.exists(_c["storage_state"]) + # update the config file + config_file = f"{temp_dir}/{os.path.basename(config_file)}" + with open(config_file, "w") as f: + json.dump(_c, f) + + # Load input images for the task, if any. + if image_paths is not None: + if isinstance(image_paths, str): + image_paths = [image_paths] + for image_path in image_paths: + # Load image either from the web or from a local path. + if image_path.startswith("http"): + input_image = Image.open(requests.get(image_path, stream=True).raw) + else: + input_image = Image.open(image_path) + + images.append(input_image) + + logger.info(f"[Config file]: {config_file}") + logger.info(f"[Intent]: {intent}") + + agent.reset(config_file) + trajectory: Trajectory = [] + obs, info = env.reset(options={"config_file": config_file}) + state_info: StateInfo = {"observation": obs, "info": info} + trajectory.append(state_info) + + meta_data = {"action_history": ["None"]} + out_path = os.path.join(args.result_dir, "actions", f"{task_id}.json") + actions = [] + + while True: + update_action_history(out_path, task_id, actions=actions) + + early_stop_flag, stop_info = early_stop( + trajectory, max_steps, early_stop_thresholds + ) + + if early_stop_flag: + action = create_stop_action(f"Early stop: {stop_info}") + else: + try: + action = agent.next_action( + trajectory, + intent, + images=images, + meta_data=meta_data, + ) + except ValueError as e: + # get the error message + action = create_stop_action(f"ERROR: {str(e)}") + + trajectory.append(action) + + action_str = get_action_description( + action, + state_info["info"]["observation_metadata"], + action_set_tag=args.action_set_tag, + prompt_constructor=agent.prompt_constructor + if isinstance(agent, PromptAgent) + else None, + ) + render_helper.render( + action, state_info, meta_data, args.render_screenshot + ) + meta_data["action_history"].append(action_str) + actions.append(action_str) + print(action_str) + + if action["action_type"] == ActionTypes.STOP: + break + + obs, _, terminated, _, info = env.step(action) + state_info = {"observation": obs, "info": info} + trajectory.append(state_info) + + if terminated: + # add a action place holder + trajectory.append(create_stop_action("")) + break + + # NOTE: eval_caption_image_fn is used for running eval_vqa functions. + evaluator = evaluator_router( + config_file, captioning_fn=eval_caption_image_fn + ) + score = evaluator( + trajectory=trajectory, + config_file=config_file, + page=env.page + ) + + update_action_history(out_path, task_id, actions=actions, score=score) + scores.append(score) + + if score == 1: + logger.info(f"[Result] (PASS) {config_file}") + else: + logger.info(f"[Result] (FAIL) {config_file}") + + if args.save_trace_enabled: + env.save_trace( + Path(args.result_dir) / "traces" / f"{task_id}.zip" + ) + except openai.OpenAIError as e: + logger.info(f"[OpenAI Error] {repr(e)}") + except Exception as e: + logger.info(f"[Unhandled Error] {repr(e)}]") + import traceback + + # write to error file + with open(Path(args.result_dir) / "error.txt", "a") as f: + f.write(f"[Config file]: {config_file}\n") + f.write(f"[Unhandled Error] {repr(e)}\n") + f.write(traceback.format_exc()) # write stack trace to file + + render_helper.close() + + env.close() + if len(scores): + logger.info(f"Average score: {sum(scores) / len(scores)}") + + +def prepare(args: argparse.Namespace) -> None: + # convert prompt python files to json + from agent.prompts import to_json + + to_json.run() + + # prepare result dir + result_dir = args.result_dir + if not result_dir: + result_dir = ( + f"cache/results_{time.strftime('%Y%m%d%H%M%S', time.localtime())}" + ) + if not Path(result_dir).exists(): + Path(result_dir).mkdir(parents=True, exist_ok=True) + args.result_dir = result_dir + logger.info(f"Create result dir: {result_dir}") + + if not (Path(result_dir) / "traces").exists(): + (Path(result_dir) / "traces").mkdir(parents=True) + + os.makedirs(os.path.join(result_dir, "actions"), exist_ok=True) + + # log the log file + with open(os.path.join(result_dir, "log_files.txt"), "a+") as f: + f.write(f"{LOG_FILE_NAME}\n") + + +def get_unfinished(config_files: list[str], result_dir: str) -> list[str]: + result_files = glob.glob(f"{result_dir}/*.html") + task_ids = [ + os.path.basename(f).split(".")[0].split("_")[1] for f in result_files + ] + unfinished_configs = [] + for config_file in config_files: + task_id = os.path.basename(config_file).split(".")[0] + try: + with open(f"{result_dir}/actions/{task_id}.json", "r") as f: + jd = json.load(f) + except: + jd = {} + if task_id not in task_ids or jd.get('score', -1) < 0: + unfinished_configs.append(config_file) + return unfinished_configs + + +def dump_config(args: argparse.Namespace) -> None: + config_file = Path(args.result_dir) / "config.json" + if not config_file.exists(): + with open(config_file, "w") as f: + json.dump(vars(args), f, indent=4) + logger.info(f"Dump config to {config_file}") + + +if __name__ == "__main__": + os.environ["TOKENIZERS_PARALLELISM"] = "false" + + args = config() + args.sleep_after_execution = 2.5 + prepare(args) + + test_config_base_dir = args.test_config_base_dir + + test_file_list = [] + st_idx = args.test_start_idx + ed_idx = args.test_end_idx + for i in range(st_idx, ed_idx): + test_file_list.append(os.path.join(test_config_base_dir, f"{i}.json")) + test_file_list = get_unfinished(test_file_list, args.result_dir) + print(f"Total {len(test_file_list)} tasks left") + args.render = False + args.render_screenshot = True + args.save_trace_enabled = True + + args.current_viewport_only = True + dump_config(args) + + test(args, test_file_list) diff --git a/VAB-WebArena-Lite/new/test_webarena_lite.raw.json b/VAB-WebArena-Lite/new/test_webarena_lite.raw.json new file mode 100644 index 0000000..c77225a --- /dev/null +++ b/VAB-WebArena-Lite/new/test_webarena_lite.raw.json @@ -0,0 +1,5838 @@ +[ + { + "sites": [ + "shopping_admin" + ], + "task_id": 0, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "What are the top-{{n}} best-selling product in {{period}}", + "instantiation_dict": { + "n": 3, + "period": "Jan 2023" + }, + "intent": "What are the top-3 best-selling product in Jan 2023", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Impulse Duffle", + "Overnight Duffle", + "Hawkeye Yoga Short-32-Blue" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Impulse Duffle, Overnight Duffle, Hawkeye Yoga Short-32-Blue" + }, + "intent_template_id": 279, + "old_task_id": 4 + }, + { + "sites": [ + "map" + ], + "task_id": 1, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Tell me the full address of all {{airport_type}} that are within a driving distance of {{radius}} to {{start}}", + "instantiation_dict": { + "airport_type": "international airports", + "start": "Carnegie Mellon University", + "radius": "50 km" + }, + "intent": "Tell me the full address of all international airports that are within a driving distance of 50 km to Carnegie Mellon University", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Pittsburgh International Airport, Southern Beltway, Findlay Township, Allegheny County, 15231, United States" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Pittsburgh International Airport People Movers, Airport Boulevard, Findlay Township, Allegheny County, Pennsylvania, 15231, United States" + }, + "intent_template_id": 79, + "old_task_id": 7 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 2, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Tell me the the number of reviews that our store received by far that mention term \"{{term}}\"", + "instantiation_dict": { + "term": "best" + }, + "intent": "Tell me the the number of reviews that our store received by far that mention term \"best\"", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "2" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "2" + }, + "intent_template_id": 288, + "old_task_id": 15 + }, + { + "sites": [ + "map" + ], + "task_id": 3, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Compare the difference in time for walking and driving route from {{start}} to {{end}}", + "instantiation_dict": { + "start": "Randyland", + "end": "Carnegie Mellon University" + }, + "intent": "Compare the difference in time for walking and driving route from Randyland to Carnegie Mellon University", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "driving: 13min", + "walking: 1h 45min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "driving: 13min, walking: 1h 45min." + }, + "intent_template_id": 73, + "old_task_id": 20 + }, + { + "sites": [ + "shopping" + ], + "task_id": 4, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__/3-pack-samsung-galaxy-s6-screen-protector-nearpow-tempered-glass-screen-protector-with-9h-hardness-crystal-clear-easy-bubble-free-installation-scratch-resist.html", + "geolocation": null, + "intent_template": "List out reviewers, if exist, who mention about {{description}}", + "instantiation_dict": { + "description": "good fingerprint resistant" + }, + "intent": "List out reviewers, if exist, who mention about good fingerprint resistant", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Rachel", + "T. Gannon" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Rachel, T. Gannon, " + }, + "intent_template_id": 222, + "old_task_id": 23 + }, + { + "sites": [ + "reddit" + ], + "task_id": 5, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Tell me the count of comments that have received more downvotes than upvotes for the user who made the latest post on the {{forum}} forum.", + "instantiation_dict": { + "forum": "Showerthoughts" + }, + "intent": "Tell me the count of comments that have received more downvotes than upvotes for the user who made the latest post on the Showerthoughts forum.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "0" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "0" + }, + "intent_template_id": 33, + "old_task_id": 27 + }, + { + "sites": [ + "map" + ], + "task_id": 6, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "I will arrive {{place}} soon. Provide the name of a {{target1}} in the vicinity, if available. Then, tell me the {{information}} to {{target2}} from the hotel.", + "instantiation_dict": { + "place": "Pittsburgh Airport", + "target1": "Hilton hotel", + "information": "the shortest walking distance", + "target2": "a supermarket" + }, + "intent": "I will arrive Pittsburgh Airport soon. Provide the name of a Hilton hotel in the vicinity, if available. Then, tell me the the shortest walking distance to a supermarket from the hotel.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "DoubleTree by Hilton Hotel Pittsburgh Airport", + "1.4km" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "DoubleTree by Hilton Hotel Pittsburgh Airport Distance: 1.4km" + }, + "intent_template_id": 78, + "old_task_id": 33 + }, + { + "sites": [ + "map" + ], + "task_id": 7, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Check if the {{place}} in pittsburgh can be reached in one hour by car from {{location}}", + "instantiation_dict": { + "place": "police station", + "location": "gates building at CMU" + }, + "intent": "Check if the police station in pittsburgh can be reached in one hour by car from gates building at CMU", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Yes" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Yes" + }, + "intent_template_id": 77, + "old_task_id": 37 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 8, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "List the top {{n}} search terms in my store", + "instantiation_dict": { + "n": "3" + }, + "intent": "List the top 3 search terms in my store", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "hollister", + "Joust Bag", + "nike" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "hollister, Joust Bag, nike" + }, + "intent_template_id": 285, + "old_task_id": 43 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 9, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Check out my todos", + "instantiation_dict": {}, + "intent": "Check out my todos", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/dashboard/todos", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 303, + "old_task_id": 44 + }, + { + "sites": [ + "shopping" + ], + "task_id": 10, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Today is 6/12/2023. Tell me how many fulfilled orders I have {{period}}, and the total amount of money I spent.", + "instantiation_dict": { + "period": "over the past three days" + }, + "intent": "Today is 6/12/2023. Tell me how many fulfilled orders I have over the past three days, and the total amount of money I spent.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "0 order", + "$0 total spend" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "0 order, $0 total spend" + }, + "intent_template_id": 197, + "old_task_id": 48 + }, + { + "sites": [ + "map" + ], + "task_id": 11, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "How long does it take to walk from {{start}} to {{end}}?", + "instantiation_dict": { + "start": "Carnegie Museum of Art", + "end": "a library at CMU" + }, + "intent": "How long does it take to walk from Carnegie Museum of Art to a library at CMU?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "11 min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "11 min" + }, + "intent_template_id": 68, + "old_task_id": 56 + }, + { + "sites": [ + "map" + ], + "task_id": 12, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Tell me the closest {{place1}}(s) to {{place2}}", + "instantiation_dict": { + "place1": "cafe", + "place2": "CMU Hunt library" + }, + "intent": "Tell me the closest cafe(s) to CMU Hunt library", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "De Fer Coffee & Tea" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "De Fer Coffee & Tea" + }, + "intent_template_id": 69, + "old_task_id": 58 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 13, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Which customer has completed the {{quantifier}} number of orders in the entire history?", + "instantiation_dict": { + "quantifier": "fifth most" + }, + "intent": "Which customer has completed the fifth most number of orders in the entire history?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Matt Baker" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Matt Baker" + }, + "intent_template_id": 276, + "old_task_id": 65 + }, + { + "sites": [ + "reddit" + ], + "task_id": 14, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Among the top {{number}} post in \"{{subreddit}}\" forum, {{description}}", + "instantiation_dict": { + "number": 10, + "subreddit": "books", + "description": "is there any post talks about supporting local book stores? If so, tell me the organizations involved" + }, + "intent": "Among the top 10 post in \"books\" forum, is there any post talks about supporting local book stores? If so, tell me the organizations involved", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "bookshop.org" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "bookshop.org" + }, + "intent_template_id": 17, + "old_task_id": 69 + }, + { + "sites": [ + "map" + ], + "task_id": 15, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What is the zip code of {{place}}?", + "instantiation_dict": { + "place": "Chatham University" + }, + "intent": "What is the zip code of Chatham University?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "15232" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "15232" + }, + "intent_template_id": 70, + "old_task_id": 71 + }, + { + "sites": [ + "map" + ], + "task_id": 16, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Given the following locations, {{place_list}}, what would be the optimal route to travel through them all in order to minimize total travel time? Please note the journey begins at the first place listed.", + "instantiation_dict": { + "place_list": [ + "Massachusetts Institute of Technology", + "Harvard University", + "Boston Logan International Airport" + ] + }, + "intent": "Given the following locations, ['Massachusetts Institute of Technology', 'Harvard University', 'Boston Logan International Airport'], what would be the optimal route to travel through them all in order to minimize total travel time? Please note the journey begins at the first place listed.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "The order is Massachusetts Institute of Technology, Harvard University, Boston Logan International Airport" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Massachusetts Institute of Technology, Harvard University, Boston Logan International Airport" + }, + "intent_template_id": 65, + "old_task_id": 75 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 17, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "What is the total count of {{status}} reviews amongst all the reviews?", + "instantiation_dict": { + "status": "Pending" + }, + "intent": "What is the total count of Pending reviews amongst all the reviews?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "5" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "5" + }, + "intent_template_id": 277, + "old_task_id": 77 + }, + { + "sites": [ + "map" + ], + "task_id": 18, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What is the duration required to first walk from {{place_A}} to {{place_B}}, and then drive to {{place_C}}?", + "instantiation_dict": { + "place_A": "Massachusetts Institute of Technology", + "place_B": "Harvard University", + "place_C": "Boston Logan International Airport" + }, + "intent": "What is the duration required to first walk from Massachusetts Institute of Technology to Harvard University, and then drive to Boston Logan International Airport?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "64 min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "63 min" + }, + "intent_template_id": 72, + "old_task_id": 82 + }, + { + "sites": [ + "map" + ], + "task_id": 19, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "From my stay at {{hotel}}, what's the estimated driving time to reach {{place}}?", + "instantiation_dict": { + "hotel": "Homewood Suites Southpointe", + "place": "PPG Paints Arena" + }, + "intent": "From my stay at Homewood Suites Southpointe, what's the estimated driving time to reach PPG Paints Arena?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "34 minutes" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "34 minutes" + }, + "intent_template_id": 64, + "old_task_id": 88 + }, + { + "sites": [ + "map" + ], + "task_id": 20, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Which US states border {{state}}?", + "instantiation_dict": { + "state": "New Hampshire" + }, + "intent": "Which US states border New Hampshire?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Massachusetts", + "Vermont", + "Maine" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Massachusetts, Vermont, Maine" + }, + "intent_template_id": 67, + "old_task_id": 93 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 21, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Telll me the grand total of invoice {{id}}.", + "instantiation_dict": { + "id": "000000002" + }, + "intent": "Telll me the grand total of invoice 000000002.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "39.64" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "$39.64" + }, + "intent_template_id": 274, + "old_task_id": 95 + }, + { + "sites": [ + "shopping" + ], + "task_id": 22, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Tell me the status of my latest order and when will it arrive", + "instantiation_dict": {}, + "intent": "Tell me the status of my latest order and when will it arrive", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "The last order was canceled. It will never arrive." + ] + }, + "reference_url": "", + "program_html": [], + "reference_answer_raw_annotation": "The last order was canceled. It will never arrive.", + "string_note": "" + }, + "intent_template_id": 193, + "old_task_id": 96 + }, + { + "sites": [ + "map", + "wikipedia" + ], + "task_id": 23, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Tell me the distance to drive from Carnegie Mellon University to the top computer science school in massachusetts", + "instantiation_dict": {}, + "intent": "Tell me the distance to drive from Carnegie Mellon University to the top computer science school in massachusetts", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "914km" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "914 km" + }, + "intent_template_id": 120, + "old_task_id": 97 + }, + { + "sites": [ + "map" + ], + "task_id": 24, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Where is the nearest {{places}} to {{start}}, and what is the walking distance to it?", + "instantiation_dict": { + "places": "tea cafe", + "start": "University of Pittsburgh" + }, + "intent": "Where is the nearest tea cafe to University of Pittsburgh, and what is the walking distance to it?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Fuku Tea", + "3716", + "Forbes Avenue", + "Central Oakland", + "Pittsburgh", + "653m" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Fuku Tea, 3716, Forbes Avenue, Oakland, Central Oakland, Pittsburgh, Allegheny County, Pennsylvania, 15213, United States\n653m" + }, + "intent_template_id": 66, + "old_task_id": 98 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 25, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Display the list of issues in the {{repo}} repository that have labels related to {{label}}", + "instantiation_dict": { + "label": "questions", + "repo": "kkroening/ffmpeg-python" + }, + "intent": "Display the list of issues in the kkroening/ffmpeg-python repository that have labels related to questions", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/kkroening/ffmpeg-python/-/issues/?sort=created_date&state=opened&label_name%5B%5D=question&first_page_size=20", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 349, + "old_task_id": 103 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 26, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Presents the monthly count of successful orders {{period}} in MM:COUNT format", + "instantiation_dict": { + "period": "from Jan to December 2022" + }, + "intent": "Presents the monthly count of successful orders from Jan to December 2022 in MM:COUNT format", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "01:11", + "02:16", + "03:14", + "04:8", + "05:8", + "06:13", + "07:9", + "08:8", + "09:10", + "10:4", + "11:5", + "12:10" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "01:11 02:16 03:14 04:8 05:8 06:13 07:9 08:8 09:10 10:4 11:5 12:10" + }, + "intent_template_id": 270, + "old_task_id": 109 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 27, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Show me the name of the customers who have expressed dissatisfaction with {{product}}", + "instantiation_dict": { + "product": "Chloe tank" + }, + "intent": "Show me the name of the customers who have expressed dissatisfaction with Chloe tank", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "There is no negative review for Chloe tank", + "reference_answer_raw_annotation": "" + }, + "intent_template_id": 245, + "old_task_id": 115 + }, + { + "sites": [ + "shopping" + ], + "task_id": 28, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What is the date when I made my first purchase on this site?", + "instantiation_dict": {}, + "intent": "What is the date when I made my first purchase on this site?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "3/2/22" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "3/2/22" + }, + "intent_template_id": 161, + "old_task_id": 117 + }, + { + "sites": [ + "shopping" + ], + "task_id": 29, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "I have jaw bruxism problem, show me something that could alleviate the problem.", + "instantiation_dict": {}, + "intent": "I have jaw bruxism problem, show me something that could alleviate the problem.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": null, + "program_html": [ + { + "url": "last", + "locator": "", + "required_contents": { + "must_include": [ + "jaw bruxism", + "mouth guard" + ] + } + } + ] + }, + "intent_template_id": 151, + "old_task_id": 118 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 30, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Tell me the reasons why customers like {{product}}", + "instantiation_dict": { + "product": "Circe's products" + }, + "intent": "Tell me the reasons why customers like Circe's products", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Warm and comfortable. True to size." + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Warm and comfortable. True to size." + }, + "intent_template_id": 250, + "old_task_id": 123 + }, + { + "sites": [ + "shopping" + ], + "task_id": 31, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What is the price range of {{product}} in the One Stop Market?", + "instantiation_dict": { + "product": "teeth grinding mouth guard" + }, + "intent": "What is the price range of teeth grinding mouth guard in the One Stop Market?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "1.46", + "85" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "$1.46 - $85" + }, + "intent_template_id": 159, + "old_task_id": 125 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 32, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "What brands appear most frequently among the top search terms?", + "instantiation_dict": {}, + "intent": "What brands appear most frequently among the top search terms?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Hollister" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Hollister" + }, + "intent_template_id": 1001, + "old_task_id": 127 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 33, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "What's the total number of items sold in the most recent {{k}} orders?", + "instantiation_dict": { + "k": "7" + }, + "intent": "What's the total number of items sold in the most recent 7 orders?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "25" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "25" + }, + "intent_template_id": 1002, + "old_task_id": 131 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 34, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "How many commits did {{user}} make to {{repo}} on {{date}}?", + "instantiation_dict": { + "user": "Eric and Kilian", + "repo": "a11yproject", + "date": "1/3/2023" + }, + "intent": "How many commits did Eric and Kilian make to a11yproject on 1/3/2023?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "0" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "0" + }, + "intent_template_id": 322, + "old_task_id": 135 + }, + { + "sites": [ + "map" + ], + "task_id": 35, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What is the estimated driving time between {{city1}} and {{city2}}?", + "instantiation_dict": { + "city1": "the hometown of Joe Biden", + "city2": "Bridgeport" + }, + "intent": "What is the estimated driving time between the hometown of Joe Biden and Bridgeport?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "3h 20min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "3h 20min" + }, + "intent_template_id": 51, + "old_task_id": 139 + }, + { + "sites": [ + "shopping" + ], + "task_id": 36, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "How much I spent on {{category}} shopping during {{time}}", + "instantiation_dict": { + "category": "food", + "time": "from mid Jan to the end Jan 2023" + }, + "intent": "How much I spent on food shopping during from mid Jan to the end Jan 2023", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "0" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "0" + }, + "intent_template_id": 162, + "old_task_id": 144 + }, + { + "sites": [ + "shopping" + ], + "task_id": 37, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What is the {{option}} configuration of the {{product}} I bought {{time}}", + "instantiation_dict": { + "option": "color", + "product": "artifical plants", + "time": "Feb 2023" + }, + "intent": "What is the color configuration of the artifical plants I bought Feb 2023", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Green-vines" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Green-vines" + }, + "intent_template_id": 155, + "old_task_id": 149 + }, + { + "sites": [ + "map" + ], + "task_id": 38, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What is the minimum travel time by car from {{location1}} to {{location2}}?", + "instantiation_dict": { + "location1": "Animal Rescue League of Pittsburgh", + "location2": "Schenley park" + }, + "intent": "What is the minimum travel time by car from Animal Rescue League of Pittsburgh to Schenley park?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "9min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "9min" + }, + "intent_template_id": 36, + "old_task_id": 155 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 39, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Checkout merge requests assigned to me", + "instantiation_dict": {}, + "intent": "Checkout merge requests assigned to me", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/dashboard/merge_requests?assignee_username=byteblaze", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 290, + "old_task_id": 156 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 40, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Show all customers", + "instantiation_dict": {}, + "intent": "Show all customers", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING_ADMIN__/customer/index/", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 255, + "old_task_id": 157 + }, + { + "sites": [ + "shopping" + ], + "task_id": 41, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "I have a lot of Nintendo Switch game cards now, help me find the best storage option to fit all {{num}} cards", + "instantiation_dict": { + "num": 40 + }, + "intent": "I have a lot of Nintendo Switch game cards now, help me find the best storage option to fit all 40 cards", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/game-card-holder-storage-case-for-nintendo-switch-games-or-ps-vita-game-case-or-sd-memory-cards-black.html", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 171, + "old_task_id": 162 + }, + { + "sites": [ + "shopping" + ], + "task_id": 42, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__/photosmart-plus-b209-clr-inkjetfb-p-s-c-usb-wrls-1.html", + "geolocation": null, + "intent_template": "What are the main criticisms of this product? Please extract the relevant sentences.", + "instantiation_dict": {}, + "intent": "What are the main criticisms of this product? Please extract the relevant sentences.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "The wireless connection works on a whim (about 40% of the time I've owned it)", + "It seems to constantly run out of ink", + "Cartridge prices are less than some printers I've had", + "This printer seems to have more reasons NOT to work (none that are findable or correctable) Ex: error boxes saying that it's out of paper when it automatically switches to photo printing for some reason", + "Scanner is as slow as my first scanner I ever owned in the mid-90's", + "For the $176 I paid, there isn't even a fax component on it. I guess the \"PLUS\" part of it's name is in reference to the migraines it causes when you can't figure out the new reason why it's not working for the 10th time in the past 2 months." + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "The wireless connection works on a whim (about 40% of the time I've owned it). It seems to constantly run out of ink. Cartridge prices are less than some printers I've had, but now I understand why. This printer seems to have more reasons NOT to work (none that are findable or correctable) Ex: error boxes saying that it's out of paper when it automatically switches to photo printing for some reason. Scanner is as slow as my first scanner I ever owned in the mid-90's. For the $176 I paid, there isn't even a fax component on it. I guess the \"PLUS\" part of it's name is in reference to the migraines it causes when you can't figure out the new reason why it's not working for the 10th time in the past 2 months." + }, + "intent_template_id": 136, + "old_task_id": 167 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 43, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Tell me the full names of the repositories where I made contributions and they got {{description}} stars?", + "instantiation_dict": { + "description": "the most" + }, + "intent": "Tell me the full names of the repositories where I made contributions and they got the most stars?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "a11yproject.com", + "design" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "a11yproject.com, Primer/design" + }, + "intent_template_id": 289, + "old_task_id": 169 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 44, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Open my latest updated issue that has keyword \"{{keyword}}\" in its title to check if it is closed", + "instantiation_dict": { + "keyword": "better" + }, + "intent": "Open my latest updated issue that has keyword \"better\" in its title to check if it is closed", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match", + "url_match" + ], + "reference_answers": { + "fuzzy_match": [ + "No, it is open" + ] + }, + "reference_url": "__GITLAB__/byteblaze/empathy-prompts/-/issues/8", + "program_html": [], + "reference_answer_raw_annotation": "Not closed", + "string_note": "", + "url_note": "GOLD in PRED" + }, + "intent_template_id": 310, + "old_task_id": 173 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 45, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Open my latest created issue that has {{keyword}} in its title to check if it is closed", + "instantiation_dict": { + "keyword": "homepage content" + }, + "intent": "Open my latest created issue that has homepage content in its title to check if it is closed", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match", + "url_match" + ], + "reference_answers": { + "exact_match": "Yes" + }, + "reference_url": "__GITLAB__/a11yproject/a11yproject.com/-/issues/719", + "program_html": [], + "reference_answer_raw_annotation": "closed", + "string_note": "" + }, + "intent_template_id": 500, + "old_task_id": 182 + }, + { + "sites": [ + "shopping" + ], + "task_id": 46, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Tell me the total cost of my latest {{status}} order?", + "instantiation_dict": { + "status": "complete" + }, + "intent": "Tell me the total cost of my latest complete order?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "65.32" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "65.32" + }, + "intent_template_id": 214, + "old_task_id": 190 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 47, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Compare the payment difference of the last {{N}} {{status_1}} orders and {{status_2}} orders", + "instantiation_dict": { + "status_1": "cancelled", + "status_2": "completed", + "N": "4" + }, + "intent": "Compare the payment difference of the last 4 cancelled orders and completed orders", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "194.25" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "194.25" + }, + "intent_template_id": 367, + "old_task_id": 196 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 48, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Get the {{attribute}} of the {{status}} order", + "instantiation_dict": { + "attribute": "date", + "status": "most recent canlled" + }, + "intent": "Get the date of the most recent canlled order", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "May 23 2023" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "May 23, 2023" + }, + "intent_template_id": 366, + "old_task_id": 202 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 49, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__/a11yproject/a11yproject.com", + "geolocation": null, + "intent_template": "How many commits did {{user}} make on {{date}}?", + "instantiation_dict": { + "user": "kilian", + "date": "3/5/2023" + }, + "intent": "How many commits did kilian make on 3/5/2023?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "1" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "1" + }, + "intent_template_id": 320, + "old_task_id": 205 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 50, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Find the customer name and email with phone number {{PhoneNum}}", + "instantiation_dict": { + "PhoneNum": "8015551212" + }, + "intent": "Find the customer name and email with phone number 8015551212", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Sean Miller", + "sean.miller@gmail.com" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Sean Miller, sean.miller@gmail.com" + }, + "intent_template_id": 364, + "old_task_id": 211 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 51, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "What are the key aspects that the customers don't like about {{product}}", + "instantiation_dict": { + "product": "Circe ice fleece" + }, + "intent": "What are the key aspects that the customers don't like about Circe ice fleece", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 249, + "old_task_id": 215 + }, + { + "sites": [ + "map" + ], + "task_id": 52, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Show me the walking distance from nearby hotels to {{location}} that take at most {{n}} minutes?", + "instantiation_dict": { + "location": "Gardner Steel Conference Center,", + "n": 5 + }, + "intent": "Show me the walking distance from nearby hotels to Gardner Steel Conference Center, that take at most 5 minutes?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Wyndham Pittsburgh University Cente: 375m", + "The Oaklander Hotel: 338m" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Wyndham Pittsburgh University Cente: 375 m\nThe Oaklander Hotel: 338 m" + }, + "intent_template_id": 41, + "old_task_id": 220 + }, + { + "sites": [ + "map" + ], + "task_id": 53, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "I am at CMU Pittsburgh, how long it takes to the nearest {{location}} with different transportation methods?", + "instantiation_dict": { + "location": "USPS postal office" + }, + "intent": "I am at CMU Pittsburgh, how long it takes to the nearest USPS postal office with different transportation methods?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Walk: 1 minute", + "Drive: less than 1 minute", + "Bike: less than 1 minute" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Walk: 1 minute to walk and\nDrive: less than 1 minute\nBike: less than 1 minute" + }, + "intent_template_id": 35, + "old_task_id": 221 + }, + { + "sites": [ + "shopping" + ], + "task_id": 54, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What do customers say about {{product_type}} from {{manufature}}", + "instantiation_dict": { + "product_type": "brush", + "manufature": "sephora" + }, + "intent": "What do customers say about brush from sephora", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "No reviews available for the sephora brushes." + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "The sephora brushes don't have reviews", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 135, + "old_task_id": 225 + }, + { + "sites": [ + "shopping" + ], + "task_id": 55, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What is the price range for products from {{brand}}?", + "instantiation_dict": { + "brand": "EYZUTAK" + }, + "intent": "What is the price range for products from EYZUTAK?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "9.99" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "$9.99" + }, + "intent_template_id": 370, + "old_task_id": 227 + }, + { + "sites": [ + "shopping" + ], + "task_id": 56, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Get the order number of my most recent {{status}} order ", + "instantiation_dict": { + "status": "under delivery" + }, + "intent": "Get the order number of my most recent under delivery order ", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "N/A" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "There is no under delivery order" + }, + "intent_template_id": 213, + "old_task_id": 235 + }, + { + "sites": [ + "map" + ], + "task_id": 57, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Where is the nearest {{location}} from {{location2}} {{condition}}", + "instantiation_dict": { + "location": "pharmacy", + "location2": "Carnegie Mellon", + "condition": "I can walk within 20mins" + }, + "intent": "Where is the nearest pharmacy from Carnegie Mellon I can walk within 20mins", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Schiller's Pharmacy", + "811", + "South Aiken Avenue", + "Shadyside", + "Pittsburgh" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Schiller's Pharmacy, 811, South Aiken Avenue, Shadyside, Pittsburgh, Allegheny County, 15232, United States" + }, + "intent_template_id": 39, + "old_task_id": 236 + }, + { + "sites": [ + "shopping" + ], + "task_id": 58, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "I am doing a market survey for one stop market, show me the most expensive product from {{product_category}} category", + "instantiation_dict": { + "product_category": "competative swimwear" + }, + "intent": "I am doing a market survey for one stop market, show me the most expensive product from competative swimwear category", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/clothing-shoes-jewelry/sport-specific-clothing/competitive-swimwear.html?product_list_order=price&product_list_dir=desc", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 138, + "old_task_id": 240 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 59, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Show me the {{information}} of the customer who is the most unhappy with {{product}}", + "instantiation_dict": { + "information": "email address", + "product": "the style of Zoe products" + }, + "intent": "Show me the email address of the customer who is the most unhappy with the style of Zoe products", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "Valorie doesn't have a email in the system", + "program_html": [], + "string_note": "There is no negative review for Zoe products", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 244, + "old_task_id": 247 + }, + { + "sites": [ + "map" + ], + "task_id": 60, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Tell me the coordinates of {{location}} in DD format", + "instantiation_dict": { + "location": "Apple Store near Pitt" + }, + "intent": "Tell me the coordinates of Apple Store near Pitt in DD format", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "40.451", + "-79.933" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "40.4511693, -79.9334241" + }, + "intent_template_id": 46, + "old_task_id": 250 + }, + { + "sites": [ + "map" + ], + "task_id": 61, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What is the {{information}} of {{location}}", + "instantiation_dict": { + "location": "Western Pennsylvania Hospital", + "information": "phone number" + }, + "intent": "What is the phone number of Western Pennsylvania Hospital", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "+1 412 578 5000" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "4125785000" + }, + "intent_template_id": 501, + "old_task_id": 254 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 62, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "See all public projects", + "instantiation_dict": {}, + "intent": "See all public projects", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/explore", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 325, + "old_task_id": 258 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 63, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Get me my RSS feed token", + "instantiation_dict": {}, + "intent": "Get me my RSS feed token", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "TMN_bBn9Z48qVbUFZV45" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "TMN_bBn9Z48qVbUFZV45" + }, + "intent_template_id": 312, + "old_task_id": 259 + }, + { + "sites": [ + "wikipedia", + "map" + ], + "task_id": 64, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "What's the closest national park to {{city}}? How long does it take to bike there?", + "instantiation_dict": { + "city": "Vinalhaven, ME" + }, + "intent": "What's the closest national park to Vinalhaven, ME? How long does it take to bike there?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Acadia National Park" + ], + "fuzzy_match": [ + "10h 33min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Acadia National Park\n10h 33min" + }, + "intent_template_id": 85, + "old_task_id": 268 + }, + { + "sites": [ + "shopping" + ], + "task_id": 65, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Show me products under ${{price}} in \"{{product_category}}\" category", + "instantiation_dict": { + "price": "30", + "product_category": "men shoes" + }, + "intent": "Show me products under $30 in \"men shoes\" category", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/clothing-shoes-jewelry/men/shoes.html?price=0-30", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 139, + "old_task_id": 270 + }, + { + "sites": [ + "shopping" + ], + "task_id": 66, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Search for \"{{keyword}}\"", + "instantiation_dict": { + "keyword": "switch accessories" + }, + "intent": "Search for \"switch accessories\"", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/catalogsearch/result/?q=switch+accessories", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 212, + "old_task_id": 276 + }, + { + "sites": [ + "shopping" + ], + "task_id": 67, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Look up the most recent models of XBox controllers released between 2020-2021?", + "instantiation_dict": {}, + "intent": "Look up the most recent models of XBox controllers released between 2020-2021?", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/microsoft-xbox-controller-carbon-black-for-series-x-series-s-xbox-one-windows-10-android-ios-bundled-with-dual-port-charging-dock-xbox-controller-skin-voucher-premgear-cloth.html", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 210, + "old_task_id": 283 + }, + { + "sites": [ + "shopping" + ], + "task_id": 68, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Show the least expensive {{product}} with a minimum storage capacity of {{min_storage}}.", + "instantiation_dict": { + "product": "switch card holder", + "min_storage": "15 cards" + }, + "intent": "Show the least expensive switch card holder with a minimum storage capacity of 15 cards.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/game-card-holder-storage-case-for-nintendo-switch-games-or-ps-vita-game-case-or-sd-memory-cards-black.html", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 207, + "old_task_id": 285 + }, + { + "sites": [ + "map" + ], + "task_id": 69, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "How much time does it take from Pittsburgh to Philadelphia by car?", + "instantiation_dict": {}, + "intent": "How much time does it take from Pittsburgh to Philadelphia by car?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "8h 33min" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "5h 47min" + }, + "intent_template_id": 47, + "old_task_id": 287 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 70, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Tell me the {{attribute}} of the customer who has the most cancellations in the history", + "instantiation_dict": { + "attribute": "name" + }, + "intent": "Tell me the name of the customer who has the most cancellations in the history", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Samantha Jones" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Samantha Jones" + }, + "intent_template_id": 234, + "old_task_id": 288 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 71, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Show me the command to clone {{repo}} with SSH.", + "instantiation_dict": { + "repo": "the best GAN python implementation" + }, + "intent": "Show me the command to clone the best GAN python implementation with SSH.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "ssh://git@localhost:2222/eriklindernoren/PyTorch-GAN.git" + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "ssh://git@localhost:2222/eriklindernoren/PyTorch-GAN.git" + }, + "intent_template_id": 329, + "old_task_id": 296 + }, + { + "sites": [ + "shopping" + ], + "task_id": 72, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Show the most recent {{status}} order", + "instantiation_dict": { + "status": "pending" + }, + "intent": "Show the most recent pending order", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/sales/order/view/order_id/189/", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 180, + "old_task_id": 300 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 73, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Tell me who has made the most contributions, in terms of number of commits, to the {{repo}} project", + "instantiation_dict": { + "repo": "Pytorch GAN" + }, + "intent": "Tell me who has made the most contributions, in terms of number of commits, to the Pytorch GAN project", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Erik Linder-Norén" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Erik Linder-Norén" + }, + "intent_template_id": 323, + "old_task_id": 311 + }, + { + "sites": [ + "shopping" + ], + "task_id": 74, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Which number to call for the customer service?", + "instantiation_dict": {}, + "intent": "Which number to call for the customer service?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "There is no phone number in the website", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 134, + "old_task_id": 313 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 75, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "List the {{attribute}} of the top 3 contributors to {{repo}} repo, ranked by the number of commits?", + "instantiation_dict": { + "repo": "2019-nCov", + "attribute": "last names" + }, + "intent": "List the last names of the top 3 contributors to 2019-nCov repo, ranked by the number of commits?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Lo", + "Chen", + "Chu" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Lo, Chen, Chu" + }, + "intent_template_id": 324, + "old_task_id": 318 + }, + { + "sites": [ + "shopping" + ], + "task_id": 76, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "How much refund I should expect from my order canlled in {{time}}, including shipping fee", + "instantiation_dict": { + "time": "2022" + }, + "intent": "How much refund I should expect from my order canlled in 2022, including shipping fee", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "3053.97" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "3053.97" + }, + "intent_template_id": 160, + "old_task_id": 321 + }, + { + "sites": [ + "shopping" + ], + "task_id": 77, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Show me the \"{{product}}\" listings by {{sorting_order}}.", + "instantiation_dict": { + "product": "chairs", + "sorting_order": "ascending price" + }, + "intent": "Show me the \"chairs\" listings by ascending price.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/catalogsearch/result/index/?product_list_order=price&q=chairs&product_list_dir=asc", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 208, + "old_task_id": 324 + }, + { + "sites": [ + "shopping" + ], + "task_id": 78, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "How much did I spend on shopping at One Stop Market {{time}}? They gave me a 20% discount on the total amount for orders exceeding $200 in cash", + "instantiation_dict": { + "time": "on November 2022" + }, + "intent": "How much did I spend on shopping at One Stop Market on November 2022? They gave me a 20% discount on the total amount for orders exceeding $200 in cash", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "359.546" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "359.546" + }, + "intent_template_id": 147, + "old_task_id": 333 + }, + { + "sites": [ + "shopping" + ], + "task_id": 79, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Tell me when I last ordered my {{description}}?", + "instantiation_dict": { + "description": "body butter" + }, + "intent": "Tell me when I last ordered my body butter?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "January 16th 2023" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "January 16th 2023" + }, + "intent_template_id": 169, + "old_task_id": 335 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 80, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "How many reviews our shop received {{time}}?", + "instantiation_dict": { + "time": "in May 2023" + }, + "intent": "How many reviews our shop received in May 2023?", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "0" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "0" + }, + "intent_template_id": 248, + "old_task_id": 348 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 81, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Who else have access to my repo {{repo}}, show me their usernames", + "instantiation_dict": { + "repo": "gimmiethat.space" + }, + "intent": "Who else have access to my repo gimmiethat.space, show me their usernames", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "yjlou" + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "yjlou" + }, + "intent_template_id": 298, + "old_task_id": 349 + }, + { + "sites": [ + "shopping" + ], + "task_id": 82, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "List products from {{product_category}} category by {{order}} price", + "instantiation_dict": { + "product_category": "living room furtniture", + "order": "descending" + }, + "intent": "List products from living room furtniture category by descending price", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/home-kitchen/furniture/living-room-furniture.html?product_list_order=price&product_list_dir=desc", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 137, + "old_task_id": 354 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 83, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Checkout merge requests requiring my review", + "instantiation_dict": {}, + "intent": "Checkout merge requests requiring my review", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/dashboard/merge_requests?reviewer_username=byteblaze", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 291, + "old_task_id": 357 + }, + { + "sites": [ + "shopping" + ], + "task_id": 84, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Show me the {{info}} for order number {{order_number}}.", + "instantiation_dict": { + "info": "order statuses", + "order_number": "170 and 189" + }, + "intent": "Show me the order statuses for order number 170 and 189.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "170: cancelled", + "189: pending" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "170: cancelled, 189: pending" + }, + "intent_template_id": 206, + "old_task_id": 361 + }, + { + "sites": [ + "map" + ], + "task_id": 85, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Measure distance between {{location/address_1}} and {{location/address_2}} by walking", + "instantiation_dict": { + "location/address_1": "Carnegie Mellon University", + "location/address_2": "CVS (closet one)" + }, + "intent": "Measure distance between Carnegie Mellon University and CVS (closet one) by walking", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "1.4km" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "1.4km" + }, + "intent_template_id": 58, + "old_task_id": 367 + }, + { + "sites": [ + "shopping" + ], + "task_id": 86, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "find discounted items.", + "instantiation_dict": {}, + "intent": "find discounted items.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "There is no function to show only discount items", + "reference_answer_raw_annotation": "There is no function to show only discount items." + }, + "intent_template_id": 188, + "old_task_id": 368 + }, + { + "sites": [ + "map" + ], + "task_id": 87, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Pull up the description page of {{location}} on Map", + "instantiation_dict": { + "location": "Carnegie Music Hall" + }, + "intent": "Pull up the description page of Carnegie Music Hall on Map", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": null, + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[id=\"sidebar_content\"').outerText", + "required_contents": { + "must_include": [ + "Carnegie Music Hall" + ] + } + } + ] + }, + "intent_template_id": 52, + "old_task_id": 369 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 88, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Preview the {{name}} theme for my shop", + "instantiation_dict": { + "name": "Magento Blank" + }, + "intent": "Preview the Magento Blank theme for my shop", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING_ADMIN__/admin/system_design_theme/edit/id/1", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 266, + "old_task_id": 374 + }, + { + "sites": [ + "shopping" + ], + "task_id": 89, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Summarize customer reviews for {{product}}.", + "instantiation_dict": { + "product": "Amazon Echo Dot 3rd generation" + }, + "intent": "Summarize customer reviews for Amazon Echo Dot 3rd generation.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "Serena: It was the exact same one that came with my echo show that my puppy", + "Amazon Customer: It doesn’t work .", + "BlessedGirl: Great replacement for Echo Dot.", + "Jeff Sederquist: Great product no issues. It's for a Echo show 5", + "melvin m.: Very good charger but I had to buy this one because when I bought an echo show 5, I came with an echo show 10 charger in the package with the device", + "Jack Smith: Looks like pictures", + "Ignacio: Muy bueno de buena calidad", + "BusyB: My kids bent the original cord for their Echo show 5 and this replacement cord is just like the one it came with. It works just fine. Been using it for 2 weeks now and no problems.", + "Kee Williams: Great value works better than original", + "Howard A. Sinclair: Great product!!! Works exactly as it is supposed to." + ] + }, + "reference_url": "", + "program_html": [] + }, + "intent_template_id": 182, + "old_task_id": 376 + }, + { + "sites": [ + "map" + ], + "task_id": 90, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Find the {{space}} around {{location}}", + "instantiation_dict": { + "location": "Carnegie Music Hall", + "space": "hotel" + }, + "intent": "Find the hotel around Carnegie Music Hall", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__MAP__/search?query=hotels%20near%20Carnegie%20Music%20Hall", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 59, + "old_task_id": 381 + }, + { + "sites": [ + "map" + ], + "task_id": 91, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "I am arriving at Carnegie Mellon University. Find the nearby US Citizenship and Immigration Services and the walking distance to the nearest Social Security Administration from US Citizenship and Immigration Services", + "instantiation_dict": {}, + "intent": "I am arriving at Carnegie Mellon University. Find the nearby US Citizenship and Immigration Services and the walking distance to the nearest Social Security Administration from US Citizenship and Immigration Services", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "fuzzy_match": [ + "N/A" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "There is no USCIS nearby", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 781, + "old_task_id": 382 + }, + { + "sites": [ + "map" + ], + "task_id": 92, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "I am arriving at Pittsburgh Airport. Show me the name of a Hyatt hotel if there is any nearby. Tell me the names of supermarkets that are within 15mins driving from the hotel", + "instantiation_dict": {}, + "intent": "I am arriving at Pittsburgh Airport. Show me the name of a Hyatt hotel if there is any nearby. Tell me the names of supermarkets that are within 15mins driving from the hotel", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Hyatt Regency Pittsburgh International Airport", + "Giant Eagle", + "ALDI" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Hyatt Regency Pittsburgh International Airport Giant Eagle, ALDI" + }, + "intent_template_id": 782, + "old_task_id": 383 + }, + { + "sites": [ + "shopping" + ], + "task_id": 93, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "List the customer names who complain about the quality of EYZUTAK phone cases", + "instantiation_dict": {}, + "intent": "List the customer names who complain about the quality of EYZUTAK phone cases", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "Lisa Lee", + "Evelyn Kurver", + "Amanda", + "N Randall" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Lisa Lee, Evelyn Kurver, Amanda, N Randall" + }, + "intent_template_id": 666, + "old_task_id": 384 + }, + { + "sites": [ + "shopping" + ], + "task_id": 94, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "What is the rating of {{product}}", + "instantiation_dict": { + "product": "Ugreen lightning to 3.5mm cable" + }, + "intent": "What is the rating of Ugreen lightning to 3.5mm cable. Please round to the nearest whole number", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "65 |OR| 3" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "Around 3.1 stars" + }, + "intent_template_id": 1355, + "old_task_id": 386 + }, + { + "sites": [ + "shopping" + ], + "task_id": 95, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Who gave {{stars}} for phone cases from EYZUTAK", + "instantiation_dict": { + "stars": "4 or 5 stars" + }, + "intent": "Who gave 4 or 5 stars for phone cases from EYZUTAK", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "MH", + "Misba009", + "Amanda", + "Amazon Customer", + "Cally", + "Bethany Robertson" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "", + "reference_answer_raw_annotation": "MH, Misba009, Amanda, Amazon Customer, Cally, Bethany Robertson, Bethany Robertson" + }, + "intent_template_id": 1356, + "old_task_id": 387 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 96, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Post \"{{content}}\" for the merge request related to {{mr}} in {{repo}} project", + "instantiation_dict": { + "mr": "color ulitity", + "repo": "a11yproject.com", + "content": "Good idea" + }, + "intent": "Post \"Good idea\" for the merge request related to color ulitity in a11yproject.com project", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/a11yproject/a11yproject.com/-/merge_requests/1071", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[id=\"notes-list\"').lastElementChild.querySelector('.timeline-discussion-body').outerText", + "required_contents": { + "exact_match": "Good idea" + } + } + ] + }, + "intent_template_id": 348, + "old_task_id": 392 + }, + { + "sites": [ + "reddit" + ], + "task_id": 97, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Change my reddit bio to \"{{content}}\"", + "instantiation_dict": { + "content": "Seeking SDE positions" + }, + "intent": "Change my reddit bio to \"Seeking SDE positions\"", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/user/MarvelsGrantMan136", + "locator": "document.querySelector(\".user-bio__biography\").outerText", + "required_contents": { + "exact_match": "Seeking SDE positions" + } + } + ] + }, + "intent_template_id": 6, + "old_task_id": 401 + }, + { + "sites": [ + "reddit" + ], + "task_id": 98, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Upvote the newest post in {{subreddit}} subreddit", + "instantiation_dict": { + "subreddit": "books" + }, + "intent": "Upvote the newest post in books subreddit", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/books/124260/adults-reading-to-each-other-out-loud", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-upvoted" + ] + } + } + ] + }, + "intent_template_id": 22, + "old_task_id": 404 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 99, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Go to the merge request on {{topic}} I have to review, find if the author of the merge request responded at the end, and reply \"Thank you\" if he did. Otherwise remind him with a simple @.", + "instantiation_dict": { + "topic": "verification functions" + }, + "intent": "Go to the merge request on verification functions I have to review, find if the author of the merge request responded at the end, and reply \"Thank you\" if he did. Otherwise remind him with a simple @.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/a11y-webring.club/-/merge_requests/40", + "locator": "document.querySelector('[id=\"notes-list\"').lastElementChild.querySelector('.timeline-discussion-body').outerText", + "required_contents": { + "exact_match": "@davepgreene" + } + } + ] + }, + "intent_template_id": 360, + "old_task_id": 415 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 100, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Set my gitlab status as {{status}}.", + "instantiation_dict": { + "status": "Enjoying life" + }, + "intent": "Set my gitlab status as Enjoying life.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze", + "locator": "document.querySelector('.cover-status').lastChild.textContent", + "required_contents": { + "exact_match": "Enjoying life" + } + } + ] + }, + "intent_template_id": 361, + "old_task_id": 419 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 101, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Mark all {{brand}} shirts on sale", + "instantiation_dict": { + "brand": "Hollister" + }, + "intent": "Mark all Hollister shirts on sale", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/126/", + "locator": "document.querySelector('input[name=\"product[sale]\"]').value", + "required_contents": { + "exact_match": "1" + } + } + ] + }, + "intent_template_id": 237, + "old_task_id": 423 + }, + { + "sites": [ + "wikipedia", + "map" + ], + "task_id": 102, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Find the page of {{description}} on the map.", + "instantiation_dict": { + "description": "the place in Pennsylvania where a plane crashed during the September 11th attacks" + }, + "intent": "Find the page of the place in Pennsylvania where a plane crashed during the September 11th attacks on the map.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[id=\"sidebar_content\"').outerText", + "required_contents": { + "must_include": [ + "Somerset County" + ] + } + } + ] + }, + "intent_template_id": 371, + "old_task_id": 426 + }, + { + "sites": [ + "shopping" + ], + "task_id": 103, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__/tall-pink-taper-candles-4-piece-orange-colored-tapered-candles-gradient-candles-10-6-inches-tall-tie-dye-candle-set-large-dripless-long-burning-candlesticks-two-color-taper-candles-candlesticks.html |AND| __SHOPPING__/spaas-white-taper-candles-4-pack-10-inch-tall-candles-scent-free-premium-wax-candle-sticks-8-hour-long-burning-white-candlesticks-for-home-decoration-wedding-holiday-and-parties.html |AND| __SHOPPING__/white-starfish-wall-candle-sconces-set-of-2-beach-decor-ocean-themed-wall-mount-candleholders-nautical-style-beach-bathroom-decor-coastal-farmhouse-seashell-candle-holders.html", + "geolocation": null, + "intent_template": "Add the product with the lowest per unit price from my open tabs to the shopping cart", + "instantiation_dict": {}, + "intent": "Add the product with the lowest per unit price from my open tabs to the shopping cart", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/checkout/cart", + "locator": "", + "required_contents": { + "must_include": [ + "SPAAS White Taper Candles - 4 Pack |OR| 10 Inch Tall Candles, Scent-Free Premium Wax Candle Sticks |OR| 8 Hour Long Burning White Candlesticks for Home Decoration, Wedding, Holiday and Parties" + ] + } + } + ] + }, + "intent_template_id": 145, + "old_task_id": 431 + }, + { + "sites": [ + "shopping" + ], + "task_id": 104, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "I previously ordered some {{product}} {{time}} and later cancelled. Can you reorder it for me?", + "instantiation_dict": { + "product": "a make up removal kit", + "time": "during summer 2022" + }, + "intent": "I previously ordered some a make up removal kit during summer 2022 and later cancelled. Can you reorder it for me?", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "func:shopping_get_latest_order_url()", + "locator": "document.querySelector(\".order-details-items.ordered\").outerText", + "required_contents": { + "must_include": [ + "B0738JQG6Q" + ] + } + } + ] + }, + "intent_template_id": 156, + "old_task_id": 440 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 105, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "set the homepage URL on my GitLab profile to {{url}}", + "instantiation_dict": { + "url": "https://egg.tart.com" + }, + "intent": "set the homepage URL on my GitLab profile to https://egg.tart.com", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze", + "locator": "document.querySelector('.profile-header [itemprop=\"url\"]').outerText", + "required_contents": { + "exact_match": "egg.tart.com" + } + } + ] + }, + "intent_template_id": 331, + "old_task_id": 448 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 106, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Disable {{product}} from the site, they are facing some quality issues.", + "instantiation_dict": { + "product": "Ryker Tee Crew Neck" + }, + "intent": "Disable Ryker Tee Crew Neck from the site, they are facing some quality issues.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/478/", + "locator": "document.querySelector('[name=\"product[status]\"').value", + "required_contents": { + "exact_match": "2" + } + } + ] + }, + "intent_template_id": 242, + "old_task_id": 454 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 107, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__/catalog/product/edit/id/1481/", + "geolocation": null, + "intent_template": "{{action}} the price of this product by {{amount}}", + "instantiation_dict": { + "amount": "$5", + "action": "Reduce" + }, + "intent": "Reduce the price of this product by $5", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/1481/", + "locator": "document.querySelector('[name=\"product[price]\"').value", + "required_contents": { + "exact_match": "27.00" + } + } + ] + }, + "intent_template_id": 247, + "old_task_id": 458 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 108, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Update the product description of {{product}} to highlight the real user positive reviews by quoting the comments", + "instantiation_dict": { + "product": "Antonia Racer Tank" + }, + "intent": "Update the product description of Antonia Racer Tank to highlight the real user positive reviews by quoting the comments", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/../antonia-racer-tank.html", + "locator": "document.querySelector('.data.item.content').outerText + (document.querySelector('.product.attribute.overview [itemprop=\"description\"]')?.outerText || '')", + "required_contents": { + "must_include": [ + "This is in regular rotation at the gym", + "Its colorful and looks kinda cute under my exercise tanks", + "it's very stylish for yoga or something else low impact" + ] + } + } + ] + }, + "intent_template_id": 251, + "old_task_id": 464 + }, + { + "sites": [ + "shopping" + ], + "task_id": 109, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Add {{product}} to my wish list", + "instantiation_dict": { + "product": "2 Hawaiian Bamboo Orchid Roots #zc50 - by Discount Hawaiian Gifts" + }, + "intent": "Add 2 Hawaiian Bamboo Orchid Roots #zc50 - by Discount Hawaiian Gifts to my wish list", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/wishlist/", + "locator": "document.querySelector('.products-grid.wishlist').outerText", + "required_contents": { + "must_include": [ + "2 Hawaiian Bamboo Orchid Roots #zc50 - by Discount Hawaiian Gifts" + ] + } + } + ] + }, + "intent_template_id": 186, + "old_task_id": 466 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 110, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Cancel order {{id}}", + "instantiation_dict": { + "id": "302" + }, + "intent": "Cancel order 302", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/sales/order/view/order_id/302/", + "locator": "document.querySelector(\"#order_status\").outerText", + "required_contents": { + "exact_match": "Canceled" + } + } + ] + }, + "intent_template_id": 257, + "old_task_id": 470 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 111, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Set up a new, empty repository with the name {{project_name}}?", + "instantiation_dict": { + "project_name": "awesome_llm_reading" + }, + "intent": "Set up a new, empty repository with the name awesome_llm_reading?", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/awesome_llm_reading", + "locator": "", + "required_contents": { + "must_include": [ + "awesome_llm_reading" + ] + } + } + ] + }, + "intent_template_id": 292, + "old_task_id": 476 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 112, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "{{name}} wants to check my dotfile configurations. Please invite him to the repo as a guest.", + "instantiation_dict": { + "name": "Vinta" + }, + "intent": "Vinta wants to check my dotfile configurations. Please invite him to the repo as a guest.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/dotfiles/-/project_members", + "locator": "func:gitlab_get_project_memeber_role(__page__, 'vinta')", + "required_contents": { + "must_include": [ + "Guest" + ] + } + } + ] + }, + "intent_template_id": 294, + "old_task_id": 485 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 113, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Change the page title of \"{{old-heading}}\" page on my site to \"{{heading}}\".", + "instantiation_dict": { + "old-heading": "Home Page", + "heading": "This is the home page!! Leave here!!" + }, + "intent": "Change the page title of \"Home Page\" page on my site to \"This is the home page!! Leave here!!\".", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/cms/page/edit/page_id/2/", + "locator": "document.querySelector('input[name=\"title\"]').value", + "required_contents": { + "exact_match": "This is the home page!! Leave here!!" + } + } + ] + }, + "intent_template_id": 275, + "old_task_id": 488 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 114, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Notify {{name}} in their most recent pending order with message \"{{message}}\"", + "instantiation_dict": { + "name": "Sarah Miller", + "message": "the order is ready to be shipped soon!" + }, + "intent": "Notify Sarah Miller in their most recent pending order with message \"the order is ready to be shipped soon!\"", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "System message: We cannot add order history." + }, + "intent_template_id": 280, + "old_task_id": 491 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 115, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Update order #{{order}} with the {{service}} tracking number {{tracking}}", + "instantiation_dict": { + "tracking": "24353446464", + "order": "307", + "service": "DHL" + }, + "intent": "Update order #307 with the DHL tracking number 24353446464", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/sales/order/commentsHistory/order_id/307/active_tab/order_shipments/", + "locator": "", + "required_contents": { + "must_include": [ + "Tracking number 24353446464 for DHL assigned" + ] + } + } + ] + }, + "intent_template_id": 284, + "old_task_id": 497 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 116, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Make all {{product}} as out of stock", + "instantiation_dict": { + "product": "Aeno capri" + }, + "intent": "Make all Aeno capri as out of stock", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/1861/", + "locator": "document.querySelector('[name=\"product[quantity_and_stock_status][is_in_stock]\"').value", + "required_contents": { + "exact_match": "0" + } + } + ] + }, + "intent_template_id": 287, + "old_task_id": 505 + }, + { + "sites": [ + "shopping" + ], + "task_id": 117, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Buy the highest rated product from the {{product_category}} category within a budget {{dollar_value}}.", + "instantiation_dict": { + "product_category": "meat substitute", + "dollar_value": "between 100 and 200" + }, + "intent": "Buy the highest rated product from the meat substitute category within a budget between 100 and 200.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "func:shopping_get_latest_order_url()", + "locator": "document.querySelector(\".order-details-items.ordered\").outerText", + "required_contents": { + "must_include": [ + "B01CTR3DLE" + ] + } + } + ] + }, + "intent_template_id": 172, + "old_task_id": 506 + }, + { + "sites": [ + "shopping" + ], + "task_id": 118, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Buy the best rating product from \"{{category}}\" category with at least 5 reviews and the product is least expensive", + "instantiation_dict": { + "category": "Men's shoe" + }, + "intent": "Buy the best rating product from \"Men's shoe\" category with at least 5 reviews and the product is least expensive", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "func:shopping_get_latest_order_url()", + "locator": "document.querySelector(\".order-details-items.ordered\").outerText", + "required_contents": { + "must_include": [ + "B01J4MM3KO" + ] + } + } + ] + }, + "intent_template_id": 216, + "old_task_id": 509 + }, + { + "sites": [ + "shopping" + ], + "task_id": 119, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Add a {{product}} to my wish list.", + "instantiation_dict": { + "product": "white desk" + }, + "intent": "Add a white desk to my wish list.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/wishlist/", + "locator": "document.querySelector('.products-grid.wishlist').outerText", + "required_contents": { + "must_include": [ + "white", + "desk" + ] + } + } + ] + }, + "intent_template_id": 189, + "old_task_id": 514 + }, + { + "sites": [ + "shopping" + ], + "task_id": 120, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__/elmwood-inn-fine-teas-orange-vanilla-caffeine-free-fruit-infusion-16-ounce-pouch.html", + "geolocation": null, + "intent_template": "Add this product to my wishlist", + "instantiation_dict": {}, + "intent": "Add this product to my wishlist", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/wishlist/", + "locator": "document.querySelector('.products-grid.wishlist').outerText", + "required_contents": { + "must_include": [ + "Elmwood Inn Fine Teas, Orange Vanilla Caffeine-free Fruit Infusion, 16-Ounce Pouch" + ] + } + } + ] + }, + "intent_template_id": 196, + "old_task_id": 516 + }, + { + "sites": [ + "shopping" + ], + "task_id": 121, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Subscribe to the newsletter of OneStopMarket", + "instantiation_dict": {}, + "intent": "Subscribe to the newsletter of OneStopMarket", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/newsletter/manage/", + "locator": "document.querySelector('[title=\"General Subscription\"').checked.toString()", + "required_contents": { + "exact_match": "true" + } + } + ] + }, + "intent_template_id": 199, + "old_task_id": 521 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 122, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Star the top {{number}} most stared repos in Gitlab", + "instantiation_dict": { + "number": "eight" + }, + "intent": "Star the top eight most stared repos in Gitlab", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/users/byteblaze/starred", + "locator": "", + "required_contents": { + "must_include": [ + "AndroidSlidingUpPanel", + "create-react-app", + "ffmpeg-python", + "PHP_XLSXWriter", + "AndroidAsync", + "Pytorch-GAN", + "administrate", + "keycloak" + ] + } + } + ] + }, + "intent_template_id": 354, + "old_task_id": 524 + }, + { + "sites": [ + "shopping" + ], + "task_id": 123, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Draft a refund message via their \"contact us\" form for the {{product}} I bought {{time}}. It broke after three days of use. The shop requires the order id, the reason and the amount to refund in the message. Don't submit yet", + "instantiation_dict": { + "product": "phone screen protector", + "time": "March 2023" + }, + "intent": "Draft a refund message via their \"contact us\" form for the phone screen protector I bought March 2023. It broke after three days of use. The shop requires the order id, the reason and the amount to refund in the message. Don't submit yet", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[title=\"What’s on your mind?\"').value", + "required_contents": { + "fuzzy_match": [ + "refund", + "it broke after three days of use", + "000000180", + "12.99" + ] + } + } + ] + }, + "intent_template_id": 154, + "old_task_id": 528 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 124, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Follow {{account_list}} on Gitlab", + "instantiation_dict": { + "account_list": [ + "Jakub Klinkovský", + "Koushik", + "Vinta Chen" + ] + }, + "intent": "Follow ['Jakub Klinkovský', 'Koushik', 'Vinta Chen'] on Gitlab", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/users/byteblaze/following", + "locator": "document.querySelector('.user-profile').outerText", + "required_contents": { + "must_include": [ + "@lahwaacz", + "@koush", + "@vinta" + ] + } + } + ] + }, + "intent_template_id": 330, + "old_task_id": 534 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 125, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Modify the address of order #{{order_id}} to {{address}}", + "instantiation_dict": { + "order_id": "299", + "address": "456 Oak Avenue, New York, NY, 10001" + }, + "intent": "Modify the address of order #299 to 456 Oak Avenue, New York, NY, 10001", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/sales/order/view/order_id/299", + "locator": "", + "required_contents": { + "must_include": [ + "456 Oak Avenue", + "New York", + "10001" + ] + } + } + ] + }, + "intent_template_id": 240, + "old_task_id": 538 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 126, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Add a new {{option}} {{value}} to {{base_setting}} of {{product}}", + "instantiation_dict": { + "option": "color", + "value": "blue", + "base_setting": "size S and M", + "product": "Frankie Sweatshirt" + }, + "intent": "Add a new color blue to size S and M of Frankie Sweatshirt", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/110/", + "locator": "document.querySelector('[data-index=\"configurable\"').outerText", + "required_contents": { + "must_include": [ + "Sweatshirt-M-Blue", + "Sweatshirt-S-Blue" + ] + } + } + ] + }, + "intent_template_id": 252, + "old_task_id": 548 + }, + { + "sites": [ + "gitlab", + "reddit" + ], + "task_id": 127, + "require_login": true, + "storage_state": "./.auth/gitlab.reddit_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "create a repository named {{name}} that includes a README file with the links to the most active {{num}} DIY ideas on DIY subreddit?", + "instantiation_dict": { + "name": "Do it myself", + "num": 8 + }, + "intent": "create a repository named Do it myself that includes a README file with the links to the most active 8 DIY ideas on DIY subreddit?", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/Do-it-myself/-/raw/main/README.md", + "locator": "", + "required_contents": { + "must_include": [ + "__REDDIT__/f/DIY/118903/separate-glued-plastic-parts", + "__REDDIT__/f/DIY/118923/how-would-you-fix-this-dryer-vent-mess", + "__REDDIT__/f/DIY/118935/basement-bulkhead-soffit-wall-framing", + "__REDDIT__/f/DIY/118904/ge-water-heater-pilot-light-won-t-stay-lit", + "__REDDIT__/f/DIY/118960/attempting-to-move-a-wall-outlet-in-my-basement-a-few-inches", + "__REDDIT__/f/DIY/118931/afci-outlet-question", + "__REDDIT__/f/DIY/118824/teflon-tape-to-attach-washing-machine-drain-hose-to-pipe", + "__REDDIT__/f/DIY/118866/paver-base-for-shed" + ] + } + } + ] + }, + "intent_template_id": 88, + "old_task_id": 566 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 128, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Invite {{collaborator_account_list}} as collaborator to {{repo}} repo", + "instantiation_dict": { + "collaborator_account_list": "Jakub Klinkovský and Benoît Blanchon", + "repo": "gimmiethat.space" + }, + "intent": "Invite Jakub Klinkovský and Benoît Blanchon as collaborator to gimmiethat.space repo", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/gimmiethat.space/-/project_members", + "locator": "", + "required_contents": { + "must_include": [ + "@lahwaacz", + "@bblanchon" + ] + } + } + ] + }, + "intent_template_id": 293, + "old_task_id": 567 + }, + { + "sites": [ + "shopping" + ], + "task_id": 129, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "I recently moved, my address is {{address}}, update my information on OneStopShopping accordingly", + "instantiation_dict": { + "address": "111 Magnolia Path, Atlanta, GA, 30303" + }, + "intent": "I recently moved, my address is 111 Magnolia Path, Atlanta, GA, 30303, update my information on OneStopShopping accordingly", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING__/customer/address", + "locator": "document.querySelector(\".box.box-address-shipping > .box-content\").outerText", + "required_contents": { + "must_include": [ + "111 Magnolia Path", + "Atlanta, Georgia, 30303" + ] + } + }, + { + "url": "__SHOPPING__/customer/address", + "locator": "document.querySelector(\".box.box-address-billing > .box-content\").outerText", + "required_contents": { + "must_include": [ + "111 Magnolia Path", + "Atlanta, Georgia, 30303" + ] + } + } + ] + }, + "intent_template_id": 165, + "old_task_id": 574 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 130, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Add the following users to my {{repo}} as {{role}}: {{user_list}}", + "instantiation_dict": { + "repo": "GitHub timeline item management extension", + "role": "maintainer", + "user_list": [ + "abisubramanya27", + "lahwaacz" + ] + }, + "intent": "Add the following users to my GitHub timeline item management extension as maintainer: ['abisubramanya27', 'lahwaacz']", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/remove-board-movement-events-from-the-github-issue-timeline/-/project_members", + "locator": "func:gitlab_get_project_memeber_role(__page__, 'abisubramanya27')", + "required_contents": { + "must_include": [ + "Maintainer" + ] + } + }, + { + "url": "__GITLAB__/byteblaze/remove-board-movement-events-from-the-github-issue-timeline/-/project_members", + "locator": "func:gitlab_get_project_memeber_role(__page__, 'lahwaacz')", + "required_contents": { + "must_include": [ + "Maintainer" + ] + } + } + ] + }, + "intent_template_id": 351, + "old_task_id": 577 + }, + { + "sites": [ + "reddit" + ], + "task_id": 131, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Create a new forum named {{name}}, with a description of {{description}}, and include {{sidebar_list}} in the sidebar?", + "instantiation_dict": { + "name": "Cyberpunk", + "description": "Welcome to the future", + "sidebar_list": [ + "Games", + "Books", + "Movies", + "Future" + ] + }, + "intent": "Create a new forum named Cyberpunk, with a description of Welcome to the future, and include ['Games', 'Books', 'Movies', 'Future'] in the sidebar?", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/Cyberpunk/edit", + "locator": "document.querySelector(\"#forum_description\").value", + "required_contents": { + "must_include": [ + "Welcome to the future" + ] + } + }, + { + "url": "__REDDIT__/f/Cyberpunk/edit", + "locator": "document.querySelector(\"#forum_sidebar\").value", + "required_contents": { + "must_include": [ + "Games", + "Books", + "Movies", + "Future" + ] + } + } + ] + }, + "intent_template_id": 7, + "old_task_id": 582 + }, + { + "sites": [ + "reddit" + ], + "task_id": 132, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Open the thread of a trending post on the forum \"{{subreddit}}\" and subscribe.", + "instantiation_dict": { + "subreddit": "machine learning" + }, + "intent": "Open the thread of a trending post on the forum \"machine learning\" and subscribe.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/MachineLearning", + "program_html": [ + { + "url": "__REDDIT__/", + "locator": "document.querySelector(\"#sidebar > section\").outerText", + "required_contents": { + "must_include": [ + "MachineLearning" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 4, + "old_task_id": 599 + }, + { + "sites": [ + "reddit" + ], + "task_id": 133, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Post my question, \"{{question}}\", in a subreddit where I'm likely to get an answer", + "instantiation_dict": { + "question": "is car necessary in NYC" + }, + "intent": "Post my question, \"is car necessary in NYC\", in a subreddit where I'm likely to get an answer", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/nyc", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "is car necessary in NYC" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 3765, + "old_task_id": 601 + }, + { + "sites": [ + "reddit" + ], + "task_id": 134, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Find a subreddit focused on topics related to {{topic}}, and post my question, \"{{question}}\" there", + "instantiation_dict": { + "topic": "gaming consoles", + "question": "what is the recommended console to buy these days" + }, + "intent": "Find a subreddit focused on topics related to gaming consoles, and post my question, \"what is the recommended console to buy these days\" there", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/consoles", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "what is the recommended console to buy these days" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 5, + "old_task_id": 605 + }, + { + "sites": [ + "reddit" + ], + "task_id": 135, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Post a review of my recent reading \"{{book}}\" in the r/books with my comment \"{{content}}\".", + "instantiation_dict": { + "book": "big little lies", + "content": "can't stop it" + }, + "intent": "Post a review of my recent reading \"big little lies\" in the r/books with my comment \"can't stop it\".", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/books", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "big little lies", + "can't stop it" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 9, + "old_task_id": 612 + }, + { + "sites": [ + "reddit" + ], + "task_id": 136, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__/f/pics", + "geolocation": null, + "intent_template": "Re-post the image of {{content}} in this page to {{subreddit}} subreddit and note \"from /f/pics\"", + "instantiation_dict": { + "content": "costume contest", + "subreddit": "funny" + }, + "intent": "Re-post the image of costume contest in this page to funny subreddit and note \"from /f/pics\"", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/funny", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "from /f/pics" + ] + } + }, + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "[...document.querySelector('.submission__inner').querySelectorAll('[href],[src]')].map(elem => elem.getAttribute('href') || elem.getAttribute('src')).join(' ')", + "required_contents": { + "must_include": [ + "bd8bc5f4c846aac4df08626faa3a34a7d47c8f3bdd92bf615a54afd939f063a7.jpg" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 11, + "old_task_id": 619 + }, + { + "sites": [ + "reddit" + ], + "task_id": 137, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Create a discussion post about \"{{topic}}\" in a relevant subreddit and ask users for their opinions with the simple prompt, \"your opinion\"", + "instantiation_dict": { + "topic": "Iphone 14" + }, + "intent": "Create a discussion post about \"Iphone 14\" in a relevant subreddit and ask users for their opinions with the simple prompt, \"your opinion\"", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/iphone", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "your opinion", + "Iphone 14" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 13, + "old_task_id": 626 + }, + { + "sites": [ + "reddit" + ], + "task_id": 138, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Ask for product recommendations for {{category}} within a budget of {{price}} in {{subreddit}}", + "instantiation_dict": { + "category": "running shoes", + "price": "$100", + "subreddit": "r/sports" + }, + "intent": "Ask for product recommendations for running shoes within a budget of $100 in r/sports", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/sports", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "100", + "running", + "shoes" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 15, + "old_task_id": 631 + }, + { + "sites": [ + "reddit" + ], + "task_id": 139, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Post a notice on a virtual meetup for {{interest}} enthusiasts on {{date}} in the {{subreddit}} subreddit", + "instantiation_dict": { + "interest": "Harry Potter", + "date": "July 8th", + "subreddit": "books" + }, + "intent": "Post a notice on a virtual meetup for Harry Potter enthusiasts on July 8th in the books subreddit", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/books", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "fuzzy_match": [ + "Harry Potter", + "July 8th", + "virtual meetup" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 16, + "old_task_id": 641 + }, + { + "sites": [ + "reddit" + ], + "task_id": 140, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Post in {{subreddit}} subreddit about what could machine learning help the correpong field.", + "instantiation_dict": { + "subreddit": "books" + }, + "intent": "Post in books subreddit about what could machine learning help the correpong field.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/books", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "fuzzy_match": [ + "machine learning", + "help" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 19, + "old_task_id": 645 + }, + { + "sites": [ + "reddit" + ], + "task_id": 141, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__/f/technology/134852/ai-experts-disown-musk-backed-campaign-citing-their-research", + "geolocation": null, + "intent_template": "Reply to {{position_description}} with my comment \"{{content_description}}\"", + "instantiation_dict": { + "position_description": "the post", + "content_description": "???" + }, + "intent": "Reply to the post with my comment \"???\"", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/technology/134852/ai-experts-disown-musk-backed-campaign-citing-their-research", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('.comment__body').outerText", + "required_contents": { + "exact_match": "???" + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 23, + "old_task_id": 652 + }, + { + "sites": [ + "shopping" + ], + "task_id": 142, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Fill the \"contact us\" form in the site for a refund on the {{product}} I bought, stating that it broke after just three days of use. Also, ensure to include the order number #{{order_id}} and the product SKU. Don't submit yet, I will check.", + "instantiation_dict": { + "product": "speaker", + "order_id": "148" + }, + "intent": "Fill the \"contact us\" form in the site for a refund on the speaker I bought, stating that it broke after just three days of use. Also, ensure to include the order number #148 and the product SKU. Don't submit yet, I will check.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/contact", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[title=\"What’s on your mind?\"').value", + "required_contents": { + "fuzzy_match": [ + "refund", + "broke after three days of use", + "148", + "B003FVW3VA" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 153, + "old_task_id": 657 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 143, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Submit a merge request for {{source_branch}} branch to be merged into {{target_branch}} branch, assign {{reviewer}} as the reviewer", + "instantiation_dict": { + "source_branch": "a11yproject.com/redesign", + "target_branch": "master", + "reviewer": "Roshan Jossy" + }, + "intent": "Submit a merge request for a11yproject.com/redesign branch to be merged into master branch, assign Roshan Jossy as the reviewer", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/a11yproject/a11yproject.com/-/merge_requests", + "program_html": [ + { + "url": "last", + "locator": "document.querySelectorAll(\".detail-page-description > a.gl-font-monospace\")[0].outerText", + "required_contents": { + "exact_match": "redesign" + } + }, + { + "url": "last", + "locator": "document.querySelectorAll(\".detail-page-description > a.gl-font-monospace\")[1].outerText", + "required_contents": { + "exact_match": "main" + } + }, + { + "url": "last", + "locator": "document.querySelector('.block.reviewer').outerText", + "required_contents": { + "must_include": [ + "Roshan Jossy" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 335, + "old_task_id": 668 + }, + { + "sites": [ + "shopping", + "reddit" + ], + "task_id": 144, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Gather the titles of {{product}} reviews with {{rating}} rating from OneStopShop, and post them in the games subreddit under the title \"real user feedback on {{product}}\"", + "instantiation_dict": { + "product": "Racing Wheel Overdrive for Xbox X", + "rating": "1 star" + }, + "intent": "Gather the titles of Racing Wheel Overdrive for Xbox X reviews with 1 star rating from OneStopShop, and post them in the games subreddit under the title \"real user feedback on Racing Wheel Overdrive for Xbox X\"", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/gaming", + "program_html": [ + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__title').outerText", + "required_contents": { + "exact_match": "real user feedback on Racing Wheel Overdrive for Xbox X" + } + }, + { + "url": "func:reddit_get_post_url('__last_url__')", + "locator": "document.querySelector('.submission__body').outerText", + "required_contents": { + "must_include": [ + "Unable to set neutral steering", + "Doesn’t work with PC", + "Crazy problems in automatic mode", + "pedals stopped working", + "Only works with certain games" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 101, + "old_task_id": 673 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 145, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Lookup orders that are {{status}}", + "instantiation_dict": { + "status": "canceled" + }, + "intent": "Lookup orders that are canceled", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__SHOPPING_ADMIN__/sales/order/", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector(\"div.admin__data-grid-filters-current\").outerText", + "required_contents": { + "must_include": [ + "Canceled" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 253, + "old_task_id": 678 + }, + { + "sites": [ + "reddit", + "gitlab" + ], + "task_id": 146, + "require_login": true, + "storage_state": "./.auth/gitlab.reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Find a GitLab repository related to {{topic}} and make a Reddit post linking to it in a relevant subreddit", + "instantiation_dict": { + "topic": "chatGPT" + }, + "intent": "Find a GitLab repository related to chatGPT and make a Reddit post linking to it in a relevant subreddit", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/machinelearning |OR| __REDDIT__/f/singularity |OR| __REDDIT__/f/deeplearning |OR| __REDDIT__/f/technology", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('.submission__inner').outerText", + "required_contents": { + "must_include": [ + "chatgpt", + "__GITLAB__/convexegg/chatgpt" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 116, + "old_task_id": 682 + }, + { + "sites": [ + "reddit", + "gitlab" + ], + "task_id": 147, + "require_login": true, + "storage_state": "./.auth/gitlab.reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Promote {{repo}} to subreddit {{subreddit}} with the description from the repo itself.", + "instantiation_dict": { + "repo": "auth0/angular-storage", + "subreddit": "technology" + }, + "intent": "Promote auth0/angular-storage to subreddit technology with the description from the repo itself.", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__REDDIT__/f/technology", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('.submission__inner').outerText + [...document.querySelector('.submission__inner').querySelectorAll('[href],[src]')].map(elem => elem.getAttribute('href') || elem.getAttribute('src')).join(' ')", + "required_contents": { + "must_include": [ + "A storage library for AngularJS done right", + "__GITLAB__/auth0/angular-storage" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 117, + "old_task_id": 686 + }, + { + "sites": [ + "shopping" + ], + "task_id": 148, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Draft an email to the shop owner via their contact us function for a coupon as {{reason}}", + "instantiation_dict": { + "reason": "my refund is suppoed to be replaced by a coupon" + }, + "intent": "Draft an email to the shop owner via their contact us function for a coupon as my refund is suppoed to be replaced by a coupon", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match" + ], + "reference_answers": null, + "reference_url": "__SHOPPING__/contact/index/", + "program_html": [], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 163, + "old_task_id": 693 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 149, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Today is 3/15/2023, generate a {{report}} {{time_span}}", + "instantiation_dict": { + "report": "sales order report", + "time_span": "for last month" + }, + "intent": "Today is 3/15/2023, generate a sales order report for last month", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__SHOPPING_ADMIN__/reports/report_sales/sales", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[id=\"sales_report_from\"').value", + "required_contents": { + "exact_match": "2/1/23" + } + }, + { + "url": "last", + "locator": "document.querySelector('[id=\"sales_report_to\"').value", + "required_contents": { + "exact_match": "2/28/23" + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 268, + "old_task_id": 704 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 150, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "Create a {{type}} report from {{start_date}} to {{end_date}}", + "instantiation_dict": { + "type": "shipping", + "start_date": "08/05/2022", + "end_date": "03/01/2023" + }, + "intent": "Create a shipping report from 08/05/2022 to 03/01/2023", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__SHOPPING_ADMIN__/reports/report_sales/shipping", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[id=\"sales_report_from\"').value", + "required_contents": { + "exact_match": "8/5/22" + } + }, + { + "url": "last", + "locator": "document.querySelector('[id=\"sales_report_to\"').value", + "required_contents": { + "exact_match": "3/1/23" + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 271, + "old_task_id": 710 + }, + { + "sites": [ + "reddit" + ], + "task_id": 151, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Thumbs down the top {{k}} post ever in {{subreddit}}.", + "instantiation_dict": { + "subreddit": "gadgets", + "k": "1" + }, + "intent": "Thumbs down the top 1 post ever in gadgets.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/gadgets/19459/a-custom-gaming-pc-built-inside-a-vintage-1940s-motorola", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-downvoted" + ] + } + } + ] + }, + "intent_template_id": 24, + "old_task_id": 714 + }, + { + "sites": [ + "reddit" + ], + "task_id": 152, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Like all submissions created by {{user}} in subreddit {{subreddit}}", + "instantiation_dict": { + "subreddit": "earthporn", + "user": "CameronKelsey" + }, + "intent": "Like all submissions created by CameronKelsey in subreddit earthporn", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/EarthPorn/98332/my-favorite-place-on-the-planet-henry-s-fork-of-the-snake", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-upvoted" + ] + } + }, + { + "url": "__REDDIT__/f/EarthPorn/98297/2-years-later-this-is-still-one-of-the-most-incredible", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-upvoted" + ] + } + }, + { + "url": "__REDDIT__/f/EarthPorn/98256/i-can-t-wait-for-all-this-green-to-start-coming-back-little", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-upvoted" + ] + } + } + ] + }, + "intent_template_id": 25, + "old_task_id": 720 + }, + { + "sites": [ + "reddit" + ], + "task_id": 153, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "DisLike all submissions created by {{user}} in subreddit {{subreddit}}", + "instantiation_dict": { + "user": "AdamCannon", + "subreddit": "UpliftingNews" + }, + "intent": "DisLike all submissions created by AdamCannon in subreddit UpliftingNews", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/UpliftingNews/16087/same-sex-marriage-is-now-legal-in-all-of-mexico-s-states", + "locator": "document.querySelector('div.submission__vote').querySelector('form').getAttribute('class')", + "required_contents": { + "must_include": [ + "vote vote--user-downvoted" + ] + } + } + ] + }, + "intent_template_id": 1510, + "old_task_id": 729 + }, + { + "sites": [ + "reddit" + ], + "task_id": 154, + "require_login": true, + "storage_state": "./.auth/reddit_state.json", + "start_url": "__REDDIT__", + "geolocation": null, + "intent_template": "Edit my post on {{post}} by adding a line to the body that says \"{{content}}\"", + "instantiation_dict": { + "post": "Star Trek Starfleet Academy series", + "content": "Every watch makes me feel like a kid again" + }, + "intent": "Edit my post on Star Trek Starfleet Academy series by adding a line to the body that says \"Every watch makes me feel like a kid again\"", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__REDDIT__/f/television/135201/star-trek-starfleet-academy-series-from-alex-kurtzman-and", + "locator": "document.querySelector('.submission__body').outerText", + "required_contents": { + "exact_match": "Every watch makes me feel like a kid again" + } + } + ] + }, + "intent_template_id": 27, + "old_task_id": 733 + }, + { + "sites": [ + "wikipedia", + "map" + ], + "task_id": 155, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Show me the way from {{location}} to the home stadium of {{sport_team}} {{time}}", + "instantiation_dict": { + "location": "Carnegie Mellon University", + "sport_team": "Boston home NBA team", + "time": "" + }, + "intent": "Show me the way from Carnegie Mellon University to the home stadium of Boston home NBA team ", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[name=\"route_from\"').value", + "required_contents": { + "must_include": [ + "Carnegie Mellon University", + "Pittsburgh" + ] + } + }, + { + "url": "last", + "locator": "document.querySelector('[name=\"route_to\"').value", + "required_contents": { + "must_include": [ + "TD Garden", + "Boston", + "Massachusetts" + ] + } + }, + { + "url": "last", + "locator": "document.querySelector(\"div#content select.routing_engines\").selectedIndex", + "required_contents": { + "exact_match": "1" + } + } + ] + }, + "intent_template_id": 94, + "old_task_id": 741 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 156, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Create a new {{scope}} project \"awesome-llms\" and add {{account_list}} as members", + "instantiation_dict": { + "scope": "public", + "account_list": "primer, convexegg, abishek" + }, + "intent": "Create a new public project \"awesome-llms\" and add primer, convexegg, abishek as members", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/awesome-llms", + "locator": "document.querySelector('.visibility-icon').getAttribute('title')", + "required_contents": { + "must_include": [ + "public" + ] + } + }, + { + "url": "__GITLAB__/byteblaze/awesome-llms/-/project_members", + "locator": "", + "required_contents": { + "must_include": [ + "@primer", + "@convexegg", + "@abisubramanya27" + ] + } + } + ] + }, + "intent_template_id": 332, + "old_task_id": 745 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 157, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Start a private project {{project_name}} with {{template}} template and add {{account_list}} as members", + "instantiation_dict": { + "project_name": "web_agent_android_xl", + "template": "Android", + "account_list": "primer, convexegg, abishek" + }, + "intent": "Start a private project web_agent_android_xl with Android template and add primer, convexegg, abishek as members", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/byteblaze/web_agent_android_xl", + "locator": "document.querySelector('.visibility-icon').getAttribute('title')", + "required_contents": { + "must_include": [ + "Private" + ] + } + }, + { + "url": "__GITLAB__/byteblaze/web_agent_android_xl/-/commits", + "locator": "", + "required_contents": { + "must_include": [ + "Initialized from 'Android' project template" + ] + } + }, + { + "url": "__GITLAB__/byteblaze/web_agent_android_xl/-/project_members", + "locator": "", + "required_contents": { + "must_include": [ + "@primer", + "@convexegg", + "@abisubramanya27" + ] + } + } + ] + }, + "intent_template_id": 2100, + "old_task_id": 748 + }, + { + "sites": [ + "map", + "shopping_admin" + ], + "task_id": 158, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Show me the route and driving time from {{city1}} to {{city2}}", + "instantiation_dict": { + "city1": "Allentown, PA", + "city2": "the city where my E-commerce customer Amanda Kim lives" + }, + "intent": "Show me the route and driving time from Allentown, PA to the city where my E-commerce customer Amanda Kim lives", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector(\"div#content select.routing_engines\").selectedIndex", + "required_contents": { + "exact_match": "1" + } + }, + { + "url": "last", + "locator": "document.querySelector('[name=\"route_from\"').value", + "required_contents": { + "must_include": [ + "Allentown" + ] + } + }, + { + "url": "last", + "locator": "document.querySelector('[name=\"route_to\"').value", + "required_contents": { + "must_include": [ + "Hoboken", + "New Jersey" + ] + } + } + ] + }, + "intent_template_id": 42, + "old_task_id": 760 + }, + { + "sites": [ + "map" + ], + "task_id": 159, + "require_login": true, + "storage_state": null, + "start_url": "__MAP__", + "geolocation": null, + "intent_template": "Get directions from {{location/address_1}} to {{location/address_2}} using {{transportation}} options.", + "instantiation_dict": { + "location/address_1": "Carnegie Music Hall in NYC", + "location/address_2": "Carnegie Mellon University", + "transportation": "driving" + }, + "intent": "Get directions from Carnegie Music Hall in NYC to Carnegie Mellon University using driving options.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector(\"div#content select.routing_engines\").selectedIndex", + "required_contents": { + "exact_match": "1" + } + }, + { + "url": "last", + "locator": "document.querySelector('[name=\"route_from\"').value", + "required_contents": { + "must_include": [ + "Carnegie Hall", + "West 57th Street", + "Manhattan", + "New York" + ] + } + }, + { + "url": "last", + "locator": "document.querySelector('[name=\"route_to\"').value", + "required_contents": { + "must_include": [ + "Carnegie Mellon University", + "Pittsburgh" + ] + } + } + ] + }, + "intent_template_id": 54, + "old_task_id": 762 + }, + { + "sites": [ + "shopping_admin" + ], + "task_id": 160, + "require_login": true, + "storage_state": "./.auth/shopping_admin_state.json", + "start_url": "__SHOPPING_ADMIN__", + "geolocation": null, + "intent_template": "{{quantity}} {{product}} arrived, update the stock", + "instantiation_dict": { + "quantity": "5", + "product": "blue Cronus yoga pants with size 33" + }, + "intent": "5 blue Cronus yoga pants with size 33 arrived, update the stock", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/872/", + "locator": "document.querySelector('[name=\"product[quantity_and_stock_status][qty]\"').value", + "required_contents": { + "exact_match": "5" + } + }, + { + "url": "__SHOPPING_ADMIN__/catalog/product/edit/id/872/", + "locator": "document.querySelector('[name=\"product[quantity_and_stock_status][is_in_stock]\"').value", + "required_contents": { + "exact_match": "1" + } + } + ] + }, + "intent_template_id": 241, + "old_task_id": 768 + }, + { + "sites": [ + "gitlab", + "reddit" + ], + "task_id": 161, + "require_login": true, + "storage_state": "./.auth/gitlab.reddit_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Make a folder named {{directory}} on the {{gitlab_repo}} repo and include a file called urls.txt that consists of the links to the 5 most recent posts from {{subreddit}}.", + "instantiation_dict": { + "directory": "car", + "subreddit": "cars", + "gitlab_repo": "gimmiethat.space" + }, + "intent": "Make a folder named car on the gimmiethat.space repo and include a file called urls.txt that consists of the links to the 5 most recent posts from cars.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "exact_match": "N/A" + }, + "reference_url": "", + "program_html": [], + "string_note": "the subreddit does not exist", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 84, + "old_task_id": 791 + }, + { + "sites": [ + "shopping" + ], + "task_id": 162, + "require_login": true, + "storage_state": "./.auth/shopping_state.json", + "start_url": "__SHOPPING__", + "geolocation": null, + "intent_template": "Change the delivery address for my most recent order to {{address}}.", + "instantiation_dict": { + "address": "77 Massachusetts Ave, Cambridge, MA" + }, + "intent": "Change the delivery address for my most recent order to 77 Massachusetts Ave, Cambridge, MA.", + "require_reset": false, + "eval": { + "eval_types": [ + "string_match" + ], + "reference_answers": { + "must_include": [ + "N/A" + ] + }, + "reference_url": "", + "program_html": [], + "string_note": "The shipping address cannot be changed after an order is placed in the website.", + "reference_answer_raw_annotation": "N/A" + }, + "intent_template_id": 191, + "old_task_id": 798 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 163, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Create an issue in {{repo}} repo with title \"{{issue}}\". Assign the issue to {{account}}. Set due date to be {{due}}", + "instantiation_dict": { + "repo": "a11yproject", + "issue": "404 for many URLs", + "account": "myself", + "due": "2030-1-3" + }, + "intent": "Create an issue in a11yproject repo with title \"404 for many URLs\". Assign the issue to myself. Set due date to be 2030-1-3", + "require_reset": false, + "eval": { + "eval_types": [ + "url_match", + "program_html" + ], + "reference_answers": null, + "reference_url": "__GITLAB__/a11yproject/a11yproject.com/-/issues", + "program_html": [ + { + "url": "last", + "locator": "document.querySelector('[data-qa-selector=\"title_content\"]').outerText", + "required_contents": { + "exact_match": "404 for many URLs" + } + }, + { + "url": "last", + "locator": "document.querySelector('[data-testid=\"sidebar-due-date\"').outerText", + "required_contents": { + "must_include": [ + "Jan 3, 2030" + ] + } + }, + { + "url": "last", + "locator": "document.querySelector('.block.assignee').outerText", + "required_contents": { + "must_include": [ + "Byte Blaze" + ] + } + } + ], + "url_note": "GOLD in PRED" + }, + "intent_template_id": 327, + "old_task_id": 809 + }, + { + "sites": [ + "gitlab" + ], + "task_id": 164, + "require_login": true, + "storage_state": "./.auth/gitlab_state.json", + "start_url": "__GITLAB__", + "geolocation": null, + "intent_template": "Assign the issue regarding {{issue}} in {{repo}} to {{account}}.", + "instantiation_dict": { + "repo": "a11yproject", + "issue": 404, + "account": "myself" + }, + "intent": "Assign the issue regarding 404 in a11yproject to myself.", + "require_reset": false, + "eval": { + "eval_types": [ + "program_html" + ], + "reference_answers": null, + "reference_url": "", + "program_html": [ + { + "url": "__GITLAB__/dashboard/issues?scope=all&state=opened&assignee_username=byteblaze", + "locator": "", + "required_contents": { + "must_include": [ + "404s, bad host, timeouts, bad urls for URLs linked from website" + ] + } + } + ] + }, + "intent_template_id": 999, + "old_task_id": 811 + } +] \ No newline at end of file diff --git a/VAB-WebArena-Lite/new/tokenizers.py b/VAB-WebArena-Lite/new/tokenizers.py new file mode 100644 index 0000000..2234040 --- /dev/null +++ b/VAB-WebArena-Lite/new/tokenizers.py @@ -0,0 +1,29 @@ +from typing import Any + +import tiktoken +from transformers import LlamaTokenizer # type: ignore + + +class Tokenizer(object): + def __init__(self, provider: str, model_name: str) -> None: + if provider == "openai": + self.tokenizer = tiktoken.encoding_for_model(model_name) + elif provider == "huggingface": + self.tokenizer = LlamaTokenizer.from_pretrained(model_name) + # turn off adding special tokens automatically + self.tokenizer.add_special_tokens = False # type: ignore[attr-defined] + self.tokenizer.add_bos_token = False # type: ignore[attr-defined] + self.tokenizer.add_eos_token = False # type: ignore[attr-defined] + elif provider in ["google", "api", "finetune"]: + self.tokenizer = None # Not used for input length computation, as Gemini is based on characters + else: + raise NotImplementedError + + def encode(self, text: str) -> list[int]: + return self.tokenizer.encode(text) + + def decode(self, ids: list[int]) -> str: + return self.tokenizer.decode(ids) + + def __call__(self, text: str) -> list[int]: + return self.tokenizer.encode(text) diff --git a/VAB-WebArena-Lite/new/utils.py b/VAB-WebArena-Lite/new/utils.py new file mode 100644 index 0000000..4558585 --- /dev/null +++ b/VAB-WebArena-Lite/new/utils.py @@ -0,0 +1,87 @@ +import argparse +from typing import Any + +try: + from vertexai.preview.generative_models import Image + from llms import generate_from_gemini_completion +except: + print('Google Cloud not set up, skipping import of vertexai.preview.generative_models.Image and llms.generate_from_gemini_completion') + +from llms import ( + generate_from_huggingface_completion, + generate_from_openai_chat_completion, + generate_from_openai_completion, + generate_with_api, + lm_config, +) + +APIInput = str | list[Any] | dict[str, Any] + + +def call_llm( + lm_config: lm_config.LMConfig, + prompt: APIInput, +) -> str: + response: str + if lm_config.provider == "openai": + if lm_config.mode == "chat": + assert isinstance(prompt, list) + response = generate_from_openai_chat_completion( + messages=prompt, + model=lm_config.model, + temperature=lm_config.gen_config["temperature"], + top_p=lm_config.gen_config["top_p"], + context_length=lm_config.gen_config["context_length"], + max_tokens=lm_config.gen_config["max_tokens"], + stop_token=None, + ) + elif lm_config.mode == "completion": + assert isinstance(prompt, str) + response = generate_from_openai_completion( + prompt=prompt, + engine=lm_config.model, + temperature=lm_config.gen_config["temperature"], + max_tokens=lm_config.gen_config["max_tokens"], + top_p=lm_config.gen_config["top_p"], + stop_token=lm_config.gen_config["stop_token"], + ) + else: + raise ValueError( + f"OpenAI models do not support mode {lm_config.mode}" + ) + elif lm_config.provider == "huggingface": + assert isinstance(prompt, str) + response = generate_from_huggingface_completion( + prompt=prompt, + model_endpoint=lm_config.gen_config["model_endpoint"], + temperature=lm_config.gen_config["temperature"], + top_p=lm_config.gen_config["top_p"], + stop_sequences=lm_config.gen_config["stop_sequences"], + max_new_tokens=lm_config.gen_config["max_new_tokens"], + ) + elif lm_config.provider == "google": + assert isinstance(prompt, list) + assert all( + [isinstance(p, str) or isinstance(p, Image) for p in prompt] + ) + response = generate_from_gemini_completion( + prompt=prompt, + engine=lm_config.model, + temperature=lm_config.gen_config["temperature"], + max_tokens=lm_config.gen_config["max_tokens"], + top_p=lm_config.gen_config["top_p"], + ) + elif lm_config.provider in ["api", "finetune"]: + args = { + "temperature": lm_config.gen_config["temperature"], # openai, gemini, claude + "max_tokens": lm_config.gen_config["max_tokens"], # openai, gemini, claude + "top_k": lm_config.gen_config["top_p"], # qwen + } + response = generate_with_api(prompt, lm_config.model, args) + + else: + raise NotImplementedError( + f"Provider {lm_config.provider} not implemented" + ) + + return response diff --git a/VAB-WebArena-Lite/new/wa_parallel_run.sh b/VAB-WebArena-Lite/new/wa_parallel_run.sh new file mode 100644 index 0000000..2977e54 --- /dev/null +++ b/VAB-WebArena-Lite/new/wa_parallel_run.sh @@ -0,0 +1,78 @@ +#!/bin/bash +DATASET='webarena' # webarena, visualwebarena +result_dir='' +provider='' +model='' +instruction_path='agent/prompts/jsons/p_som_cot_id_actree_3s.json' # e.g., agent/prompts/jsons/p_cot_id_actree_2s.json +test_config_base_dir='config_files/wa/test_webarena_lite' # e.g., config_files/wa/test_webarena_lite +temperature=0.0 + +SERVER='' # your server address +MAP_SERVER='' # the same as SERVER +OPENAI_API_KEY='' +OPENAI_ORGANIZATION='' +CONDA_ENV_NAME='' # the name of your conda environment + +ENV_VARIABLES="export DATASET=${DATASET}; export SHOPPING='http://${SERVER}:7770';export SHOPPING_ADMIN='http://${SERVER}:7780/admin';export REDDIT='http://${SERVER}:9999';export GITLAB='http://${SERVER}:8023';export MAP='http://${MAP_SERVER}:3000';export WIKIPEDIA='http://${SERVER}:8888/wikipedia_en_all_maxi_2022-05/A/User:The_other_Kiwix_guy/Landing';export HOMEPAGE='http://${SERVER}:4399';export OPENAI_API_KEY=${OPENAI_API_KEY};export OPENAI_ORGANIZATION=${OPENAI_ORGANIZATION}" + +# get the number of tmux panes +num_panes=$(tmux list-panes | wc -l) + +# calculate how many panes need to be created +let "panes_to_create = 8 - num_panes" + +# array of tmux commands to create each pane +tmux_commands=( + 'tmux split-window -h' + 'tmux split-window -v' + 'tmux select-pane -t 0; tmux split-window -v' + 'tmux select-pane -t 0; tmux split-window -v' + 'tmux select-pane -t 2; tmux split-window -v' + 'tmux select-pane -t 4; tmux split-window -v' + 'tmux select-pane -t 6; tmux split-window -v' +) + +# create panes up to 8 +for ((i=0; i<$panes_to_create; i++)); do + eval ${tmux_commands[$i]} +done + +#!/bin/bash + +# Function to run a job +run_job() { + tmux select-pane -t $1 + tmux send-keys "tmux set mouse on; conda activate ${CONDA_ENV_NAME}; ${ENV_VARIABLES}; until python run.py --viewport_width 1280 --viewport_height 720 --test_start_idx $2 --test_end_idx $3 --provider ${provider} --model ${model} --instruction_path ${instruction_path} --temperature ${temperature} --test_config_base_dir ${test_config_base_dir} --result_dir ${result_dir}; do echo 'crashed' >&2; sleep 1; done" C-m + sleep 3 +} + +TOLERANCE=2 +run_batch() { + args=("$@") # save all arguments in an array + num_jobs=${#args[@]} # get number of arguments + + for ((i=1; i<$num_jobs; i++)); do + run_job $i ${args[i-1]} ${args[i]} + done + + # Wait for all jobs to finish + while tmux list-panes -F "#{pane_pid} #{pane_current_command}" | grep -q python; do + sleep 100 # wait for 10 seconds before checking again + done + + # Run checker + while ! python scripts/check_error_runs.py ${result_dir} --delete_errors --tolerance ${TOLERANCE}; do + echo "Check failed, rerunning jobs..." + for ((i=1; i<$num_jobs; i++)); do + run_job $i ${args[i-1]} ${args[i]} + done + + # Wait for all jobs to finish + while tmux list-panes -F "#{pane_pid} #{pane_current_command}" | grep -q python; do + sleep 100 # wait for 10 seconds before checking again + done + done + +} + +run_batch 0 24 48 72 96 120 143 165 diff --git a/VAB-WebArena-Lite/refresh_website_dockers.sh b/VAB-WebArena-Lite/refresh_website_dockers.sh new file mode 100644 index 0000000..c6f8996 --- /dev/null +++ b/VAB-WebArena-Lite/refresh_website_dockers.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +docker stop shopping +docker stop shopping_admin +docker stop forum +docker stop gitlab + +docker rm shopping +docker rm shopping_admin +docker rm forum +docker rm gitlab + +# One Stop Shop +# docker load --input shopping_final_0712.tar +docker run --name shopping -p 7770:80 -d shopping_final_0712 + +# CMS +# docker load --input shopping_admin_final_0719.tar +docker run --name shopping_admin -p 7780:80 -d shopping_admin_final_0719 + +# Reddit +# docker load --input postmill-populated-exposed-withimg.tar +docker run --name forum -p 9999:80 -d postmill-populated-exposed-withimg + +# GitLab +# docker load --input gitlab-populated-final-port8023.tar +docker run --name gitlab --shm-size="10g" -d -p 8023:8023 gitlab-populated-final-port8023 /opt/gitlab/embedded/bin/runsvdir-start + +sleep 60 + +# Define your actual server hostname +YOUR_ACTUAL_HOSTNAME="http://localhost" +# Remove trailing / if it exists +YOUR_ACTUAL_HOSTNAME=${YOUR_ACTUAL_HOSTNAME%/} + +# OSS +docker exec shopping /var/www/magento2/bin/magento setup:store-config:set --base-url="${YOUR_ACTUAL_HOSTNAME}:7770" +docker exec shopping mysql -u magentouser -pMyPassword magentodb -e "UPDATE core_config_data SET value='${YOUR_ACTUAL_HOSTNAME}:7775/' WHERE path = 'web/secure/base_url';" +docker exec shopping /var/www/magento2/bin/magento cache:flush + +# Disable re-indexing of products +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalogrule_product +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalogrule_rule +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalogsearch_fulltext +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalog_category_product +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule customer_grid +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule design_config_grid +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule inventory +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalog_product_category +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalog_product_attribute +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule catalog_product_price +docker exec shopping /var/www/magento2/bin/magento indexer:set-mode schedule cataloginventory_stock + +# CMS +docker exec shopping_admin /var/www/magento2/bin/magento setup:store-config:set --base-url="${YOUR_ACTUAL_HOSTNAME}:7780" +docker exec shopping_admin mysql -u magentouser -pMyPassword magentodb -e "UPDATE core_config_data SET value='${YOUR_ACTUAL_HOSTNAME}:7780/' WHERE path = 'web/secure/base_url';" +docker exec shopping_admin /var/www/magento2/bin/magento cache:flush + +# Forum +docker exec forum sed -i '/@RateLimit/,/)/d' /var/www/html/src/DataObject/CommentData.php +docker exec forum sed -i '/@RateLimit/,/)/d' /var/www/html/src/DataObject/SubmissionData.php +docker exec forum sed -i '/@RateLimit/,/)/d' /var/www/html/src/DataObject/UserData.php +docker exec forum bin/console cache:clear --env=prod + +sleep 60 + +# Gitlab +docker exec gitlab sed -i "s|^external_url.*|external_url '${YOUR_ACTUAL_HOSTNAME}:8023'|" /etc/gitlab/gitlab.rb +docker exec gitlab sed -i "s/.*postgresql\['max_connections'.*/postgresql\['max_connections'\] = 2000/g" /etc/gitlab/gitlab.rb +docker exec gitlab gitlab-ctl reconfigure +docker exec gitlab gitlab-ctl restart diff --git a/VAB-WebArena-Lite/replace.sh b/VAB-WebArena-Lite/replace.sh new file mode 100644 index 0000000..add244c --- /dev/null +++ b/VAB-WebArena-Lite/replace.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# 1. reset the original environment +cd visualwebarena +rm -rf .git +cd .. + +# 2. replace files +# webarena-lite +cp -f new/test_webarena_lite.raw.json visualwebarena/config_files/wa/test_webarena_lite.raw.json +cp -f new/generate_test_data.py visualwebarena/scripts/generate_test_data.py + +# agent +cp -f new/run.py visualwebarena/run.py +cp -f new/agent.py visualwebarena/agent/agent.py +cp -f new/prompt_constructor.py visualwebarena/agent/prompts/prompt_constructor.py + +# llms +cp -f new/utils.py visualwebarena/llms/utils.py +cp -f new/llms_init.py visualwebarena/llms/__init__.py +cp -f new/lm_config.py visualwebarena/llms/lm_config.py +cp -f new/tokenizers.py visualwebarena/llms/tokenizers.py +cp -f new/api_utils.py visualwebarena/llms/providers/api_utils.py +cp -f new/openai_utils.py visualwebarena/llms/providers/openai_utils.py + +# eval +cp -f new/evaluators.py visualwebarena/evaluation_harness/evaluators.py +cp -f new/helper_functions.py visualwebarena/evaluation_harness/helper_functions.py + +# misc +cp -f README.md visualwebarena/README.md +cp -f new/wa_parallel_run.sh visualwebarena/wa_parallel_run.sh + +# 3. remove temporary files +mv visualwebarena/* . +rm -rf new +rm -rf visualwebarena diff --git a/assets/framework.png b/assets/framework.png new file mode 100644 index 0000000000000000000000000000000000000000..2e108726e4f27133a1742342252fdeac8e0f9dc2 GIT binary patch literal 417134 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

fPQxi&H#F1eOHfODM579$}({x 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μ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 530.30.02. + +2. Besides [docker](https://www.docker.com/), install [NVIDIA container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) on your machine. + +3. Get pre-built docker image. + + - If you have access to docker hub: + + ```bash + docker pull tianjiezhang/vab_minecraft:latest + ``` + + - Or you can download from ModelScope. + + 1. Make sure `git-lfs` is installed. + + 2. Download from ModelScope: + + ```bash + git lfs install + + git clone https://www.modelscope.cn/datasets/VisualAgentBench/VAB-Minecraft.git + ``` + + 3. Load the docker image from ModelScope dataset. + + ```bash + docker load -i VAB-Minecraft/vab_minecraft.tar + ``` + +4. Download weights of Steve-1 to `data/minecraft`. Please make sure you have access to google drive. + + ```bash + python scripts/minecraft_download.py + ``` + +## Get Started + +According to your hardware equipment, fill `available_ports` and `available_devices` in the task configuration file `configs/tasks/minecraft.yaml`. + +- `available_ports`: Please fill in available ports in your machine. Each concurrent docker container requires 1 port for communication with the task server. Ensure that you provide enough ports to accommodate the expected concurrency. + +- `available_devices`: Please fill in GPU IDs and their corresponding capability of concurrency. Each concurrent docker container occupies about **3.3 GB** memory. Ensure that you provide enough GPU memory to accommodate the expected concurrency. + +**Note: If you manually shut down the task server and assigner, please ensure you also stop the Minecraft containers to free up the ports!** diff --git a/docs/README_setup.md b/docs/detailed_setups/VAB-OmniGibson.md similarity index 57% rename from docs/README_setup.md rename to docs/detailed_setups/VAB-OmniGibson.md index af93a5f..6586d21 100644 --- a/docs/README_setup.md +++ b/docs/detailed_setups/VAB-OmniGibson.md @@ -57,57 +57,3 @@ 2. Load the new value: `sudo sysctl -p`. **Note: If you manually shut down the task server and assigner, please ensure you also stop the OmniGibson containers to free up the ports!** - -# Setup for VAB-Minecraft - -## Installation - -1. We have tested on Ubuntu. VAB-Minecraft requires at least 4 GB NVIDIA GPU and NVIDIA GPU driver version >= 530.30.02. - -2. Besides [docker](https://www.docker.com/), install [NVIDIA container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) on your machine. - -3. Get pre-built docker image. - - - If you have access to docker hub: - - ```bash - docker pull tianjiezhang/vab_minecraft:latest - ``` - - - Or you can download from ModelScope. - - 1. Make sure `git-lfs` is installed. - - 2. Download from ModelScope: - - ```bash - git lfs install - - git clone https://www.modelscope.cn/datasets/VisualAgentBench/VAB-Minecraft.git - ``` - - 3. Load the docker image from ModelScope dataset. - - ```bash - docker load -i VAB-Minecraft/vab_minecraft.tar - ``` - -4. Download weights of Steve-1 to `data/minecraft`. Please make sure you have access to google drive. - - ```bash - python scripts/minecraft_download.py - ``` - -## Get Started - -According to your hardware equipment, fill `available_ports` and `available_devices` in the task configuration file `configs/tasks/minecraft.yaml`. - -- `available_ports`: Please fill in available ports in your machine. Each concurrent docker container requires 1 port for communication with the task server. Ensure that you provide enough ports to accommodate the expected concurrency. - -- `available_devices`: Please fill in GPU IDs and their corresponding capability of concurrency. Each concurrent docker container occupies about **3.3 GB** memory. Ensure that you provide enough GPU memory to accommodate the expected concurrency. - -**Note: If you manually shut down the task server and assigner, please ensure you also stop the Minecraft containers to free up the ports!** - -# Setup for VAB-CSS - -TODO \ No newline at end of file

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