browsergym-workarena 0.1.0rc7__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- browsergym/workarena/__init__.py +3 -2
- browsergym/workarena/api/ui_themes.py +35 -0
- browsergym/workarena/api/user.py +153 -0
- browsergym/workarena/api/utils.py +1 -1
- browsergym/workarena/config.py +43 -1
- browsergym/workarena/data_files/setup_files/ui_themes/workarena_themes.xml +2313 -0
- browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json +1 -0
- browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json +1 -0
- browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json +1 -0
- browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json +1 -0
- browsergym/workarena/install.py +620 -155
- browsergym/workarena/tasks/base.py +85 -26
- browsergym/workarena/tasks/dashboard.py +620 -0
- browsergym/workarena/tasks/form.py +121 -85
- browsergym/workarena/tasks/knowledge.py +30 -14
- browsergym/workarena/tasks/list.py +121 -67
- browsergym/workarena/tasks/navigation.py +18 -16
- browsergym/workarena/tasks/scripts/generate_dashboard_configs.py +272 -0
- browsergym/workarena/tasks/scripts/generate_forms.py +2 -2
- browsergym/workarena/tasks/scripts/list.py +2 -2
- browsergym/workarena/tasks/scripts/validate.py +2 -2
- browsergym/workarena/tasks/service_catalog.py +106 -74
- browsergym/workarena/tasks/utils/form.py +5 -3
- browsergym/workarena/tasks/utils/js_utils.js +123 -2
- browsergym/workarena/tasks/utils/string.py +15 -0
- browsergym/workarena/tasks/utils/utils.py +20 -0
- browsergym/workarena/utils.py +31 -2
- {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/METADATA +7 -3
- {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/RECORD +32 -21
- {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/WHEEL +1 -1
- {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/entry_points.txt +0 -0
- {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -3,6 +3,39 @@ Javascript utility functions for tasks
|
|
|
3
3
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Function to find an element in multiple nested shadow DOMs
|
|
9
|
+
*
|
|
10
|
+
* @param {string} selector - query selector to find the element
|
|
11
|
+
* @param {HTMLElement} root - root element to start the search
|
|
12
|
+
*
|
|
13
|
+
* @returns {HTMLElement} - element with the given id or null if not found
|
|
14
|
+
*/
|
|
15
|
+
function findElementInShadowDOM(selector, root = document) {
|
|
16
|
+
// Check if current root has the element
|
|
17
|
+
const element = root.querySelector(selector);
|
|
18
|
+
if (element) {
|
|
19
|
+
return element;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// If not found, search in the shadow DOM of each node
|
|
23
|
+
const shadowRoots = Array.from(root.querySelectorAll('*'))
|
|
24
|
+
.map(el => el.shadowRoot)
|
|
25
|
+
.filter(sr => sr !== null);
|
|
26
|
+
|
|
27
|
+
for (const shadowRoot of shadowRoots) {
|
|
28
|
+
const foundElement = findElementInShadowDOM(selector, shadowRoot);
|
|
29
|
+
if (foundElement) {
|
|
30
|
+
return foundElement;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Return null if the element is not found in any shadow root
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
/**
|
|
7
40
|
* Function that registers to the gsft_main afterload event and sets a flag when it is loaded
|
|
8
41
|
*/
|
|
@@ -24,6 +57,7 @@ function registerGsftMainLoaded(){
|
|
|
24
57
|
}
|
|
25
58
|
}
|
|
26
59
|
|
|
60
|
+
|
|
27
61
|
/**
|
|
28
62
|
* Function to wait for a condition to be met (asynchronous)
|
|
29
63
|
* use as: waitForCondition(condition, 100).then(function)
|
|
@@ -42,15 +76,102 @@ function waitForCondition(condition, pollInterval=100) {
|
|
|
42
76
|
});
|
|
43
77
|
}
|
|
44
78
|
|
|
79
|
+
|
|
45
80
|
/**
|
|
46
81
|
* WorkArena Logger
|
|
47
82
|
*
|
|
48
83
|
* @param {string} msg - message to log
|
|
84
|
+
* @param {string} callerName - name of the function that called the logger
|
|
49
85
|
* @param {string} level - log level (info, warn, error)
|
|
50
86
|
*/
|
|
51
|
-
function waLog(msg, level) {
|
|
87
|
+
function waLog(msg, callerName, level) {
|
|
52
88
|
if (level === undefined) {
|
|
53
89
|
level = 'info';
|
|
54
90
|
}
|
|
55
|
-
|
|
91
|
+
// Get current time
|
|
92
|
+
const now = new Date();
|
|
93
|
+
const timeString = now.toTimeString().split(' ')[0]; // Format as "HH:MM:SS"
|
|
94
|
+
|
|
95
|
+
// Get the current frame's id (if it's top level, replace by "top")
|
|
96
|
+
let frameId = window.frameElement?.id;
|
|
97
|
+
if (frameId === undefined) {
|
|
98
|
+
frameId = 'top';
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
if (callerName != undefined) {
|
|
103
|
+
console[level](`WorkArena - ${callerName} - ${frameId}: [${timeString}] ${msg}`);
|
|
104
|
+
} else {
|
|
105
|
+
console[level](`WorkArena - ${frameId}: [${timeString}] ${msg}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Protects the execution of a function by URL
|
|
112
|
+
*
|
|
113
|
+
* @param {function} func - function to protect
|
|
114
|
+
* @param {string} url - url to check
|
|
115
|
+
*
|
|
116
|
+
* @returns {function} - protected function (returns null if URL is not valid)
|
|
117
|
+
*/
|
|
118
|
+
async function protectExecutionByURL(func, url) {
|
|
119
|
+
// Get the name of func
|
|
120
|
+
const funcName = func.name;
|
|
121
|
+
|
|
122
|
+
// Wait until the window has finished navigating
|
|
123
|
+
await waitForCondition(() => window.location.href !== 'about:blank', 100);
|
|
124
|
+
|
|
125
|
+
// Decode URL components in the current window location and the url argument
|
|
126
|
+
const decodedCurrentUrl = decodeURIComponent(window.location.href);
|
|
127
|
+
const decodedExpectedUrl = decodeURIComponent(url);
|
|
128
|
+
|
|
129
|
+
if (decodedCurrentUrl.includes(decodedExpectedUrl)) {
|
|
130
|
+
waLog(`URL is valid. Proceeding...`, funcName, 'info');
|
|
131
|
+
return func;
|
|
132
|
+
} else {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Run a function only in the gsft_main iframe
|
|
140
|
+
*
|
|
141
|
+
* @param {function} func - function to protect
|
|
142
|
+
*/
|
|
143
|
+
function runOnlyInGsftMain(func){
|
|
144
|
+
// Get the name of func
|
|
145
|
+
const funcName = func.name;
|
|
146
|
+
|
|
147
|
+
if (window.frameElement?.id === 'gsft_main'){
|
|
148
|
+
waLog(`gsft_main detected. Proceeding...`, funcName, 'info');
|
|
149
|
+
|
|
150
|
+
// Wait for the iframe to be fully loaded
|
|
151
|
+
waitForCondition(() => window.WORKARENA_LOAD_COMPLETE === true, 100)
|
|
152
|
+
.then(
|
|
153
|
+
function(){
|
|
154
|
+
waLog(`gsft_main has finished loading. Proceeding...`, funcName, 'info');
|
|
155
|
+
func();
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Function to run a function in gsft_main only if the URL matches
|
|
164
|
+
*
|
|
165
|
+
* @param {function} func - function to protect
|
|
166
|
+
* @param {string} url - url to check
|
|
167
|
+
*/
|
|
168
|
+
async function runInGsftMainOnlyAndProtectByURL(func, url){
|
|
169
|
+
// Protect the function by URL
|
|
170
|
+
const protectedFunc = await protectExecutionByURL(func, url);
|
|
171
|
+
if (protectedFunc === null) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Run the protected function in gsft_main
|
|
176
|
+
runOnlyInGsftMain(protectedFunc);
|
|
56
177
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Various utility functions for string manipulation.
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def generate_trigrams(word):
|
|
8
|
+
return [word[i : i + 3] for i in range(len(word) - 2)]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def share_tri_gram(str1, str2):
|
|
12
|
+
tri_grams1 = set(generate_trigrams(str1))
|
|
13
|
+
tri_grams2 = set(generate_trigrams(str2))
|
|
14
|
+
|
|
15
|
+
return bool(tri_grams1.intersection(tri_grams2))
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import playwright.sync_api
|
|
3
|
+
|
|
4
|
+
from urllib import parse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def check_url_suffix_match(page: playwright.sync_api.Page, expected_url: str, task) -> bool:
|
|
8
|
+
"""
|
|
9
|
+
Check if the current page URL matches the expected URL
|
|
10
|
+
"""
|
|
11
|
+
expected_url = parse.unquote(expected_url)
|
|
12
|
+
expected_url_suffix = parse.urlparse(expected_url).path
|
|
13
|
+
|
|
14
|
+
page_url = page.evaluate("window.location.href")
|
|
15
|
+
page_url = parse.unquote(page_url)
|
|
16
|
+
page_suffix = parse.urlparse(page_url).path
|
|
17
|
+
if expected_url_suffix not in page_suffix:
|
|
18
|
+
logging.debug(f"Not in the expected URL for {task.__class__.__name__}, but in {page.url}")
|
|
19
|
+
return False
|
|
20
|
+
return True
|
browsergym/workarena/utils.py
CHANGED
|
@@ -26,7 +26,7 @@ def impersonate_user(username: str, page: playwright.sync_api.Page):
|
|
|
26
26
|
* If you provide a username that matches to multiple users (e.g., a partial one), the first one will be selected
|
|
27
27
|
|
|
28
28
|
"""
|
|
29
|
-
page.
|
|
29
|
+
page.locator(".header-avatar-button").click()
|
|
30
30
|
page.get_by_role("menuitem", name="Impersonate user").click()
|
|
31
31
|
page.locator("input.now-typeahead-native-input").click()
|
|
32
32
|
page.locator("input.now-typeahead-native-input").fill(username)
|
|
@@ -67,4 +67,33 @@ def ui_login(instance: SNowInstance, page: playwright.sync_api.Page):
|
|
|
67
67
|
# Check if we have been returned to the login page (appends /welcome.do)
|
|
68
68
|
current_url = parse.urlparse(parse.unquote(page.evaluate("() => window.location.href")))
|
|
69
69
|
if current_url.path.endswith("/welcome.do"):
|
|
70
|
-
raise RuntimeError("Login failed.")
|
|
70
|
+
raise RuntimeError("Login failed. Check credentials.")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def url_login(instance: SNowInstance, page: playwright.sync_api.Page):
|
|
74
|
+
"""
|
|
75
|
+
Log into the instance via the URL
|
|
76
|
+
|
|
77
|
+
Parameters:
|
|
78
|
+
-----------
|
|
79
|
+
instance:
|
|
80
|
+
The instance to log into
|
|
81
|
+
page:
|
|
82
|
+
The page instance to use for the URL login
|
|
83
|
+
|
|
84
|
+
"""
|
|
85
|
+
(snow_username, snow_password) = instance.snow_credentials
|
|
86
|
+
|
|
87
|
+
# Encode special characters
|
|
88
|
+
snow_username = parse.quote(snow_username)
|
|
89
|
+
snow_password = parse.quote(snow_password)
|
|
90
|
+
|
|
91
|
+
# Log in via URL
|
|
92
|
+
page.goto(
|
|
93
|
+
f"{instance.snow_url}/login.do?user_name={snow_username}&user_password={snow_password}&sys_action=sysverb_login"
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Check if we have been returned to the login page
|
|
97
|
+
current_url = parse.urlparse(parse.unquote(page.evaluate("() => window.location.href")))
|
|
98
|
+
if "login.do" in current_url.path:
|
|
99
|
+
raise RuntimeError("Login failed. Check credentials and make sure to have run installer.")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: browsergym-workarena
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: WorkArena benchmark for BrowserGym
|
|
5
5
|
Project-URL: homepage, https://github.com/ServiceNow/WorkArena
|
|
6
6
|
Author: Léo Boisvert, Alex Drouin, Maxime Gasse, Alex Lacoste, Manuel Del Verme
|
|
@@ -13,11 +13,13 @@ Classifier: Operating System :: OS Independent
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
15
15
|
Requires-Python: >3.7
|
|
16
|
-
Requires-Dist: browsergym-core==0.
|
|
16
|
+
Requires-Dist: browsergym-core==0.2.0
|
|
17
17
|
Requires-Dist: english-words>=2.0.1
|
|
18
|
+
Requires-Dist: faker>=24.11.0
|
|
18
19
|
Requires-Dist: numpy>=1.14
|
|
19
20
|
Requires-Dist: requests>=2.31
|
|
20
21
|
Requires-Dist: tenacity>=8.2.3
|
|
22
|
+
Requires-Dist: tqdm>=4.66.2
|
|
21
23
|
Description-Content-Type: text/markdown
|
|
22
24
|
|
|
23
25
|
# WorkArena: How Capable are Web Agents at Solving Common Knowledge Work Tasks?
|
|
@@ -32,10 +34,12 @@ WorkArena is included in [BrowserGym](https://github.com/ServiceNow/BrowserGym),
|
|
|
32
34
|
|
|
33
35
|
https://github.com/ServiceNow/WorkArena/assets/2374980/68640f09-7d6f-4eb1-b556-c294a6afef70
|
|
34
36
|
|
|
37
|
+
## ⚠️ Pre-Release warning ⚠️
|
|
38
|
+
Please note that the WorkArena benchmark is still undergoing minor bug fixes and updates, which may cause discrepancies with results reported in our latest arXiv preprint. We plan to release soon a stable version of WorkArena v0.1.0 with enhanced stability, and a final version v1.0.0 with a new suite of tasks.
|
|
35
39
|
|
|
36
40
|
## Benchmark Contents
|
|
37
41
|
|
|
38
|
-
At the moment, WorkArena includes `
|
|
42
|
+
At the moment, WorkArena includes `18,050` task instances drawn from `29` tasks that cover the main components of the ServiceNow user interface. The following videos show an agent built on `GPT-4-vision` interacting with every such component. As emphasized by our results, this benchmark is not solved and thus, the performance of the agent is not always on point.
|
|
39
43
|
|
|
40
44
|
### Knowledge Bases
|
|
41
45
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
browsergym/workarena/__init__.py,sha256=
|
|
2
|
-
browsergym/workarena/config.py,sha256=
|
|
3
|
-
browsergym/workarena/install.py,sha256=
|
|
1
|
+
browsergym/workarena/__init__.py,sha256=ac2VfSMZfn8LMCsWaoEA61pFM8yG6oFUzUbR4ZXfHVI,699
|
|
2
|
+
browsergym/workarena/config.py,sha256=Jl9Ht_98Qs8KlEC-HVGrV1Cy12PyrOfRgJsSlGtc9Jk,7761
|
|
3
|
+
browsergym/workarena/install.py,sha256=HO_f1Ba2_3A4sSjj-SwMTs7iS-QUHFAkN05pn65Js-k,36358
|
|
4
4
|
browsergym/workarena/instance.py,sha256=Qw4lzHhgnl8IuiWOelsmzCJce3jXYivYYwtfTPt2H-s,4314
|
|
5
|
-
browsergym/workarena/utils.py,sha256=
|
|
5
|
+
browsergym/workarena/utils.py,sha256=mD6RqVua-m1-mKM1RGGlUEu1s6un0ZI9a5ZTPN7g1hY,3199
|
|
6
6
|
browsergym/workarena/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
browsergym/workarena/api/requests.py,sha256=z2vQTTkm1HR04_d_pce6jopuN--Oh0gUaT-YhrVa9-8,4148
|
|
8
|
-
browsergym/workarena/api/
|
|
8
|
+
browsergym/workarena/api/ui_themes.py,sha256=9H8HhnqHWt0CA5X5E1sokkXSCYYxtWZvhNFcXn3e90s,836
|
|
9
|
+
browsergym/workarena/api/user.py,sha256=M5QG8jspcHLcvFQ4UdTAGfyKdEFKTCeeMMgfZxImpXA,4627
|
|
10
|
+
browsergym/workarena/api/utils.py,sha256=EPuB6smMsl280x-uAdnyZFPhrgyCSgFHPyx4O2TysJc,3315
|
|
9
11
|
browsergym/workarena/data_files/setup_files/forms/expected_change_request_form_fields.json,sha256=UOf2NohzOZrjjkTLGMTluYHlIlDvMZY0pQRoJxJ3v6M,494
|
|
10
12
|
browsergym/workarena/data_files/setup_files/forms/expected_hardware_form_fields.json,sha256=Bl8_P8T3UXs0xTcyucvinFPHMq21OowsJQm_y-eunuY,768
|
|
11
13
|
browsergym/workarena/data_files/setup_files/forms/expected_incident_form_fields.json,sha256=wg-5FGeslZF9zFMlt2Yl-HqkhuZEyb8hWJqX8GY1qxg,466
|
|
@@ -19,12 +21,15 @@ browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns
|
|
|
19
21
|
browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json,sha256=DJAG4sf6bEeq9oQkbbzZkDL7un29Q-6wuMhhd8Cy244,500
|
|
20
22
|
browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json,sha256=sncClj2ekwQr3WQSwBX18N2Dd4TvUlhWQrne0vtEgAA,538
|
|
21
23
|
browsergym/workarena/data_files/setup_files/lists/expected_user_list_columns.json,sha256=L4yWNhOczhgC4gKOikrRgX2p2jFxaJ5XSsMM20zwjV4,1068
|
|
24
|
+
browsergym/workarena/data_files/setup_files/ui_themes/workarena_themes.xml,sha256=P0Tqm9TnmHTrgu2FBh-vWPviOHQa_ZkG2Z9-4iwPENY,1970309
|
|
22
25
|
browsergym/workarena/data_files/task_configs/all_menu.json,sha256=LRSnt05rFL4uE5f25f9Zj8RkrLKsBvZtrrwGdZ0a53E,270388
|
|
23
26
|
browsergym/workarena/data_files/task_configs/create_change_request_task.json,sha256=LMxS2YiG8_eH0fhXBis1fyAXE_XYZPwMmMuD2QuzdDY,6306733
|
|
24
27
|
browsergym/workarena/data_files/task_configs/create_hardware_asset_task.json,sha256=koP4OC3ot1ic8ybjCp1fev8X0JxIy_giZ7CyLPdE4qI,4971385
|
|
25
28
|
browsergym/workarena/data_files/task_configs/create_incident_task.json,sha256=BRaM61NMsOs9lrw5n1oT1GsYll0-8HpxYmi-Ry-PpBU,5812616
|
|
26
29
|
browsergym/workarena/data_files/task_configs/create_problem_task.json,sha256=LhEDjkDFhKevNwREOV-j69C3PQbpsu_Plt2wGTKxwUQ,4994349
|
|
27
30
|
browsergym/workarena/data_files/task_configs/create_user_task.json,sha256=UQornONckg3oTi2mToTq-uziP0ZO48Xoj5xvHXHkEp8,3981025
|
|
31
|
+
browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json,sha256=IsPmpZBurHMWPxMzwvURkb1qIT2HD61ACHvd4AslK5A,15733
|
|
32
|
+
browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json,sha256=aC4HPOBUN988pkMLKrzNOWUIdH7OsUym8ZBtynDhn0M,114629
|
|
28
33
|
browsergym/workarena/data_files/task_configs/filter_asset_list_task.json,sha256=APTgs-p5CkBVmWO-EQ2O7Cpt9nvaqvQT5fztzWoE8dA,11882372
|
|
29
34
|
browsergym/workarena/data_files/task_configs/filter_change_request_list_task.json,sha256=kL7xiQxSfXZgwEZhrnj_oMV_W0wBLo3QVwb3dHUkv7k,12812288
|
|
30
35
|
browsergym/workarena/data_files/task_configs/filter_hardware_list_task.json,sha256=9e5vxd2uQNTjOCXGSRg2PfZAsc5aGR52jt3m1kbiLdQ,12785357
|
|
@@ -42,6 +47,8 @@ browsergym/workarena/data_files/task_configs/order_ipad_pro_task.json,sha256=gR5
|
|
|
42
47
|
browsergym/workarena/data_files/task_configs/order_loaner_laptop_task.json,sha256=g_BDRnvn5wm7rRcISdmT197-4MDe2QfsWmY5FnCG7Tc,183107
|
|
43
48
|
browsergym/workarena/data_files/task_configs/order_sales_laptop_task.json,sha256=6IGZg5NE2pjrUeDyOajk3Z2F4TCjqBRLS9VPh7lEu5Q,707828
|
|
44
49
|
browsergym/workarena/data_files/task_configs/order_standard_laptop_task.json,sha256=qSh8lM13RgQyaKAzNIwAM0B84iZvSOgY1FQEAGeawaA,516203
|
|
50
|
+
browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json,sha256=xwTbhk33LfXyxbIhBgGtYXa1xE1RCegzYB6uMP6Sm8A,112107
|
|
51
|
+
browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json,sha256=3tTjz30MZGzrP5C1RtS7m58-OZVEbLR62iWiZjIbbNk,324394
|
|
45
52
|
browsergym/workarena/data_files/task_configs/sort_asset_list_task.json,sha256=CxGupg15OFAT8z0ddieTJnIOQ1xHqCJJkqPgZI1sJNA,44721
|
|
46
53
|
browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json,sha256=dmYPzs86MGzD-j_h8bEiynH9LWdfm12a2Z5PkSJ7-dc,45862
|
|
47
54
|
browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json,sha256=iE5RmskNfiw-6CajMgmB75oxyJ8qu5JIjJugHf1NNPQ,45127
|
|
@@ -49,26 +56,30 @@ browsergym/workarena/data_files/task_configs/sort_incident_list_task.json,sha256
|
|
|
49
56
|
browsergym/workarena/data_files/task_configs/sort_service_catalog_item_list_task.json,sha256=c0tNR4c7nrOw922VER8vpG6KNuv62399bJBJ4rJcgC0,46700
|
|
50
57
|
browsergym/workarena/data_files/task_configs/sort_user_list_task.json,sha256=qcSQEtSjg0Fu4SeBMjjMukD7ndKkYFdiX4DBRDftqbU,44336
|
|
51
58
|
browsergym/workarena/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
-
browsergym/workarena/tasks/base.py,sha256=
|
|
53
|
-
browsergym/workarena/tasks/
|
|
54
|
-
browsergym/workarena/tasks/
|
|
55
|
-
browsergym/workarena/tasks/
|
|
56
|
-
browsergym/workarena/tasks/
|
|
57
|
-
browsergym/workarena/tasks/
|
|
59
|
+
browsergym/workarena/tasks/base.py,sha256=YJKPlF1799LkZRv1cefAA9JCZZaPuaHLDTsWC7EZitw,5102
|
|
60
|
+
browsergym/workarena/tasks/dashboard.py,sha256=TYGsLdvkBqpv38pHRcLJH8itagz4nvjEjdNcp_wGJG0,25240
|
|
61
|
+
browsergym/workarena/tasks/form.py,sha256=uzpQX1QylJxj48Qb4Bgdt_uTfnwrTFTNK25bnjN0kfM,32095
|
|
62
|
+
browsergym/workarena/tasks/knowledge.py,sha256=DxqfoMrSZXd-_aIAQgUWLtnz9Aff939rfJhDTLISGeo,6358
|
|
63
|
+
browsergym/workarena/tasks/list.py,sha256=6vV13STpxShfY9SO5QUBDo_heEH5Uqe8BNSbhlfQUhk,37779
|
|
64
|
+
browsergym/workarena/tasks/navigation.py,sha256=8ZotJH6MfRrh_NCnzoRPlrdGXBfvz3zNatj7tJkyI3U,7399
|
|
65
|
+
browsergym/workarena/tasks/service_catalog.py,sha256=LDiM3rOyhmDdTBYu9BrmljW4bxprnXF_ZOscg3aDwqQ,22964
|
|
58
66
|
browsergym/workarena/tasks/scripts/README.md,sha256=-jOtGf9k2zoBhrBkesmfDnr9-s0PhOEi0KWI9xfOw1s,296
|
|
59
67
|
browsergym/workarena/tasks/scripts/extract_all_menu_items.py,sha256=U-GNI_cCYA2Jggtx22MQVEOKcojnYxEC2_YBBd-GCAw,9870
|
|
60
|
-
browsergym/workarena/tasks/scripts/
|
|
68
|
+
browsergym/workarena/tasks/scripts/generate_dashboard_configs.py,sha256=nqIhegcW6X_mwlj3GRj-jRn7cb5m-TXyYJ_HuJNT-IU,9915
|
|
69
|
+
browsergym/workarena/tasks/scripts/generate_forms.py,sha256=wnqXE1b5eQdwQB0ZqsqQS5z9VNKyObUnYoYVvsq4sM0,3695
|
|
61
70
|
browsergym/workarena/tasks/scripts/knowledge.py,sha256=Qrv3AY9i6vjXhitDFITGjNjMvOL6H7FLKCJR8hA6Qdo,1259
|
|
62
|
-
browsergym/workarena/tasks/scripts/list.py,sha256=
|
|
71
|
+
browsergym/workarena/tasks/scripts/list.py,sha256=Cy9pvUHqKRwSH5yWT746ZW9TMGZC9qrBzvPKZDGWYTM,4803
|
|
63
72
|
browsergym/workarena/tasks/scripts/navigation.py,sha256=2GIIGoW6Ad2YpwX99_MTuLoijSk-EgsjfRNiRaYaitE,853
|
|
64
73
|
browsergym/workarena/tasks/scripts/service_catalog.py,sha256=LrNSScDQOxXNdYdMG4j14idw0D7FUbFM1Dn0ESUbJi0,4862
|
|
65
|
-
browsergym/workarena/tasks/scripts/validate.py,sha256=
|
|
74
|
+
browsergym/workarena/tasks/scripts/validate.py,sha256=cBzZ4EEbz2JqQFhmonxODV873S_6u6ZF-_jb99D9g0c,7521
|
|
66
75
|
browsergym/workarena/tasks/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
76
|
browsergym/workarena/tasks/utils/debug.py,sha256=EEy7Rt2ETwkorPm0s6y_u0wutl5rDp_PVuM7BvnsbIA,670
|
|
68
|
-
browsergym/workarena/tasks/utils/form.py,sha256=
|
|
69
|
-
browsergym/workarena/tasks/utils/js_utils.js,sha256=
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
browsergym_workarena-0.
|
|
73
|
-
browsergym_workarena-0.
|
|
74
|
-
browsergym_workarena-0.
|
|
77
|
+
browsergym/workarena/tasks/utils/form.py,sha256=egWzXH9A5eDmu08VSD1npNG32sttOc59TQVz1_w1MXU,2519
|
|
78
|
+
browsergym/workarena/tasks/utils/js_utils.js,sha256=n97fmY2Jkr59rEcQSuSbCnn1L2ZNwM3Nrg-p4TAkdUU,5199
|
|
79
|
+
browsergym/workarena/tasks/utils/string.py,sha256=ir5_ASD9QSFMZ9kuHo2snSXRuSfv_wROH6nxBLOTP4I,330
|
|
80
|
+
browsergym/workarena/tasks/utils/utils.py,sha256=kgpok2LHFaLprgiH0AIan4-Iy492EqpGQnBuzyFdrGg,669
|
|
81
|
+
browsergym_workarena-0.2.0.dist-info/METADATA,sha256=hQaI0hD4UAh5xVWSjFHwX-I6brXsw2UmccXH7_8OwHc,7641
|
|
82
|
+
browsergym_workarena-0.2.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
|
83
|
+
browsergym_workarena-0.2.0.dist-info/entry_points.txt,sha256=rjnc1GaWB89r1PO0P_Uwriv-iVzWMhRM7EqUtXluDPs,72
|
|
84
|
+
browsergym_workarena-0.2.0.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
|
|
85
|
+
browsergym_workarena-0.2.0.dist-info/RECORD,,
|
{browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|