[Benchmark Contents] ♦ [Getting Started] ♦ [Live Demo] ♦ [BrowserGym] ♦ [Citing This Work] ♦ Join us on Discord!
Want to brainstorm ideas, troubleshoot issues, or just geek out with fellow agent builders? Our official Discord server is the perfect place to connect and collaborate. Come hang out with us to:
- Exchange tips, tricks, and success stories
- Get real-time support and feedback
- Stay updated on the latest features and announcements
Looking for more tools and resources? Check out these open-source projects:
Both are part of the broader BrowserGym ecosystem
-
[ICML 2024] WorkArena: How Capable are Web Agents at Solving Common Knowledge Work Tasks? [Paper]
-
[NeurIPS 2024] WorkArena++: Towards Compositional Planning and Reasoning-based Common Knowledge Work Tasks [Paper]
WorkArena is a suite of browser-based tasks tailored to gauge web agents' effectiveness in supporting routine tasks for knowledge workers.
By harnessing the ubiquitous ServiceNow platform, this benchmark will be instrumental in assessing the widespread state of such automations in modern knowledge work environments.
The preferred way to evaluate on WorkArena is with AgentLab which will conduct parallel experiments through BrowserGym and report on a unified leaderboard.
workarena_grid.mp4
To setup WorkArena, you will need to gain access to ServiceNow instances and install our Python package locally. Follow the steps below to achieve this.
- Navigate to https://huggingface.co/datasets/ServiceNow/WorkArena-Instances.
- Fill the form, accept the terms to gain access to the gated repository and wait for approval.
- Ensure that the machine where you will run WorkArena is authenticated with Hugging Face (e.g., via huggingface-cli login or the HUGGING_FACE_HUB_TOKEN environment variable).
Run the following command to install WorkArena in the BrowswerGym environment:
pip install browsergym-workarena
Then, install Playwright:
playwright install
Your installation is now complete! 🎉
At the moment, WorkArena-L1 includes 19,912 unique instances drawn from 33 tasks that cover the main components of the ServiceNow user interface, otherwise referred to as "atomic" tasks. WorkArena++ contains 682 tasks, each one sampling among thousands of potential configurations. WorkArena++ uses the atomic components presented in WorkArena, and composes them into real-world use cases evaluating planning, reasoning, and memorizing abilities of agents.
The following videos show an agent built on GPT-4-vision interacting with every atomic component of the benchmark. As emphasized by our results, this benchmark is not solved and thus, the performance of the agent is not always on point.
Goal: The agent must search for specific information in the company knowledge base.
The agent interacts with the user via BrowserGym's conversational interface.
knowledge_base.mp4
Goal: The agent must fill a complex form with specific values for each field.
form.mp4
Goal: The agent must order items with specific configurations from the company's service catalog.
servicecatalog.mp4
Goal: The agent must filter a list according to some specifications.
In this example, the agent struggles to manipulate the UI and fails to create the filter.
list.mp4
Goal: The agent must navigate to a specific application using the main menu.
menu.mp4
Goal: The agent must answer a question that requires reading charts and (optionally) performing simple reasoning over them.
Note: For demonstration purposes, a human is controlling the cursor since this is a pure retrieval task
dashboard.mp4
Run this code to see WorkArena in action.
Note: the following example executes WorkArena's oracle (cheat) function to solve each task. To evaluate an agent, calls to env.step() must be used instead.
- To run a demo of WorkArena-L1 (ICML 2024) tasks using BrowserGym, use the following script:
import random
from browsergym.core.env import BrowserEnv
from browsergym.workarena import ATOMIC_TASKS
from time import sleep
random.shuffle(ATOMIC_TASKS)
for task in ATOMIC_TASKS:
print("Task:", task)
# Instantiate a new environment
env = BrowserEnv(task_entrypoint=task,
headless=False)
env.reset()
# Cheat functions use Playwright to automatically solve the task
env.chat.add_message(role="assistant", msg="On it. Please wait...")
cheat_messages = []
env.task.cheat(env.page, cheat_messages)
# Send cheat messages to chat
for cheat_msg in cheat_messages:
env.chat.add_message(role=cheat_msg["role"], msg=cheat_msg["message"])
# Post solution to chat
env.chat.add_message(role="assistant", msg="I'm done!")
# Validate the solution
reward, stop, message, info = env.task.validate(env.page, cheat_messages)
if reward == 1:
env.chat.add_message(role="user", msg="Yes, that works. Thanks!")
else:
env.chat.add_message(role="user", msg=f"No, that doesn't work. {info.get('message', '')}")
sleep(3)
env.close()- To run a demo of WorkArena-L2 (WorkArena++) tasks using BrowserGym, use the following script. Change the filter on line 6 to
l3to sample L3 tasks.
import random
from browsergym.core.env import BrowserEnv
from browsergym.workarena import get_all_tasks_agents
AGENT_L2_SAMPLED_SET = get_all_tasks_agents(filter="l2")
AGENT_L2_SAMPLED_TASKS, AGENT_L2_SEEDS = [sampled_set[0] for sampled_set in AGENT_L2_SAMPLED_SET], [
sampled_set[1] for sampled_set in AGENT_L2_SAMPLED_SET
]
from time import sleep
for (task, seed) in zip(AGENT_L2_SAMPLED_TASKS, AGENT_L2_SEEDS):
print("Task:", task)
# Instantiate a new environment
env = BrowserEnv(task_entrypoint=task,
headless=False)
env.reset()
# Cheat functions use Playwright to automatically solve the task
env.chat.add_message(role="assistant", msg="On it. Please wait...")
for i in range(len(env.task)):
sleep(1)
env.task.cheat(page=env.page, chat_messages=env.chat.messages, subtask_idx=i)
sleep(1)
reward, done, message, info = env.task.validate(page=env.page, chat_messages=env.chat.messages)
if reward == 1:
env.chat.add_message(role="user", msg="Yes, that works. Thanks!")
else:
env.chat.add_message(role="user", msg=f"No, that doesn't work. {info.get('message', '')}")
sleep(3)
env.close()Note: the following example executes WorkArena's oracle (cheat) function to solve each task. To evaluate an agent, calls to env.step() must be used instead.
Please use the following BibTeX to cite our work:
@misc{workarena2024,
title={WorkArena: How Capable Are Web Agents at Solving Common Knowledge Work Tasks?},
author={Alexandre Drouin and Maxime Gasse and Massimo Caccia and Issam H. Laradji and Manuel Del Verme and Tom Marty and Léo Boisvert and Megh Thakkar and Quentin Cappart and David Vazquez and Nicolas Chapados and Alexandre Lacoste},
year={2024},
eprint={2403.07718},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@misc{boisvert2024workarenacompositionalplanningreasoningbased,
title={WorkArena++: Towards Compositional Planning and Reasoning-based Common Knowledge Work Tasks},
author={Léo Boisvert and Megh Thakkar and Maxime Gasse and Massimo Caccia and Thibault Le Sellier De Chezelles and Quentin Cappart and Nicolas Chapados and Alexandre Lacoste and Alexandre Drouin},
year={2024},
eprint={2407.05291},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2407.05291},
}