browsergym-workarena 0.2.0__py3-none-any.whl → 0.3.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.
Files changed (91) hide show
  1. browsergym/workarena/__init__.py +13 -1
  2. browsergym/workarena/api/category.py +74 -0
  3. browsergym/workarena/api/change_request.py +87 -0
  4. browsergym/workarena/api/computer_asset.py +90 -0
  5. browsergym/workarena/api/cost_center.py +19 -0
  6. browsergym/workarena/api/expense_line.py +89 -0
  7. browsergym/workarena/api/incident.py +45 -0
  8. browsergym/workarena/api/knowledge.py +29 -0
  9. browsergym/workarena/api/problem.py +90 -0
  10. browsergym/workarena/api/report.py +183 -0
  11. browsergym/workarena/api/requested_items.py +63 -0
  12. browsergym/workarena/api/user.py +11 -8
  13. browsergym/workarena/api/utils.py +47 -3
  14. browsergym/workarena/config.py +21 -1
  15. browsergym/workarena/data_files/setup_files/forms/expected_incident_form_fields.json +1 -1
  16. browsergym/workarena/data_files/setup_files/forms/expected_request_item_form_fields.json +1 -0
  17. browsergym/workarena/data_files/setup_files/knowledge/protocols.json +46 -0
  18. browsergym/workarena/data_files/setup_files/knowledge/test.html +1 -0
  19. browsergym/workarena/data_files/setup_files/lists/expected_asset_list_columns.json +2 -24
  20. browsergym/workarena/data_files/setup_files/lists/expected_change_request_list_columns.json +4 -40
  21. browsergym/workarena/data_files/setup_files/lists/expected_expense_line_list_columns.json +12 -0
  22. browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns.json +1 -42
  23. browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json +2 -18
  24. browsergym/workarena/data_files/setup_files/lists/expected_problem_list_columns.json +12 -0
  25. browsergym/workarena/data_files/setup_files/lists/expected_requested_items_list_columns.json +12 -0
  26. browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json +2 -19
  27. browsergym/workarena/data_files/setup_files/lists/expected_user_list_columns.json +3 -50
  28. browsergym/workarena/data_files/task_configs/all_menu.json +95 -95
  29. browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json +1 -1
  30. browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json +1 -1
  31. browsergym/workarena/data_files/task_configs/filter_service_catalog_item_list_task.json +7986 -7982
  32. browsergym/workarena/data_files/task_configs/impersonation_users.json +3 -3
  33. browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json +1 -1
  34. browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json +1 -1
  35. browsergym/workarena/human_eval/console.js +176 -0
  36. browsergym/workarena/human_eval/tool.py +366 -0
  37. browsergym/workarena/install.py +81 -20
  38. browsergym/workarena/tasks/base.py +55 -20
  39. browsergym/workarena/tasks/comp_building_block.py +4 -0
  40. browsergym/workarena/tasks/compositional/__init__.py +76 -0
  41. browsergym/workarena/tasks/compositional/base.py +364 -0
  42. browsergym/workarena/tasks/compositional/dash_do_base.py +1366 -0
  43. browsergym/workarena/tasks/compositional/dash_do_catalog.py +1127 -0
  44. browsergym/workarena/tasks/compositional/dash_do_catalog_infeasible.py +2047 -0
  45. browsergym/workarena/tasks/compositional/dash_do_create_incident.py +403 -0
  46. browsergym/workarena/tasks/compositional/dash_do_create_incident_infeasible.py +278 -0
  47. browsergym/workarena/tasks/compositional/dash_do_create_problem.py +336 -0
  48. browsergym/workarena/tasks/compositional/dash_do_create_problem_infeasible.py +235 -0
  49. browsergym/workarena/tasks/compositional/dash_do_filter.py +1600 -0
  50. browsergym/workarena/tasks/compositional/dash_do_request_item.py +1315 -0
  51. browsergym/workarena/tasks/compositional/dash_do_request_item_infeasible.py +693 -0
  52. browsergym/workarena/tasks/compositional/delete_record.py +341 -0
  53. browsergym/workarena/tasks/compositional/edit_knowledge_base.py +457 -0
  54. browsergym/workarena/tasks/compositional/expense_management.py +598 -0
  55. browsergym/workarena/tasks/compositional/filter_and_do.py +139 -0
  56. browsergym/workarena/tasks/compositional/find_and_order_item.py +345 -0
  57. browsergym/workarena/tasks/compositional/manage_change_request_schedule.py +1417 -0
  58. browsergym/workarena/tasks/compositional/mark_duplicate_problems.py +499 -0
  59. browsergym/workarena/tasks/compositional/maximize_investment_return.py +1763 -0
  60. browsergym/workarena/tasks/compositional/navigate_and_do.py +1151 -0
  61. browsergym/workarena/tasks/compositional/navigate_and_do_infeasible.py +2100 -0
  62. browsergym/workarena/tasks/compositional/offboard_user.py +207 -0
  63. browsergym/workarena/tasks/compositional/onboard_user.py +226 -0
  64. browsergym/workarena/tasks/compositional/update_task.py +145 -0
  65. browsergym/workarena/tasks/compositional/utils/curriculum.py +215 -0
  66. browsergym/workarena/tasks/compositional/utils/infeasible_configs.py +151 -0
  67. browsergym/workarena/tasks/compositional/utils/knapsack.py +192 -0
  68. browsergym/workarena/tasks/compositional/warranty_check.py +227 -0
  69. browsergym/workarena/tasks/compositional/work_assignment.py +804 -0
  70. browsergym/workarena/tasks/compositional/workload_balancing.py +396 -0
  71. browsergym/workarena/tasks/dashboard.py +188 -8
  72. browsergym/workarena/tasks/form.py +1024 -232
  73. browsergym/workarena/tasks/knowledge.py +216 -25
  74. browsergym/workarena/tasks/list.py +519 -102
  75. browsergym/workarena/tasks/mark_duplicate_problem.py +171 -0
  76. browsergym/workarena/tasks/navigation.py +55 -13
  77. browsergym/workarena/tasks/scripts/extract_all_menu_items.py +9 -2
  78. browsergym/workarena/tasks/scripts/generate_dashboard_configs.py +6 -5
  79. browsergym/workarena/tasks/scripts/service_catalog.py +2 -1
  80. browsergym/workarena/tasks/scripts/validate.py +8 -2
  81. browsergym/workarena/tasks/send_chat_message.py +90 -0
  82. browsergym/workarena/tasks/service_catalog.py +94 -26
  83. browsergym/workarena/tasks/utils/form.py +1 -4
  84. browsergym/workarena/tasks/utils/private_tasks.py +63 -0
  85. browsergym/workarena/tasks/utils/utils.py +13 -0
  86. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/METADATA +27 -20
  87. browsergym_workarena-0.3.0.dist-info/RECORD +138 -0
  88. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/entry_points.txt +1 -0
  89. browsergym_workarena-0.2.0.dist-info/RECORD +0 -85
  90. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/WHEEL +0 -0
  91. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,693 @@
1
+ import random
2
+ from playwright.sync_api._generated import Page
3
+ from typing import Tuple
4
+
5
+ from .dash_do_base import DashboardRetrieveIncidentAndDoInfeasibleTask, DashDoFinalTask
6
+ from .utils.infeasible_configs import get_infeasible_form_config
7
+
8
+ from ..base import AbstractServiceNowTask
9
+ from ..dashboard import ReportMinMaxRetrievalTask
10
+
11
+ from ...api.utils import table_api_call, db_delete_from_table
12
+ from ...instance import SNowInstance
13
+
14
+ from browsergym.workarena.tasks.navigation import AllMenuTask
15
+ from browsergym.workarena.tasks.form import CreateItemRequestTask
16
+
17
+
18
+ class DashboardRetrieveIncidentAndRequestItemInfeasibleTask(
19
+ DashboardRetrieveIncidentAndDoInfeasibleTask
20
+ ):
21
+ def __init__(
22
+ self,
23
+ instance: SNowInstance = None,
24
+ seed: int = None,
25
+ fixed_config: list[AbstractServiceNowTask] = None,
26
+ level: int = 2,
27
+ item: str = None,
28
+ question: str = None,
29
+ dashboard_class: AbstractServiceNowTask = None,
30
+ provide_reason: bool = None,
31
+ ) -> None:
32
+ """
33
+ Retrieve the best performing agent and request an item for them.
34
+ Attributes:
35
+ -----------
36
+ task_description: str
37
+ The start of the task description to be completed.
38
+ short_description: str
39
+ A short description of the task to be completed. ""Order an item for the best performing employee from the list"
40
+ """
41
+ super().__init__(
42
+ instance=instance,
43
+ seed=seed,
44
+ fixed_config=fixed_config,
45
+ level=level,
46
+ question=question,
47
+ dashboard_class=dashboard_class,
48
+ function=get_infeasible_form_config,
49
+ provide_reason=provide_reason,
50
+ )
51
+ if not item:
52
+ raise Exception("No item passed to assign")
53
+ self.item = item
54
+ self.task_description = ""
55
+ self.short_description = (
56
+ f"Order an {self.item} for the best performing employee from the list."
57
+ )
58
+ self.attribute_name = "assigned_to" # Return full name
59
+ self.filter_than = "greater"
60
+ self.prefix = "IRI"
61
+
62
+ def set_compositional_task(self) -> None:
63
+ # The unique name for the user is created once the task is instantiated
64
+ requested_items = table_api_call(
65
+ instance=self.instance,
66
+ table="sc_req_item",
67
+ method="GET",
68
+ )["result"]
69
+ current_requested_items_numbers = [
70
+ requested_item["number"] for requested_item in requested_items
71
+ ]
72
+
73
+ agent_full_names, agent_value_sysids = self.get_agent_values(
74
+ self.attribute_name, self.filter_than
75
+ )
76
+ self.agent_value_sysids = agent_value_sysids
77
+
78
+ requested_item_numbers = []
79
+
80
+ for _ in range(len(agent_full_names)):
81
+ requested_item_number = "RITM" + str(random.randint(1000000, 9999999))
82
+ while (
83
+ requested_item_number in current_requested_items_numbers
84
+ or requested_item_number in requested_item_numbers
85
+ ):
86
+ requested_item_number = "RITM" + str(random.randint(1000000, 9999999))
87
+ requested_item_numbers.append(requested_item_number)
88
+
89
+ self.requested_item_numbers = requested_item_numbers
90
+
91
+ create_item_request_subtasks = []
92
+
93
+ for agent_full_name, requested_item_number in zip(agent_full_names, requested_item_numbers):
94
+ request_item_config = {
95
+ "fields": {
96
+ "number": "Number",
97
+ "cat_item": "Item",
98
+ "requested_for": "Requested for",
99
+ "quantity": "Quantity",
100
+ },
101
+ "task_fields": ["number", "cat_item", "requested_for", "quantity"],
102
+ "template_record": {
103
+ "number": requested_item_number,
104
+ "cat_item": self.item,
105
+ "requested_for": agent_full_name,
106
+ "quantity": "1",
107
+ },
108
+ "infeasible_task_fields": ["number", "cat_item", "quantity"],
109
+ }
110
+ request_item_config, self.infeasible_reasons = self.function(
111
+ config=request_item_config, random=self.random
112
+ )
113
+ create_item_request_subtask = [
114
+ # Navigate to the item request list
115
+ AllMenuTask(
116
+ instance=self.instance,
117
+ fixed_config={
118
+ "application": "Open Records",
119
+ "module": "Open Records > Items",
120
+ "url": "/now/nav/ui/classic/params/target/sc_req_item_list.do",
121
+ },
122
+ is_validated=False,
123
+ used_in_level_2=True,
124
+ ),
125
+ # Create an item request
126
+ CreateItemRequestTask(
127
+ instance=self.instance,
128
+ fixed_config=request_item_config,
129
+ is_validated=False,
130
+ used_in_level_2=True,
131
+ check_record_created=False,
132
+ ),
133
+ ]
134
+ create_item_request_subtasks += create_item_request_subtask
135
+
136
+ self.compositional_task = create_item_request_subtasks
137
+
138
+ def setup_goal(self, page: Page) -> tuple[str, dict]:
139
+ self.create_report()
140
+ self.set_compositional_task()
141
+ config = self.fixed_config if self.fixed_config else self._get_config()
142
+ if self.level == 3:
143
+ self.task_description = (
144
+ self.task_description
145
+ + f"Value to retrieve: {self.description_mapping[self.question]} of all the incidents. Comparator: Greather than or equal to the value.\n"
146
+ + f"Task: Request items with the following information: \n"
147
+ + f"Item: {self.item}, Quantity: 1.\n"
148
+ + f"Request the item for each of the agents mentioned above. You can use the item numbers: {self.requested_item_numbers}, one for each request."
149
+ )
150
+
151
+ goal, info = super().setup_goal(page=page, config=config)
152
+
153
+ if self.level == 2:
154
+ goal = (
155
+ self.task_description
156
+ + f"1. Navigate to the CMDB reports and look for the report with the mentioned hashtag. \n"
157
+ + f"2. Find the agents with number of incidents greater than or equal to the {self.description_mapping[self.question]} of the incidents assigned to every one. \n"
158
+ + f"3. Navigate to Open Records > Items. \n"
159
+ + f"4. Create new item requests with the following field values:- 'Item: {self.item}, Quantity: 1' and assign them to each of the agents. You will create as many item requests as there are agents.\n"
160
+ + f"You should use the following request numbers for each item request (one for each): {self.requested_item_numbers}."
161
+ )
162
+
163
+ return goal, info
164
+
165
+ def teardown(self) -> None:
166
+ for requested_item_number in self.requested_item_numbers:
167
+ created_item_request_response = table_api_call(
168
+ instance=self.instance,
169
+ table="sc_req_item",
170
+ params={
171
+ "sysparm_query": f"number={requested_item_number}",
172
+ },
173
+ method="GET",
174
+ )["result"]
175
+ if len(created_item_request_response) > 1:
176
+ raise Exception("Multiple request items created")
177
+ if len(created_item_request_response) == 1:
178
+ created_item_request_sysid = created_item_request_response[0]["sys_id"]
179
+ db_delete_from_table(
180
+ instance=self.instance,
181
+ table="sc_req_item",
182
+ sys_id=created_item_request_sysid,
183
+ )
184
+ return super().teardown()
185
+
186
+
187
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatchInfeasibleWithReasonTask(
188
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
189
+ ):
190
+ def __init__(
191
+ self,
192
+ instance: SNowInstance = None,
193
+ seed: int = None,
194
+ fixed_config: list[AbstractServiceNowTask] = None,
195
+ level: int = 2,
196
+ ) -> None:
197
+ """
198
+ Retrieve the best performing agent and request an apple watch for them.
199
+ """
200
+ super().__init__(
201
+ instance=instance,
202
+ seed=seed,
203
+ fixed_config=fixed_config,
204
+ level=level,
205
+ item="Apple Watch",
206
+ question="max",
207
+ dashboard_class=ReportMinMaxRetrievalTask,
208
+ provide_reason=True,
209
+ )
210
+
211
+
212
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatchInfeasibleTask(
213
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
214
+ ):
215
+ def __init__(
216
+ self,
217
+ instance: SNowInstance = None,
218
+ seed: int = None,
219
+ fixed_config: list[AbstractServiceNowTask] = None,
220
+ level: int = 2,
221
+ ) -> None:
222
+ """
223
+ Retrieve the best performing agent and request an apple watch for them.
224
+ """
225
+ super().__init__(
226
+ instance=instance,
227
+ seed=seed,
228
+ fixed_config=fixed_config,
229
+ level=level,
230
+ item="Apple Watch",
231
+ question="max",
232
+ dashboard_class=ReportMinMaxRetrievalTask,
233
+ provide_reason=False,
234
+ )
235
+
236
+
237
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatch2InfeasibleWithReasonTask(
238
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
239
+ ):
240
+ def __init__(
241
+ self,
242
+ instance: SNowInstance = None,
243
+ seed: int = None,
244
+ fixed_config: list[AbstractServiceNowTask] = None,
245
+ level: int = 2,
246
+ ) -> None:
247
+ """
248
+ Retrieve the best performing agent and request an apple watch for them.
249
+ """
250
+ super().__init__(
251
+ instance=instance,
252
+ seed=seed,
253
+ fixed_config=fixed_config,
254
+ level=level,
255
+ item="Apple Watch Series 2",
256
+ question="max",
257
+ dashboard_class=ReportMinMaxRetrievalTask,
258
+ provide_reason=True,
259
+ )
260
+
261
+
262
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatch2InfeasibleTask(
263
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
264
+ ):
265
+ def __init__(
266
+ self,
267
+ instance: SNowInstance = None,
268
+ seed: int = None,
269
+ fixed_config: list[AbstractServiceNowTask] = None,
270
+ level: int = 2,
271
+ ) -> None:
272
+ """
273
+ Retrieve the best performing agent and request an apple watch for them.
274
+ """
275
+ super().__init__(
276
+ instance=instance,
277
+ seed=seed,
278
+ fixed_config=fixed_config,
279
+ level=level,
280
+ item="Apple Watch Series 2",
281
+ question="max",
282
+ dashboard_class=ReportMinMaxRetrievalTask,
283
+ provide_reason=False,
284
+ )
285
+
286
+
287
+ class DashboardRetrieveIncidentAndMaxRequestAppleIpad3InfeasibleWithReasonTask(
288
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
289
+ ):
290
+ def __init__(
291
+ self,
292
+ instance: SNowInstance = None,
293
+ seed: int = None,
294
+ fixed_config: list[AbstractServiceNowTask] = None,
295
+ level: int = 2,
296
+ ) -> None:
297
+ """
298
+ Retrieve the best performing agent and request an apple watch for them.
299
+ """
300
+ super().__init__(
301
+ instance=instance,
302
+ seed=seed,
303
+ fixed_config=fixed_config,
304
+ level=level,
305
+ item="Apple iPad 3",
306
+ question="max",
307
+ dashboard_class=ReportMinMaxRetrievalTask,
308
+ provide_reason=True,
309
+ )
310
+
311
+
312
+ class DashboardRetrieveIncidentAndMaxRequestAppleIpad3InfeasibleTask(
313
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
314
+ ):
315
+ def __init__(
316
+ self,
317
+ instance: SNowInstance = None,
318
+ seed: int = None,
319
+ fixed_config: list[AbstractServiceNowTask] = None,
320
+ level: int = 2,
321
+ ) -> None:
322
+ """
323
+ Retrieve the best performing agent and request an apple watch for them.
324
+ """
325
+ super().__init__(
326
+ instance=instance,
327
+ seed=seed,
328
+ fixed_config=fixed_config,
329
+ level=level,
330
+ item="Apple iPad 3",
331
+ question="max",
332
+ dashboard_class=ReportMinMaxRetrievalTask,
333
+ provide_reason=False,
334
+ )
335
+
336
+
337
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13proInfeasibleWithReasonTask(
338
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
339
+ ):
340
+ def __init__(
341
+ self,
342
+ instance: SNowInstance = None,
343
+ seed: int = None,
344
+ fixed_config: list[AbstractServiceNowTask] = None,
345
+ level: int = 2,
346
+ ) -> None:
347
+ """
348
+ Retrieve the best performing agent and request an apple watch for them.
349
+ """
350
+ super().__init__(
351
+ instance=instance,
352
+ seed=seed,
353
+ fixed_config=fixed_config,
354
+ level=level,
355
+ item="Apple iPhone 13 pro",
356
+ question="max",
357
+ dashboard_class=ReportMinMaxRetrievalTask,
358
+ provide_reason=True,
359
+ )
360
+
361
+
362
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13proInfeasibleTask(
363
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
364
+ ):
365
+ def __init__(
366
+ self,
367
+ instance: SNowInstance = None,
368
+ seed: int = None,
369
+ fixed_config: list[AbstractServiceNowTask] = None,
370
+ level: int = 2,
371
+ ) -> None:
372
+ """
373
+ Retrieve the best performing agent and request an apple watch for them.
374
+ """
375
+ super().__init__(
376
+ instance=instance,
377
+ seed=seed,
378
+ fixed_config=fixed_config,
379
+ level=level,
380
+ item="Apple iPhone 13 pro",
381
+ question="max",
382
+ dashboard_class=ReportMinMaxRetrievalTask,
383
+ provide_reason=False,
384
+ )
385
+
386
+
387
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13InfeasibleWithReasonTask(
388
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
389
+ ):
390
+ def __init__(
391
+ self,
392
+ instance: SNowInstance = None,
393
+ seed: int = None,
394
+ fixed_config: list[AbstractServiceNowTask] = None,
395
+ level: int = 2,
396
+ ) -> None:
397
+ """
398
+ Retrieve the best performing agent and request an apple watch for them.
399
+ """
400
+ super().__init__(
401
+ instance=instance,
402
+ seed=seed,
403
+ fixed_config=fixed_config,
404
+ level=level,
405
+ item="Apple iPhone 13",
406
+ question="max",
407
+ dashboard_class=ReportMinMaxRetrievalTask,
408
+ provide_reason=True,
409
+ )
410
+
411
+
412
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13InfeasibleTask(
413
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
414
+ ):
415
+ def __init__(
416
+ self,
417
+ instance: SNowInstance = None,
418
+ seed: int = None,
419
+ fixed_config: list[AbstractServiceNowTask] = None,
420
+ level: int = 2,
421
+ ) -> None:
422
+ """
423
+ Retrieve the best performing agent and request an apple watch for them.
424
+ """
425
+ super().__init__(
426
+ instance=instance,
427
+ seed=seed,
428
+ fixed_config=fixed_config,
429
+ level=level,
430
+ item="Apple iPhone 13",
431
+ question="max",
432
+ dashboard_class=ReportMinMaxRetrievalTask,
433
+ provide_reason=False,
434
+ )
435
+
436
+
437
+ class DashboardRetrieveIncidentAndMaxRequestGalaxyNote20InfeasibleWithReasonTask(
438
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
439
+ ):
440
+ def __init__(
441
+ self,
442
+ instance: SNowInstance = None,
443
+ seed: int = None,
444
+ fixed_config: list[AbstractServiceNowTask] = None,
445
+ level: int = 2,
446
+ ) -> None:
447
+ """
448
+ Retrieve the best performing agent and request an apple watch for them.
449
+ """
450
+ super().__init__(
451
+ instance=instance,
452
+ seed=seed,
453
+ fixed_config=fixed_config,
454
+ level=level,
455
+ item="Galaxy Note 20",
456
+ question="max",
457
+ dashboard_class=ReportMinMaxRetrievalTask,
458
+ provide_reason=True,
459
+ )
460
+
461
+
462
+ class DashboardRetrieveIncidentAndMaxRequestGalaxyNote20InfeasibleTask(
463
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
464
+ ):
465
+ def __init__(
466
+ self,
467
+ instance: SNowInstance = None,
468
+ seed: int = None,
469
+ fixed_config: list[AbstractServiceNowTask] = None,
470
+ level: int = 2,
471
+ ) -> None:
472
+ """
473
+ Retrieve the best performing agent and request an apple watch for them.
474
+ """
475
+ super().__init__(
476
+ instance=instance,
477
+ seed=seed,
478
+ fixed_config=fixed_config,
479
+ level=level,
480
+ item="Galaxy Note 20",
481
+ question="max",
482
+ dashboard_class=ReportMinMaxRetrievalTask,
483
+ provide_reason=False,
484
+ )
485
+
486
+
487
+ class DashboardRetrieveIncidentAndMaxRequestGoogleNexus7InfeasibleWithReasonTask(
488
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
489
+ ):
490
+ def __init__(
491
+ self,
492
+ instance: SNowInstance = None,
493
+ seed: int = None,
494
+ fixed_config: list[AbstractServiceNowTask] = None,
495
+ level: int = 2,
496
+ ) -> None:
497
+ """
498
+ Retrieve the best performing agent and request an apple watch for them.
499
+ """
500
+ super().__init__(
501
+ instance=instance,
502
+ seed=seed,
503
+ fixed_config=fixed_config,
504
+ level=level,
505
+ item="Google Nexus 7",
506
+ question="max",
507
+ dashboard_class=ReportMinMaxRetrievalTask,
508
+ provide_reason=True,
509
+ )
510
+
511
+
512
+ class DashboardRetrieveIncidentAndMaxRequestGoogleNexus7InfeasibleTask(
513
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
514
+ ):
515
+ def __init__(
516
+ self,
517
+ instance: SNowInstance = None,
518
+ seed: int = None,
519
+ fixed_config: list[AbstractServiceNowTask] = None,
520
+ level: int = 2,
521
+ ) -> None:
522
+ """
523
+ Retrieve the best performing agent and request an apple watch for them.
524
+ """
525
+ super().__init__(
526
+ instance=instance,
527
+ seed=seed,
528
+ fixed_config=fixed_config,
529
+ level=level,
530
+ item="Google Nexus 7",
531
+ question="max",
532
+ dashboard_class=ReportMinMaxRetrievalTask,
533
+ provide_reason=False,
534
+ )
535
+
536
+
537
+ class DashboardRetrieveIncidentAndMaxRequestMicrosoftSurfacePro3InfeasibleWithReasonTask(
538
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
539
+ ):
540
+ def __init__(
541
+ self,
542
+ instance: SNowInstance = None,
543
+ seed: int = None,
544
+ fixed_config: list[AbstractServiceNowTask] = None,
545
+ level: int = 2,
546
+ ) -> None:
547
+ """
548
+ Retrieve the best performing agent and request an apple watch for them.
549
+ """
550
+ super().__init__(
551
+ instance=instance,
552
+ seed=seed,
553
+ fixed_config=fixed_config,
554
+ level=level,
555
+ item="Microsoft Surface Pro 3",
556
+ question="max",
557
+ dashboard_class=ReportMinMaxRetrievalTask,
558
+ provide_reason=True,
559
+ )
560
+
561
+
562
+ class DashboardRetrieveIncidentAndMaxRequestMicrosoftSurfacePro3InfeasibleTask(
563
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
564
+ ):
565
+ def __init__(
566
+ self,
567
+ instance: SNowInstance = None,
568
+ seed: int = None,
569
+ fixed_config: list[AbstractServiceNowTask] = None,
570
+ level: int = 2,
571
+ ) -> None:
572
+ """
573
+ Retrieve the best performing agent and request an apple watch for them.
574
+ """
575
+ super().__init__(
576
+ instance=instance,
577
+ seed=seed,
578
+ fixed_config=fixed_config,
579
+ level=level,
580
+ item="Microsoft Surface Pro 3",
581
+ question="max",
582
+ dashboard_class=ReportMinMaxRetrievalTask,
583
+ provide_reason=False,
584
+ )
585
+
586
+
587
+ class DashboardRetrieveIncidentAndMaxRequestPixel4aInfeasibleWithReasonTask(
588
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
589
+ ):
590
+ def __init__(
591
+ self,
592
+ instance: SNowInstance = None,
593
+ seed: int = None,
594
+ fixed_config: list[AbstractServiceNowTask] = None,
595
+ level: int = 2,
596
+ ) -> None:
597
+ """
598
+ Retrieve the best performing agent and request an apple watch for them.
599
+ """
600
+ super().__init__(
601
+ instance=instance,
602
+ seed=seed,
603
+ fixed_config=fixed_config,
604
+ level=level,
605
+ item="Pixel 4a",
606
+ question="max",
607
+ dashboard_class=ReportMinMaxRetrievalTask,
608
+ provide_reason=True,
609
+ )
610
+
611
+
612
+ class DashboardRetrieveIncidentAndMaxRequestPixel4aInfeasibleTask(
613
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
614
+ ):
615
+ def __init__(
616
+ self,
617
+ instance: SNowInstance = None,
618
+ seed: int = None,
619
+ fixed_config: list[AbstractServiceNowTask] = None,
620
+ level: int = 2,
621
+ ) -> None:
622
+ """
623
+ Retrieve the best performing agent and request an apple watch for them.
624
+ """
625
+ super().__init__(
626
+ instance=instance,
627
+ seed=seed,
628
+ fixed_config=fixed_config,
629
+ level=level,
630
+ item="Pixel 4a",
631
+ question="max",
632
+ dashboard_class=ReportMinMaxRetrievalTask,
633
+ provide_reason=False,
634
+ )
635
+
636
+
637
+ class DashboardRetrieveIncidentAndMaxRequestWindowsSurfacePro4InfeasibleWithReasonTask(
638
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
639
+ ):
640
+ def __init__(
641
+ self,
642
+ instance: SNowInstance = None,
643
+ seed: int = None,
644
+ fixed_config: list[AbstractServiceNowTask] = None,
645
+ level: int = 2,
646
+ ) -> None:
647
+ """
648
+ Retrieve the best performing agent and request an apple watch for them.
649
+ """
650
+ super().__init__(
651
+ instance=instance,
652
+ seed=seed,
653
+ fixed_config=fixed_config,
654
+ level=level,
655
+ item="Windows Surface Pro 4",
656
+ question="max",
657
+ dashboard_class=ReportMinMaxRetrievalTask,
658
+ provide_reason=True,
659
+ )
660
+
661
+
662
+ class DashboardRetrieveIncidentAndMaxRequestWindowsSurfacePro4InfeasibleTask(
663
+ DashboardRetrieveIncidentAndRequestItemInfeasibleTask, DashDoFinalTask
664
+ ):
665
+ def __init__(
666
+ self,
667
+ instance: SNowInstance = None,
668
+ seed: int = None,
669
+ fixed_config: list[AbstractServiceNowTask] = None,
670
+ level: int = 2,
671
+ ) -> None:
672
+ """
673
+ Retrieve the best performing agent and request an apple watch for them.
674
+ """
675
+ super().__init__(
676
+ instance=instance,
677
+ seed=seed,
678
+ fixed_config=fixed_config,
679
+ level=level,
680
+ item="Windows Surface Pro 4",
681
+ question="max",
682
+ dashboard_class=ReportMinMaxRetrievalTask,
683
+ provide_reason=False,
684
+ )
685
+
686
+
687
+ local_vars = locals().copy()
688
+
689
+ __TASKS__ = [
690
+ var
691
+ for var in local_vars.values()
692
+ if isinstance(var, type) and issubclass(var, DashDoFinalTask) and var is not DashDoFinalTask
693
+ ]