browsergym-workarena 0.1.0rc6__py3-none-any.whl → 0.1.0rc7__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.
Files changed (21) hide show
  1. browsergym/workarena/__init__.py +6 -2
  2. browsergym/workarena/data_files/setup_files/lists/expected_asset_list_columns.json +34 -1
  3. browsergym/workarena/data_files/setup_files/lists/expected_change_request_list_columns.json +48 -1
  4. browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns.json +53 -1
  5. browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json +28 -1
  6. browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json +29 -1
  7. browsergym/workarena/data_files/task_configs/sort_asset_list_task.json +547 -11391
  8. browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json +558 -11090
  9. browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json +576 -11162
  10. browsergym/workarena/data_files/task_configs/sort_incident_list_task.json +528 -11172
  11. browsergym/workarena/data_files/task_configs/sort_service_catalog_item_list_task.json +533 -11491
  12. browsergym/workarena/data_files/task_configs/sort_user_list_task.json +568 -10582
  13. browsergym/workarena/install.py +22 -15
  14. browsergym/workarena/tasks/form.py +8 -7
  15. browsergym/workarena/tasks/list.py +39 -1
  16. browsergym/workarena/tasks/scripts/list.py +31 -7
  17. {browsergym_workarena-0.1.0rc6.dist-info → browsergym_workarena-0.1.0rc7.dist-info}/METADATA +2 -2
  18. {browsergym_workarena-0.1.0rc6.dist-info → browsergym_workarena-0.1.0rc7.dist-info}/RECORD +21 -21
  19. {browsergym_workarena-0.1.0rc6.dist-info → browsergym_workarena-0.1.0rc7.dist-info}/WHEEL +1 -1
  20. {browsergym_workarena-0.1.0rc6.dist-info → browsergym_workarena-0.1.0rc7.dist-info}/entry_points.txt +0 -0
  21. {browsergym_workarena-0.1.0rc6.dist-info → browsergym_workarena-0.1.0rc7.dist-info}/licenses/LICENSE +0 -0
@@ -317,25 +317,31 @@ def display_all_expected_columns(url: str, expected_columns: set[str]):
317
317
  'i[data-title="Personalize List Columns"]'
318
318
  ) # CSS selector to support both unmodified and modified list views
319
319
  selected_columns = frame.get_by_label("Selected", exact=True)
320
+ columns_to_remove = []
320
321
  selected_columns_required = set()
321
- # Required columns that are already added
322
+
323
+ # Check for required columns that are already added, and extra columns that must be removed
324
+
322
325
  for option in selected_columns.get_by_role("option").all():
323
326
  value = option.get_attribute("value")
324
327
  if value:
325
328
  if value in expected_columns:
326
329
  selected_columns_required.add(value)
327
- # Remove extra columns
328
330
  else:
329
- option.click()
330
- frame.get_by_text("Remove", exact=True).click()
331
- columns_to_add = set(expected_columns) - selected_columns_required
331
+ columns_to_remove.append(value)
332
332
 
333
- # Add required columns
334
- for column in columns_to_add:
335
- # Using CSS selector because some elements can't be selected otherwise (e.g. "sys_class_name")
336
- frame.click(f'option[value="{column}"]')
337
- frame.get_by_text("Add").click()
338
- frame.click("#ok_button")
333
+ # Remove extra columns
334
+ selected_columns.select_option(value=columns_to_remove)
335
+ frame.get_by_text("Remove", exact=True).click()
336
+
337
+ # Add missing columns
338
+ available_columns = frame.get_by_label("Available", exact=True)
339
+ columns_to_add = list(set(expected_columns) - selected_columns_required)
340
+ available_columns.select_option(value=columns_to_add)
341
+ frame.get_by_text("Add", exact=True).click()
342
+
343
+ # Confirm
344
+ frame.locator("#ok_button").click()
339
345
 
340
346
 
341
347
  def check_all_columns_displayed(url: str, expected_columns: set[str]) -> bool:
@@ -346,15 +352,14 @@ def check_all_columns_displayed(url: str, expected_columns: set[str]) -> bool:
346
352
  page = browser.new_page()
347
353
  ui_login(instance, page)
348
354
  page.goto(instance.snow_url + url)
349
- iframe = page.frame("gsft_main")
355
+ iframe = page.wait_for_selector("iframe#gsft_main").content_frame()
356
+ # Wait for gsft_main.GlideList2 to be available
357
+ page.wait_for_function("typeof gsft_main.GlideList2 !== 'undefined'")
350
358
  lst = iframe.locator("table.data_list_table")
351
- lst.wait_for()
352
359
 
353
360
  # Validate the number of lists on the page
354
361
  lst = lst.nth(0)
355
362
  js_selector = f"gsft_main.GlideList2.get('{lst.get_attribute('data-list_id')}')"
356
- # Wait for gsft_main.GlideList2 to be available
357
- page.wait_for_function("typeof gsft_main.GlideList2 !== 'undefined'")
358
363
  visible_columns = set(page.evaluate(f"{js_selector}.fields").split(","))
359
364
 
360
365
  # check if expected columns is contained in the visible columns
@@ -420,6 +425,7 @@ def process_form_fields(url: str, expected_fields: list[str], action: str):
420
425
  ui_login(instance, page)
421
426
  page.goto(instance.snow_url + url)
422
427
  frame = page.wait_for_selector("iframe#gsft_main").content_frame()
428
+ page.wait_for_function("typeof gsft_main.GlideList2 !== 'undefined'")
423
429
  # Open form personalization view if not expanded
424
430
  form_personalization_expanded = frame.locator(
425
431
  'button:has-text("Personalize Form")'
@@ -515,6 +521,7 @@ def check_instance_release_support():
515
521
  f"You are running {version_info['build name']} {version_info}."
516
522
  )
517
523
  return False
524
+ return True
518
525
 
519
526
 
520
527
  def setup():
@@ -75,7 +75,6 @@ class ServiceNowFormTask(AbstractServiceNowTask):
75
75
  Loads a bunch of info about the form on a page into object variables
76
76
 
77
77
  """
78
- self._wait_for_ready(page)
79
78
 
80
79
  # Extract Glide table information
81
80
  logging.debug("Extracting Glide table metadata")
@@ -179,7 +178,7 @@ class ServiceNowFormTask(AbstractServiceNowTask):
179
178
  """
180
179
  logging.debug(f"Waiting for {self.js_prefix} to be fully loaded")
181
180
  page.wait_for_function(
182
- f"typeof window.{self.js_prefix} !== 'undefined' && window.{self.js_prefix}.WORKARENA_LOAD_COMPLETE"
181
+ f"typeof window.{self.js_prefix} !== 'undefined' && window.{self.js_prefix}.WORKARENA_LOAD_COMPLETE",
183
182
  )
184
183
  logging.debug(f"Detected {self.js_prefix} ready")
185
184
 
@@ -218,6 +217,7 @@ class ServiceNowFormTask(AbstractServiceNowTask):
218
217
  ],
219
218
  )
220
219
 
220
+ self._wait_for_ready(page)
221
221
  self._get_form(page)
222
222
 
223
223
 
@@ -301,8 +301,10 @@ class GenericNewRecordTask(ServiceNowFormTask):
301
301
  config = self.fixed_config if self.fixed_config else self.random.choice(self.all_configs)
302
302
 
303
303
  self.template_record = config["template_record"]
304
- self.task_fields = config["task_fields"]
304
+ for f, func in self.unique_valued_fields.items():
305
+ self.template_record[f] = func(self.template_record[f])
305
306
 
307
+ self.task_fields = config["task_fields"]
306
308
  self.created_sysids = []
307
309
 
308
310
  # generate the goal
@@ -310,7 +312,8 @@ class GenericNewRecordTask(ServiceNowFormTask):
310
312
  f"Create a new {self.table_label} with "
311
313
  + " and ".join(
312
314
  [
313
- f'a value of "{self.template_record[f]}"' + f' for field "{self.fields[f]}"'
315
+ f'a value of "{self.template_record[f]}"'
316
+ + f' for field "{self.fields[f]["label"]}"'
314
317
  for f in self.task_fields
315
318
  ]
316
319
  )
@@ -568,7 +571,6 @@ class GenericNewRecordTask(ServiceNowFormTask):
568
571
  that are not part of the task.
569
572
 
570
573
  """
571
- self._wait_for_ready(page)
572
574
 
573
575
  # Retrieve the created record's sys_id from the session storage
574
576
  sys_id = page.evaluate("localStorage").get(self.session_sys_id_field, None)
@@ -627,7 +629,7 @@ class GenericNewRecordTask(ServiceNowFormTask):
627
629
  logging.info(
628
630
  f'The field "{self.fields[f]["label"]}" has the wrong value. Expected: "{self.template_record[f]}", got: "{record[f]}".'
629
631
  )
630
- error_msg = (f'The field "{self.fields[f]["label"]}" has the wrong value.',)
632
+ error_msg = f'The field "{self.fields[f]["label"]}" has the wrong value.'
631
633
  return (
632
634
  0,
633
635
  True, # End episode (incorrect information pushed to the DB)
@@ -638,7 +640,6 @@ class GenericNewRecordTask(ServiceNowFormTask):
638
640
  return 1, True, "Nice work, thank you!", {"message": "The record was successfully created."}
639
641
 
640
642
  def teardown(self) -> None:
641
- self._wait_for_ready(self.page)
642
643
 
643
644
  # Retrieve the current record's sys_id from the session storage
644
645
  sys_id = self.page.evaluate("localStorage").get(self.session_sys_id_field, None)
@@ -3,6 +3,7 @@ Tasks related to lists
3
3
 
4
4
  """
5
5
 
6
+ import itertools
6
7
  import json
7
8
  import logging
8
9
  import playwright.sync_api
@@ -226,7 +227,6 @@ class SortListTask(ServiceNowListTask):
226
227
  visible_columns = set(self.list_info["fields"].split(","))
227
228
  config = self.fixed_config if self.fixed_config else self.random.choice(self.all_configs)
228
229
 
229
- config = self.random.choice(self.all_configs)
230
230
  self.sort_fields = config["sort_fields"]
231
231
  self.sort_dirs = config["sort_dirs"]
232
232
  goal = config["goal"]
@@ -239,6 +239,44 @@ class SortListTask(ServiceNowListTask):
239
239
 
240
240
  return goal, info
241
241
 
242
+ def _generate_all_configs(self, seed: int, page: Page, n_fields_to_sort: int):
243
+ self.pre_setup(seed, page)
244
+ self._wait_for_ready(page)
245
+ list_info = self._extract_list_info(page)
246
+
247
+ # Get available fields
248
+ available_fields = list(list_info["columns"].keys())
249
+ # ... remove forbidden fields
250
+ available_fields = [f for f in available_fields if f not in self.forbidden_fields]
251
+
252
+ field_txt = {k: x["label"] for k, x in list_info["columns"].items()}
253
+ dir_txt = {"asc": "ascending", "desc": "descending"}
254
+
255
+ # compute all field combinations
256
+ all_sort_fields = list(itertools.combinations(available_fields, n_fields_to_sort))
257
+ # compute all direction combinations
258
+ all_sort_dirs = list(itertools.product(*[["asc", "desc"] for _ in range(n_fields_to_sort)]))
259
+
260
+ # product of field combinations x direction combinations
261
+ all_configs = list(itertools.product(all_sort_fields, all_sort_dirs))
262
+
263
+ all_configs = [
264
+ {
265
+ "sort_fields": sort_fields,
266
+ "sort_dirs": sort_dirs,
267
+ "goal": f'Sort the "{list_info["title"]}" list by the following fields:\n'
268
+ + "\n".join(
269
+ [
270
+ f" - {field_txt[field]} ({dir_txt[dir]})"
271
+ for field, dir in zip(sort_fields, sort_dirs)
272
+ ]
273
+ ),
274
+ }
275
+ for sort_fields, sort_dirs in all_configs
276
+ ]
277
+
278
+ return all_configs
279
+
242
280
  def _generate_random_config(self, seed: int, page: Page):
243
281
  self.pre_setup(seed, page)
244
282
  self._wait_for_ready(page)
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import multiprocessing
3
+ import random
3
4
  import re
4
5
 
5
6
  from browsergym.workarena.tasks.list import __TASKS__
@@ -13,6 +14,34 @@ FILTER_TASKS = [
13
14
  SORT_TASKS = [task for task in __TASKS__ if re.compile(r"^Sort\w+ListTask$").match(task.__name__)]
14
15
 
15
16
 
17
+ def generate_sort_task_configs(task_class, num_configs_per_field_count=50):
18
+ name = task_class.__name__
19
+ name = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name)
20
+ task_name = re.sub("([a-z0-9])([A-Z])", r"\1_\2", name).lower()
21
+ all_configs = []
22
+ for n_fields_to_sort in range(1, 4):
23
+ with sync_playwright() as p:
24
+ task = task_class()
25
+ browser = p.chromium.launch()
26
+ context = browser.new_context() # Set the timeout here
27
+ context.set_default_timeout(5000)
28
+ page = context.new_page()
29
+ all_new_configs = task._generate_all_configs(
30
+ seed=None, page=page, n_fields_to_sort=n_fields_to_sort
31
+ )
32
+ new_configs = random.sample(all_new_configs, num_configs_per_field_count)
33
+ all_configs.extend(new_configs)
34
+
35
+ print(f"{task_name} {n_fields_to_sort} fields - {len(new_configs)} configs")
36
+
37
+ with open(
38
+ f"{task_name}.json",
39
+ "w",
40
+ ) as f:
41
+ all_configs = sorted(all_configs, key=lambda x: sorted(list(x["sort_fields"])))
42
+ json.dump(all_configs, f, indent=4, sort_keys=True)
43
+
44
+
16
45
  def generate_task_configs(task_class, num_configs=1000, task_type="sort"):
17
46
  def try_setup_and_cheat(task_class, seed, current_task_configs):
18
47
  """Try to setup and cheat a task, and return its configuration if it's new"""
@@ -84,10 +113,5 @@ def generate_task_configs(task_class, num_configs=1000, task_type="sort"):
84
113
 
85
114
 
86
115
  if __name__ == "__main__":
87
- print(FILTER_TASKS)
88
- with multiprocessing.Pool() as pool:
89
- pool.starmap(
90
- generate_task_configs,
91
- [(task, 1, "sort") for task in SORT_TASKS]
92
- + [(task, 1, "filter") for task in FILTER_TASKS],
93
- )
116
+ for task in SORT_TASKS:
117
+ generate_sort_task_configs(task)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: browsergym-workarena
3
- Version: 0.1.0rc6
3
+ Version: 0.1.0rc7
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,7 +13,7 @@ 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.1.0rc6
16
+ Requires-Dist: browsergym-core==0.1.0rc7
17
17
  Requires-Dist: english-words>=2.0.1
18
18
  Requires-Dist: numpy>=1.14
19
19
  Requires-Dist: requests>=2.31
@@ -1,6 +1,6 @@
1
- browsergym/workarena/__init__.py,sha256=FO1awgTaNoRip5qUpCXww3ixmkPrTxikfQDRLIWV1gQ,599
1
+ browsergym/workarena/__init__.py,sha256=l39ZSmrUH4_q5Qt8ARy13BJRzEbqpabL8FDkNV5Ndp0,701
2
2
  browsergym/workarena/config.py,sha256=WqgapFIC_48dqmprtTxFoMDGY79FAqvUy1hpRQ1GPoA,6571
3
- browsergym/workarena/install.py,sha256=KQ5Nd2KlwJ0OSPIDfWOzYuP1mIqv_nO0HhGz6E8rStw,21144
3
+ browsergym/workarena/install.py,sha256=OiBfJfxc2dA2ONPTtdrhnrPdTiChiNHxcx0KOvtPtZU,21373
4
4
  browsergym/workarena/instance.py,sha256=Qw4lzHhgnl8IuiWOelsmzCJce3jXYivYYwtfTPt2H-s,4314
5
5
  browsergym/workarena/utils.py,sha256=UXV-loPmwFCGF8E874QcyACmVS4BBHpPrW6BofKMADY,2289
6
6
  browsergym/workarena/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -13,11 +13,11 @@ browsergym/workarena/data_files/setup_files/forms/expected_problem_form_fields.j
13
13
  browsergym/workarena/data_files/setup_files/forms/expected_user_form_fields.json,sha256=kBlWjNYSfHixMs7Ep9KZYc9eNKjKA1rSb090BeVplcI,317
14
14
  browsergym/workarena/data_files/setup_files/knowledge/kb_autopublish_workflow.xml,sha256=zMSoA3lfg4-Fvs7egnR286CPzzDHoTk6ffKnODWrunM,11500
15
15
  browsergym/workarena/data_files/setup_files/knowledge/knowledge_base.json,sha256=HHUH6ctyjea8R5oyhVCDedC__lGa_W9jaCGNfUVst50,474939
16
- browsergym/workarena/data_files/setup_files/lists/expected_asset_list_columns.json,sha256=oS-ANhSXZG5qD7WS_COjjiAdzyu54vJK89PwjlOrKgI,165
17
- browsergym/workarena/data_files/setup_files/lists/expected_change_request_list_columns.json,sha256=OmOTyeiwHFH1Jx2WDVi3EeAUmGSrSJWT2BBJIS7__Qw,165
18
- browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns.json,sha256=gwf_6lOn4sqRH8L76Y_bbu87al_9zrdI2ps9y03cHjU,154
19
- browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json,sha256=ZlY7FVOy-uGxlkpwY9Rh3ThdwGpO0hktIINRUylwtKY,142
20
- browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json,sha256=xK0babXWnwUZS1-YXh10fJu27efIgjUQ5qoclNmHXy4,111
16
+ browsergym/workarena/data_files/setup_files/lists/expected_asset_list_columns.json,sha256=E9rWJjiCz6U1g3PvpLYvghpyTc7ypoda33z_giyRCcQ,613
17
+ browsergym/workarena/data_files/setup_files/lists/expected_change_request_list_columns.json,sha256=b-71gyEcNYuvvi9aycBD59qOcioLtqzqCR3GHq9-AL4,865
18
+ browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns.json,sha256=EgLYFRiIFKuXwrUnxts2Hg224BCdrjljB25Ny9PPaAQ,970
19
+ browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json,sha256=DJAG4sf6bEeq9oQkbbzZkDL7un29Q-6wuMhhd8Cy244,500
20
+ browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json,sha256=sncClj2ekwQr3WQSwBX18N2Dd4TvUlhWQrne0vtEgAA,538
21
21
  browsergym/workarena/data_files/setup_files/lists/expected_user_list_columns.json,sha256=L4yWNhOczhgC4gKOikrRgX2p2jFxaJ5XSsMM20zwjV4,1068
22
22
  browsergym/workarena/data_files/task_configs/all_menu.json,sha256=LRSnt05rFL4uE5f25f9Zj8RkrLKsBvZtrrwGdZ0a53E,270388
23
23
  browsergym/workarena/data_files/task_configs/create_change_request_task.json,sha256=LMxS2YiG8_eH0fhXBis1fyAXE_XYZPwMmMuD2QuzdDY,6306733
@@ -42,24 +42,24 @@ browsergym/workarena/data_files/task_configs/order_ipad_pro_task.json,sha256=gR5
42
42
  browsergym/workarena/data_files/task_configs/order_loaner_laptop_task.json,sha256=g_BDRnvn5wm7rRcISdmT197-4MDe2QfsWmY5FnCG7Tc,183107
43
43
  browsergym/workarena/data_files/task_configs/order_sales_laptop_task.json,sha256=6IGZg5NE2pjrUeDyOajk3Z2F4TCjqBRLS9VPh7lEu5Q,707828
44
44
  browsergym/workarena/data_files/task_configs/order_standard_laptop_task.json,sha256=qSh8lM13RgQyaKAzNIwAM0B84iZvSOgY1FQEAGeawaA,516203
45
- browsergym/workarena/data_files/task_configs/sort_asset_list_task.json,sha256=fd2qj58vf4APg7XFHOhrdin6cxMp17pCpNBVy5yyiaw,354527
46
- browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json,sha256=Z0D1Tdvr1_KyJxxxEsX2RSaaWRrHXyS4F5-SubqvPUA,347037
47
- browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json,sha256=llZgNDw7OhVLWvGHCinZvIwAKV0bw4u7THnTtn42q8E,343185
48
- browsergym/workarena/data_files/task_configs/sort_incident_list_task.json,sha256=KfXQRAHUYCeVcH-8t0_6msL0jyZZH2M-6ObxMYpXWNI,348811
49
- browsergym/workarena/data_files/task_configs/sort_service_catalog_item_list_task.json,sha256=AVYbhgbF5YoVPHq2nGPumyH2MvVYbtiojl2ItSXJ2m4,348240
50
- browsergym/workarena/data_files/task_configs/sort_user_list_task.json,sha256=5b6hfGOwzEii7h89SjWP78pD1eSQ_504-Ryd7zS5lAM,320183
45
+ browsergym/workarena/data_files/task_configs/sort_asset_list_task.json,sha256=CxGupg15OFAT8z0ddieTJnIOQ1xHqCJJkqPgZI1sJNA,44721
46
+ browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json,sha256=dmYPzs86MGzD-j_h8bEiynH9LWdfm12a2Z5PkSJ7-dc,45862
47
+ browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json,sha256=iE5RmskNfiw-6CajMgmB75oxyJ8qu5JIjJugHf1NNPQ,45127
48
+ browsergym/workarena/data_files/task_configs/sort_incident_list_task.json,sha256=zh2GnqXM8BRj7C6vnIyrYD-Yo9rxe09rT4zXoCmveTA,45205
49
+ browsergym/workarena/data_files/task_configs/sort_service_catalog_item_list_task.json,sha256=c0tNR4c7nrOw922VER8vpG6KNuv62399bJBJ4rJcgC0,46700
50
+ browsergym/workarena/data_files/task_configs/sort_user_list_task.json,sha256=qcSQEtSjg0Fu4SeBMjjMukD7ndKkYFdiX4DBRDftqbU,44336
51
51
  browsergym/workarena/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  browsergym/workarena/tasks/base.py,sha256=O0IDwvSIRrHUvFRzIsr0Yl9ph59IacpC52O_xlFmjTU,3419
53
- browsergym/workarena/tasks/form.py,sha256=gsVBqIYzu1g6IJ7pZtJO04WavNftd9P_lrcumjxjlVM,30521
53
+ browsergym/workarena/tasks/form.py,sha256=eRm0j5inqHJzjDmeGxqCTDKK_spxEAKfyqtmrS_xx9k,30599
54
54
  browsergym/workarena/tasks/knowledge.py,sha256=lVs058sceJS_DkoBw3lRymmy5rTjLH38Fr7BqaGZikI,5771
55
- browsergym/workarena/tasks/list.py,sha256=lvTgYvUc8wUNXukNSkFBUeeusD1TNIB_NDaAqK78i_8,35609
55
+ browsergym/workarena/tasks/list.py,sha256=59nkZzEtPvOQ7cXjNJLCvy5P9C-ZBZYnazMhSnjXq_0,37108
56
56
  browsergym/workarena/tasks/navigation.py,sha256=5n6wIXxF-vZK5OXl-runw6tFdBeH6JdvnBO5dtEJrbw,7384
57
57
  browsergym/workarena/tasks/service_catalog.py,sha256=36XsIsKX5OowEJQySoI8-pIuSC34rge8bnkvKS_vU5I,21661
58
58
  browsergym/workarena/tasks/scripts/README.md,sha256=-jOtGf9k2zoBhrBkesmfDnr9-s0PhOEi0KWI9xfOw1s,296
59
59
  browsergym/workarena/tasks/scripts/extract_all_menu_items.py,sha256=U-GNI_cCYA2Jggtx22MQVEOKcojnYxEC2_YBBd-GCAw,9870
60
60
  browsergym/workarena/tasks/scripts/generate_forms.py,sha256=AG1-SDZDX8iEGT0Lq2Xhl5iYTPnQqUDfaGXUtP7ULrg,3697
61
61
  browsergym/workarena/tasks/scripts/knowledge.py,sha256=Qrv3AY9i6vjXhitDFITGjNjMvOL6H7FLKCJR8hA6Qdo,1259
62
- browsergym/workarena/tasks/scripts/list.py,sha256=VbkKgpvBTFi8O5EQU0bsnRhnLtL9ei5t1iemNeMjiVs,3837
62
+ browsergym/workarena/tasks/scripts/list.py,sha256=pKo3x8DEZukb9xc49qSgdYbAlQHIOLLWYccQ1Ygp2Ao,4805
63
63
  browsergym/workarena/tasks/scripts/navigation.py,sha256=2GIIGoW6Ad2YpwX99_MTuLoijSk-EgsjfRNiRaYaitE,853
64
64
  browsergym/workarena/tasks/scripts/service_catalog.py,sha256=LrNSScDQOxXNdYdMG4j14idw0D7FUbFM1Dn0ESUbJi0,4862
65
65
  browsergym/workarena/tasks/scripts/validate.py,sha256=CNC63sGdk0smHl2SloqeSO4Xy1nTDXzLnPoUak_YWoU,7521
@@ -67,8 +67,8 @@ browsergym/workarena/tasks/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
67
67
  browsergym/workarena/tasks/utils/debug.py,sha256=EEy7Rt2ETwkorPm0s6y_u0wutl5rDp_PVuM7BvnsbIA,670
68
68
  browsergym/workarena/tasks/utils/form.py,sha256=EMi_L6WBvIX9loczyVMGqBbYcb34r3zwVphr2KPh69M,2487
69
69
  browsergym/workarena/tasks/utils/js_utils.js,sha256=DTU9oiO1IC-8sAb_CY5KwVWx9jrjdmP8aAEMZZEww_k,1642
70
- browsergym_workarena-0.1.0rc6.dist-info/METADATA,sha256=N-3bdEMDkSG79G-G5EBm1z-wo4VLVwz2Vuh08cHMu5U,7240
71
- browsergym_workarena-0.1.0rc6.dist-info/WHEEL,sha256=bq9SyP5NxIRA9EpQgMCd-9RmPHWvbH-4lTDGwxgIR64,87
72
- browsergym_workarena-0.1.0rc6.dist-info/entry_points.txt,sha256=rjnc1GaWB89r1PO0P_Uwriv-iVzWMhRM7EqUtXluDPs,72
73
- browsergym_workarena-0.1.0rc6.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
74
- browsergym_workarena-0.1.0rc6.dist-info/RECORD,,
70
+ browsergym_workarena-0.1.0rc7.dist-info/METADATA,sha256=oCk7FAnCjbAMoTG7s6KTQZl4NFjrE2xlIYh09msUDF4,7240
71
+ browsergym_workarena-0.1.0rc7.dist-info/WHEEL,sha256=uNdcs2TADwSd5pVaP0Z_kcjcvvTUklh2S7bxZMF8Uj0,87
72
+ browsergym_workarena-0.1.0rc7.dist-info/entry_points.txt,sha256=rjnc1GaWB89r1PO0P_Uwriv-iVzWMhRM7EqUtXluDPs,72
73
+ browsergym_workarena-0.1.0rc7.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
74
+ browsergym_workarena-0.1.0rc7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.22.3
2
+ Generator: hatchling 1.22.4
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any