browsergym-workarena 0.4.2__py3-none-any.whl → 0.4.4__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 +1 -1
- browsergym/workarena/api/system_properties.py +66 -0
- browsergym/workarena/config.py +3 -1
- browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json +1 -1
- browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json +1 -1
- browsergym/workarena/install.py +91 -56
- browsergym/workarena/instance.py +24 -1
- browsergym/workarena/tasks/dashboard.py +29 -3
- {browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/METADATA +1 -1
- {browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/RECORD +13 -12
- {browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/WHEEL +0 -0
- {browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/entry_points.txt +0 -0
- {browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/licenses/LICENSE +0 -0
browsergym/workarena/install.py
CHANGED
|
@@ -10,6 +10,7 @@ from tenacity import retry, stop_after_attempt, retry_if_exception_type
|
|
|
10
10
|
from requests import HTTPError
|
|
11
11
|
from time import sleep
|
|
12
12
|
|
|
13
|
+
from .api.system_properties import get_sys_property, set_sys_property
|
|
13
14
|
from .api.ui_themes import get_workarena_theme_variants
|
|
14
15
|
from .api.user import create_user
|
|
15
16
|
from .api.utils import table_api_call, table_column_info
|
|
@@ -38,7 +39,7 @@ from .config import (
|
|
|
38
39
|
EXPECTED_USER_FORM_FIELDS_PATH,
|
|
39
40
|
# Patch flag for reports
|
|
40
41
|
REPORT_PATCH_FLAG,
|
|
41
|
-
|
|
42
|
+
REPORT_FILTER_PROPERTY,
|
|
42
43
|
# Supported ServiceNow releases
|
|
43
44
|
SNOW_SUPPORTED_RELEASES,
|
|
44
45
|
# For workflows setup
|
|
@@ -51,51 +52,22 @@ from .instance import SNowInstance
|
|
|
51
52
|
from .utils import url_login
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
def
|
|
55
|
+
def _is_dev_portal_instance() -> bool:
|
|
55
56
|
"""
|
|
56
|
-
|
|
57
|
+
Check if the instance is a ServiceNow Developer Portal instance.
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
property = table_api_call(
|
|
62
|
-
instance=instance,
|
|
63
|
-
table="sys_properties",
|
|
64
|
-
params={"sysparm_query": f"name={property_name}", "sysparm_fields": "sys_id"},
|
|
65
|
-
)["result"]
|
|
66
|
-
|
|
67
|
-
if not property:
|
|
68
|
-
property_sysid = ""
|
|
69
|
-
method = "POST"
|
|
70
|
-
else:
|
|
71
|
-
property_sysid = "/" + property[0]["sys_id"]
|
|
72
|
-
method = "PUT"
|
|
73
|
-
|
|
74
|
-
property = table_api_call(
|
|
75
|
-
instance=instance,
|
|
76
|
-
table=f"sys_properties{property_sysid}",
|
|
77
|
-
method=method,
|
|
78
|
-
json={"name": property_name, "value": value},
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
# Verify that the property was updated
|
|
82
|
-
assert property["result"]["value"] == value, f"Error setting {property_name}."
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def _get_sys_property(property_name: str) -> str:
|
|
86
|
-
"""
|
|
87
|
-
Get a sys_property from the instance.
|
|
59
|
+
Returns:
|
|
60
|
+
--------
|
|
61
|
+
bool: True if the instance is a developer portal instance, False otherwise.
|
|
88
62
|
|
|
89
63
|
"""
|
|
90
64
|
instance = SNowInstance()
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
instance
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return property_value
|
|
65
|
+
# Check if the instance url has the for devXXXXXX.service-now.com format (where X is a digit)
|
|
66
|
+
if re.match(r"^https?://dev\d{6}\.service-now\.com", instance.snow_url):
|
|
67
|
+
logging.info("Detected a developer portal instance...")
|
|
68
|
+
return True
|
|
69
|
+
logging.info("Detected an internal instance...")
|
|
70
|
+
return False
|
|
99
71
|
|
|
100
72
|
|
|
101
73
|
def _install_update_set(path: str, name: str):
|
|
@@ -797,7 +769,9 @@ def enable_url_login():
|
|
|
797
769
|
Configure the instance to allow login via URL.
|
|
798
770
|
|
|
799
771
|
"""
|
|
800
|
-
|
|
772
|
+
set_sys_property(
|
|
773
|
+
instance=SNowInstance(), property_name="glide.security.restrict.get.login", value="false"
|
|
774
|
+
)
|
|
801
775
|
logging.info("URL login enabled.")
|
|
802
776
|
|
|
803
777
|
|
|
@@ -808,7 +782,21 @@ def disable_password_policies():
|
|
|
808
782
|
Notes: this is required to allow the creation of users with weak passwords.
|
|
809
783
|
|
|
810
784
|
"""
|
|
811
|
-
|
|
785
|
+
set_sys_property(
|
|
786
|
+
instance=SNowInstance(),
|
|
787
|
+
property_name="glide.security.password.policy.enabled",
|
|
788
|
+
value="false",
|
|
789
|
+
)
|
|
790
|
+
set_sys_property(
|
|
791
|
+
instance=SNowInstance(), property_name="glide.apply.password_policy.on_login", value="false"
|
|
792
|
+
)
|
|
793
|
+
# The following is not supported on developer portal instances
|
|
794
|
+
if not _is_dev_portal_instance():
|
|
795
|
+
set_sys_property(
|
|
796
|
+
instance=SNowInstance(),
|
|
797
|
+
property_name="glide.authenticate.api.user.reset_password.mandatory",
|
|
798
|
+
value="false",
|
|
799
|
+
)
|
|
812
800
|
logging.info("Password policies disabled.")
|
|
813
801
|
|
|
814
802
|
|
|
@@ -817,8 +805,14 @@ def disable_guided_tours():
|
|
|
817
805
|
Hide guided tour popups
|
|
818
806
|
|
|
819
807
|
"""
|
|
820
|
-
|
|
821
|
-
|
|
808
|
+
set_sys_property(
|
|
809
|
+
instance=SNowInstance(), property_name="com.snc.guided_tours.sp.enable", value="false"
|
|
810
|
+
)
|
|
811
|
+
set_sys_property(
|
|
812
|
+
instance=SNowInstance(),
|
|
813
|
+
property_name="com.snc.guided_tours.standard_ui.enable",
|
|
814
|
+
value="false",
|
|
815
|
+
)
|
|
822
816
|
logging.info("Guided tours disabled.")
|
|
823
817
|
|
|
824
818
|
|
|
@@ -836,7 +830,9 @@ def disable_analytics_popups():
|
|
|
836
830
|
Disable analytics popups (needs to be done through UI since Vancouver release)
|
|
837
831
|
|
|
838
832
|
"""
|
|
839
|
-
|
|
833
|
+
set_sys_property(
|
|
834
|
+
instance=SNowInstance(), property_name="glide.analytics.enabled", value="false"
|
|
835
|
+
)
|
|
840
836
|
logging.info("Analytics popups disabled.")
|
|
841
837
|
|
|
842
838
|
|
|
@@ -850,7 +846,8 @@ def setup_ui_themes():
|
|
|
850
846
|
check_ui_themes_installed()
|
|
851
847
|
|
|
852
848
|
logging.info("Setting default UI theme")
|
|
853
|
-
|
|
849
|
+
set_sys_property(
|
|
850
|
+
instance=SNowInstance(),
|
|
854
851
|
property_name="glide.ui.polaris.theme.custom",
|
|
855
852
|
value=get_workarena_theme_variants(SNowInstance())[0]["theme.sys_id"],
|
|
856
853
|
)
|
|
@@ -894,7 +891,9 @@ def check_ui_themes_installed():
|
|
|
894
891
|
|
|
895
892
|
def set_home_page():
|
|
896
893
|
logging.info("Setting default home page")
|
|
897
|
-
|
|
894
|
+
set_sys_property(
|
|
895
|
+
instance=SNowInstance(), property_name="glide.login.home", value="/now/nav/ui/home"
|
|
896
|
+
)
|
|
898
897
|
|
|
899
898
|
|
|
900
899
|
def wipe_system_admin_preferences():
|
|
@@ -918,9 +917,9 @@ def wipe_system_admin_preferences():
|
|
|
918
917
|
)
|
|
919
918
|
|
|
920
919
|
|
|
921
|
-
def
|
|
920
|
+
def is_report_filter_using_relative_time(filter):
|
|
922
921
|
"""
|
|
923
|
-
Heuristic to check if a report is filtering based on time
|
|
922
|
+
Heuristic to check if a report is filtering based on relative time
|
|
924
923
|
|
|
925
924
|
This aims to detect the use of functions like "gs.endOfToday()". To avoid hardcoding all of them,
|
|
926
925
|
we simply check for the use of keywords. Our filter is definitely too wide, but that's ok.
|
|
@@ -938,6 +937,32 @@ def patch_report_filters():
|
|
|
938
937
|
logging.info("Patching reports with date filter...")
|
|
939
938
|
|
|
940
939
|
instance = SNowInstance()
|
|
940
|
+
filter_config = instance.report_filter_config
|
|
941
|
+
|
|
942
|
+
# If the report date filter is already set, we use the existing values (would be the case on reinstall)
|
|
943
|
+
if not filter_config:
|
|
944
|
+
# Set the report date filter to current date as YYYY-MM-DD and time filter to current time as HH:MM:SS
|
|
945
|
+
now = datetime.now()
|
|
946
|
+
report_date_filter = now.strftime("%Y-%m-%d")
|
|
947
|
+
report_time_filter = now.strftime("%H:%M:%S")
|
|
948
|
+
# ... save the filter config
|
|
949
|
+
logging.info(
|
|
950
|
+
f"Setting report date filter to {report_date_filter} and time filter to {report_time_filter} via {REPORT_FILTER_PROPERTY}"
|
|
951
|
+
)
|
|
952
|
+
set_sys_property(
|
|
953
|
+
instance=instance,
|
|
954
|
+
property_name=REPORT_FILTER_PROPERTY,
|
|
955
|
+
value=json.dumps(
|
|
956
|
+
{"report_date_filter": report_date_filter, "report_time_filter": report_time_filter}
|
|
957
|
+
),
|
|
958
|
+
)
|
|
959
|
+
else:
|
|
960
|
+
# Use the existing configuration
|
|
961
|
+
logging.info(
|
|
962
|
+
f"Using existing report date filter {filter_config['report_date_filter']} and time filter {filter_config['report_time_filter']}"
|
|
963
|
+
)
|
|
964
|
+
report_date_filter = filter_config["report_date_filter"]
|
|
965
|
+
report_time_filter = filter_config["report_time_filter"]
|
|
941
966
|
|
|
942
967
|
# Get all reports that are not already patched
|
|
943
968
|
reports = table_api_call(
|
|
@@ -959,27 +984,31 @@ def patch_report_filters():
|
|
|
959
984
|
logging.info(f"Discarding report {report['title']} {report['sys_id']}...")
|
|
960
985
|
raise NotImplementedError() # Mark for deletion
|
|
961
986
|
|
|
962
|
-
if not
|
|
987
|
+
if not is_report_filter_using_relative_time(report["filter"]):
|
|
963
988
|
# That's a report we want to keep (use date cutoff filter)
|
|
964
|
-
filter_date =
|
|
989
|
+
filter_date = report_date_filter
|
|
990
|
+
filter_time = report_time_filter
|
|
965
991
|
logging.info(
|
|
966
992
|
f"Keeping report {report['title']} {report['sys_id']} (columns: {sys_created_on_cols})..."
|
|
967
993
|
)
|
|
968
994
|
else:
|
|
969
|
-
# XXX: We do not support reports with filters that rely on time (e.g., last 10 days) because
|
|
995
|
+
# XXX: We do not support reports with filters that rely on relative time (e.g., last 10 days) because
|
|
970
996
|
# there are not stable. In this case, we don't delete them but add a filter to make
|
|
971
997
|
# them empty. They will be shown as "No data available".
|
|
972
998
|
logging.info(
|
|
973
999
|
f"Disabling report {report['title']} {report['sys_id']} because it uses time filters..."
|
|
974
1000
|
)
|
|
975
1001
|
filter_date = "1900-01-01"
|
|
1002
|
+
filter_time = "00:00:00"
|
|
976
1003
|
|
|
1004
|
+
# Format the filter
|
|
977
1005
|
filter = "".join(
|
|
978
1006
|
[
|
|
979
|
-
f"^{col}<javascript:gs.dateGenerate('{filter_date}','
|
|
1007
|
+
f"^{col}<javascript:gs.dateGenerate('{filter_date}','{filter_time}')"
|
|
980
1008
|
for col in sys_created_on_cols
|
|
981
1009
|
]
|
|
982
1010
|
) + ("^" if len(report["filter"]) > 0 and not report["filter"].startswith("^") else "")
|
|
1011
|
+
# Patch the report with the new filter
|
|
983
1012
|
table_api_call(
|
|
984
1013
|
instance=instance,
|
|
985
1014
|
table=f"sys_report/{report['sys_id']}",
|
|
@@ -1055,7 +1084,11 @@ def setup():
|
|
|
1055
1084
|
|
|
1056
1085
|
# Save installation date
|
|
1057
1086
|
logging.info("Saving installation date")
|
|
1058
|
-
|
|
1087
|
+
set_sys_property(
|
|
1088
|
+
instance=SNowInstance(),
|
|
1089
|
+
property_name="workarena.installation.date",
|
|
1090
|
+
value=datetime.now().isoformat(),
|
|
1091
|
+
)
|
|
1059
1092
|
|
|
1060
1093
|
logging.info("WorkArena setup complete.")
|
|
1061
1094
|
|
|
@@ -1068,7 +1101,9 @@ def main():
|
|
|
1068
1101
|
logging.basicConfig(level=logging.INFO)
|
|
1069
1102
|
|
|
1070
1103
|
try:
|
|
1071
|
-
past_install_date =
|
|
1104
|
+
past_install_date = get_sys_property(
|
|
1105
|
+
instance=SNowInstance(), property_name="workarena.installation.date"
|
|
1106
|
+
)
|
|
1072
1107
|
logging.info(f"Detected previous installation on {past_install_date}. Reinstalling...")
|
|
1073
1108
|
except:
|
|
1074
1109
|
past_install_date = "never"
|
browsergym/workarena/instance.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
3
|
import requests
|
|
3
4
|
import re
|
|
@@ -5,7 +6,7 @@ import re
|
|
|
5
6
|
from playwright.sync_api import sync_playwright
|
|
6
7
|
from typing import Optional
|
|
7
8
|
|
|
8
|
-
from .config import SNOW_BROWSER_TIMEOUT
|
|
9
|
+
from .config import SNOW_BROWSER_TIMEOUT, REPORT_FILTER_PROPERTY
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class SNowInstance:
|
|
@@ -124,3 +125,25 @@ class SNowInstance:
|
|
|
124
125
|
browser.close()
|
|
125
126
|
|
|
126
127
|
return release_info
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def report_filter_config(self) -> dict:
|
|
131
|
+
"""
|
|
132
|
+
Get the report filter configuration from the ServiceNow instance.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
--------
|
|
136
|
+
dict
|
|
137
|
+
The report filter configuration, or an empty dictionary if not found.
|
|
138
|
+
|
|
139
|
+
"""
|
|
140
|
+
from .api.system_properties import (
|
|
141
|
+
get_sys_property,
|
|
142
|
+
) # Import here to avoid circular import issues
|
|
143
|
+
|
|
144
|
+
try:
|
|
145
|
+
config = get_sys_property(self, REPORT_FILTER_PROPERTY)
|
|
146
|
+
config = json.loads(config)
|
|
147
|
+
return config
|
|
148
|
+
except Exception:
|
|
149
|
+
return None
|
|
@@ -19,7 +19,6 @@ from ..config import (
|
|
|
19
19
|
DASHBOARD_RETRIEVAL_VALUE_CONFIG_PATH,
|
|
20
20
|
REPORT_RETRIEVAL_MINMAX_CONFIG_PATH,
|
|
21
21
|
REPORT_RETRIEVAL_VALUE_CONFIG_PATH,
|
|
22
|
-
REPORT_DATE_FILTER,
|
|
23
22
|
REPORT_PATCH_FLAG,
|
|
24
23
|
)
|
|
25
24
|
from ..instance import SNowInstance
|
|
@@ -30,6 +29,15 @@ from .utils.utils import check_url_suffix_match
|
|
|
30
29
|
# - We currently don't support maps because they are clickable and would require a more evolved cheat function
|
|
31
30
|
SUPPORTED_PLOT_TYPES = ["area", "bar", "column", "line", "pie", "spline"]
|
|
32
31
|
|
|
32
|
+
# Get report filter config
|
|
33
|
+
config = SNowInstance().report_filter_config
|
|
34
|
+
if config is None:
|
|
35
|
+
REPORT_DATE_FILTER = REPORT_TIME_FILTER = None
|
|
36
|
+
else:
|
|
37
|
+
REPORT_DATE_FILTER = config["report_date_filter"]
|
|
38
|
+
REPORT_TIME_FILTER = config["report_time_filter"]
|
|
39
|
+
del config
|
|
40
|
+
|
|
33
41
|
|
|
34
42
|
class DashboardRetrievalTask(AbstractServiceNowTask, ABC):
|
|
35
43
|
"""
|
|
@@ -298,13 +306,22 @@ class DashboardRetrievalTask(AbstractServiceNowTask, ABC):
|
|
|
298
306
|
def setup_goal(self, page: playwright.sync_api.Page) -> Tuple[str | dict]:
|
|
299
307
|
super().setup_goal(page=page)
|
|
300
308
|
|
|
309
|
+
# Check that the report filters are properly setup
|
|
310
|
+
if REPORT_DATE_FILTER is None or REPORT_TIME_FILTER is None:
|
|
311
|
+
raise RuntimeError(
|
|
312
|
+
"The report date and time filters are not set. Please run the install script to set them."
|
|
313
|
+
)
|
|
314
|
+
|
|
301
315
|
# Configure task
|
|
302
316
|
# ... sample a configuration
|
|
303
317
|
self.config = (
|
|
304
318
|
self.fixed_config if self.fixed_config else self.random.choice(self.all_configs())
|
|
305
319
|
)
|
|
306
320
|
# ... set start URL based on config
|
|
307
|
-
|
|
321
|
+
# ...... some of the reports have need a date filter to be applied so we do this by patching a placeholder in the URL
|
|
322
|
+
self.start_url = self.instance.snow_url + self.config["url"].replace(
|
|
323
|
+
"REPORT_DATE_FILTER", REPORT_DATE_FILTER
|
|
324
|
+
).replace("REPORT_TIME_FILTER", REPORT_TIME_FILTER)
|
|
308
325
|
|
|
309
326
|
# Produce goal string based on question type
|
|
310
327
|
chart_locator = (
|
|
@@ -603,6 +620,8 @@ class DashboardRetrievalTask(AbstractServiceNowTask, ABC):
|
|
|
603
620
|
"""
|
|
604
621
|
Generate a random configuration for the task
|
|
605
622
|
|
|
623
|
+
This can be used to regenerate configs that are valid under an updated date filter.
|
|
624
|
+
|
|
606
625
|
Parameters:
|
|
607
626
|
-----------
|
|
608
627
|
page: playwright.sync_api.Page
|
|
@@ -613,6 +632,12 @@ class DashboardRetrievalTask(AbstractServiceNowTask, ABC):
|
|
|
613
632
|
The types of questions to sample from (uniformely)
|
|
614
633
|
|
|
615
634
|
"""
|
|
635
|
+
# Check that the report filters are properly setup
|
|
636
|
+
if REPORT_DATE_FILTER is None or REPORT_TIME_FILTER is None:
|
|
637
|
+
raise RuntimeError(
|
|
638
|
+
"The report date and time filters are not set. Please run the install script to set them."
|
|
639
|
+
)
|
|
640
|
+
|
|
616
641
|
# Generate a bunch of reports based on valid table fields
|
|
617
642
|
ON_THE_FLY_REPORTS = []
|
|
618
643
|
for table in [
|
|
@@ -674,7 +699,8 @@ class DashboardRetrievalTask(AbstractServiceNowTask, ABC):
|
|
|
674
699
|
|
|
675
700
|
# On the fly generated report
|
|
676
701
|
if not report.get("sys_id", None):
|
|
677
|
-
|
|
702
|
+
# ... these receive a filter that is added through the URL
|
|
703
|
+
url = f"/now/nav/ui/classic/params/target/sys_report_template.do%3Fsysparm_field%3D{report['field']}%26sysparm_type%3D{report['type']}%26sysparm_table%3D{report['table']}%26sysparm_from_list%3Dtrue%26sysparm_chart_size%3Dlarge%26sysparm_manual_labor%3Dtrue%26sysparm_query=sys_created_on<javascript:gs.dateGenerate('{REPORT_DATE_FILTER}','{REPORT_TIME_FILTER}')^EQ"
|
|
678
704
|
# Report from the database
|
|
679
705
|
else:
|
|
680
706
|
url = f"/now/nav/ui/classic/params/target/sys_report_template.do%3Fjvar_report_id={report['sys_id']}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: browsergym-workarena
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
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, Megh Thakkar
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
browsergym/workarena/__init__.py,sha256=
|
|
2
|
-
browsergym/workarena/config.py,sha256=
|
|
3
|
-
browsergym/workarena/install.py,sha256=
|
|
4
|
-
browsergym/workarena/instance.py,sha256
|
|
1
|
+
browsergym/workarena/__init__.py,sha256=gqvx_SVwq31CU-T1XoNP9EDZsjivUgMCXS7lbH_uc84,6289
|
|
2
|
+
browsergym/workarena/config.py,sha256=Fmx4sl3B1Ee2m2fGnnEYJfsQ0TkCV0VdKhNZ-gNytRU,8608
|
|
3
|
+
browsergym/workarena/install.py,sha256=Dy9cTbT_LMDW0Dhmd2CpVnj4W_aB-xaxPubjGRTThxQ,41493
|
|
4
|
+
browsergym/workarena/instance.py,sha256=pLlYBrKu-GCwYPzfYO2w0BYc2u_n5jMt3HZdpplCD40,4997
|
|
5
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/category.py,sha256=4oiwPnRas0ZWCdky76zhNpu_9PfB_HmhnFa_DJZyGfA,2084
|
|
@@ -15,6 +15,7 @@ browsergym/workarena/api/problem.py,sha256=QEr9uwUCOvVZcz7Or9bKkb7aCIrP7LSPulvfO
|
|
|
15
15
|
browsergym/workarena/api/report.py,sha256=nNSTcM4mKE9GXjlm787iAlK5Q71oQbWdUcVvl0GlpeE,6903
|
|
16
16
|
browsergym/workarena/api/requested_items.py,sha256=g0X0sA1v8bAQzz9jfpATqSctUNNOTD547D6EH5Z4sw0,1678
|
|
17
17
|
browsergym/workarena/api/requests.py,sha256=z2vQTTkm1HR04_d_pce6jopuN--Oh0gUaT-YhrVa9-8,4148
|
|
18
|
+
browsergym/workarena/api/system_properties.py,sha256=-DysHuUTfH82tkQGOalNdtql-2yeGWEH5QBaYTpBKh4,1648
|
|
18
19
|
browsergym/workarena/api/ui_themes.py,sha256=9H8HhnqHWt0CA5X5E1sokkXSCYYxtWZvhNFcXn3e90s,836
|
|
19
20
|
browsergym/workarena/api/user.py,sha256=mLx8r4RFVAuw66514xniv5sn_O4kwjAsVf-iCQC9aJk,4821
|
|
20
21
|
browsergym/workarena/api/utils.py,sha256=sulU1rC6jiCyDVwn5PqPK0AC-6m-GJS_4Crzar6pENU,5000
|
|
@@ -63,8 +64,8 @@ browsergym/workarena/data_files/task_configs/order_ipad_pro_task.json,sha256=gR5
|
|
|
63
64
|
browsergym/workarena/data_files/task_configs/order_loaner_laptop_task.json,sha256=g_BDRnvn5wm7rRcISdmT197-4MDe2QfsWmY5FnCG7Tc,183107
|
|
64
65
|
browsergym/workarena/data_files/task_configs/order_sales_laptop_task.json,sha256=6IGZg5NE2pjrUeDyOajk3Z2F4TCjqBRLS9VPh7lEu5Q,707828
|
|
65
66
|
browsergym/workarena/data_files/task_configs/order_standard_laptop_task.json,sha256=qSh8lM13RgQyaKAzNIwAM0B84iZvSOgY1FQEAGeawaA,516203
|
|
66
|
-
browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json,sha256=
|
|
67
|
-
browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json,sha256=
|
|
67
|
+
browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json,sha256=RwuWHi8W_cgWGF37-cf4mLx5A7WEr4Io8R8kV-HqjpM,116571
|
|
68
|
+
browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json,sha256=GKAw70L_00SoDSgr4anJmipyulkfy2krdxzC_VsKZig,339350
|
|
68
69
|
browsergym/workarena/data_files/task_configs/sort_asset_list_task.json,sha256=CxGupg15OFAT8z0ddieTJnIOQ1xHqCJJkqPgZI1sJNA,44721
|
|
69
70
|
browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json,sha256=dmYPzs86MGzD-j_h8bEiynH9LWdfm12a2Z5PkSJ7-dc,45862
|
|
70
71
|
browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json,sha256=iE5RmskNfiw-6CajMgmB75oxyJ8qu5JIjJugHf1NNPQ,45127
|
|
@@ -76,7 +77,7 @@ browsergym/workarena/human_eval/tool.py,sha256=SwPqArNnvEeOPLRgem6kwl8ho345o-1f3
|
|
|
76
77
|
browsergym/workarena/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
78
|
browsergym/workarena/tasks/base.py,sha256=Ikh_A5I9_9acHFQCcnVMEnlBg3u3QHQD2I_NbGvD6SE,6411
|
|
78
79
|
browsergym/workarena/tasks/comp_building_block.py,sha256=Lg3KbAWrxzAHe5XbPN6L8bvdu7mfJpmBvI7jXeSDwKE,194
|
|
79
|
-
browsergym/workarena/tasks/dashboard.py,sha256=
|
|
80
|
+
browsergym/workarena/tasks/dashboard.py,sha256=LnLRyn6VdQVZyCYJtQl51UKh-aQxuNZIvWcSKVC5WI8,35435
|
|
80
81
|
browsergym/workarena/tasks/form.py,sha256=_s07yZ-zcZbi5v6VK6km1BPzUfIFfMEVWFm56QhoznM,64141
|
|
81
82
|
browsergym/workarena/tasks/knowledge.py,sha256=kANjlC7DpptMbRlUlZGdDjqZeWIwwyJzozV58qEA6KU,13751
|
|
82
83
|
browsergym/workarena/tasks/list.py,sha256=7eb9F1JooLzFGIciul2_E1bCmNyBo5AzOPozO1p1HaM,55778
|
|
@@ -131,8 +132,8 @@ browsergym/workarena/tasks/utils/js_utils.js,sha256=n97fmY2Jkr59rEcQSuSbCnn1L2ZN
|
|
|
131
132
|
browsergym/workarena/tasks/utils/private_tasks.py,sha256=r7Z9SnBMuZdZ2i-tK6eULj0q8hclANXFSzdLl49KYHI,2128
|
|
132
133
|
browsergym/workarena/tasks/utils/string.py,sha256=ir5_ASD9QSFMZ9kuHo2snSXRuSfv_wROH6nxBLOTP4I,330
|
|
133
134
|
browsergym/workarena/tasks/utils/utils.py,sha256=xQD-njEwgN7qxfn1dLBN8MYfd3kl3TuVfpmI1yxML9k,955
|
|
134
|
-
browsergym_workarena-0.4.
|
|
135
|
-
browsergym_workarena-0.4.
|
|
136
|
-
browsergym_workarena-0.4.
|
|
137
|
-
browsergym_workarena-0.4.
|
|
138
|
-
browsergym_workarena-0.4.
|
|
135
|
+
browsergym_workarena-0.4.4.dist-info/METADATA,sha256=Oh9OgOSknd_krKVFxUzvq2dtZN70-VBLoINxi31s6co,11698
|
|
136
|
+
browsergym_workarena-0.4.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
137
|
+
browsergym_workarena-0.4.4.dist-info/entry_points.txt,sha256=1lCeAbQFCcU6UTFwS5QIA3TKhT2P9ZabaZKT7sIShKc,137
|
|
138
|
+
browsergym_workarena-0.4.4.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
|
|
139
|
+
browsergym_workarena-0.4.4.dist-info/RECORD,,
|
|
File without changes
|
{browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{browsergym_workarena-0.4.2.dist-info → browsergym_workarena-0.4.4.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|