optimize async task and remove hover (#1095)
This commit is contained in:
@@ -209,8 +209,8 @@ class ForgeAgent:
|
|||||||
)
|
)
|
||||||
return task
|
return task
|
||||||
|
|
||||||
def register_async_operations(self, organization: Organization, task: Task, page: Page) -> None:
|
async def register_async_operations(self, organization: Organization, task: Task, page: Page) -> None:
|
||||||
operations = app.AGENT_FUNCTION.generate_async_operations(organization, task, page)
|
operations = await app.AGENT_FUNCTION.generate_async_operations(organization, task, page)
|
||||||
self.async_operation_pool.add_operations(task.task_id, operations)
|
self.async_operation_pool.add_operations(task.task_id, operations)
|
||||||
|
|
||||||
async def execute_step(
|
async def execute_step(
|
||||||
@@ -273,7 +273,7 @@ class ForgeAgent:
|
|||||||
) = await self._initialize_execution_state(task, step, workflow_run)
|
) = await self._initialize_execution_state(task, step, workflow_run)
|
||||||
|
|
||||||
if page := await browser_state.get_working_page():
|
if page := await browser_state.get_working_page():
|
||||||
self.register_async_operations(organization, task, page)
|
await self.register_async_operations(organization, task, page)
|
||||||
|
|
||||||
step, detailed_output = await self.agent_step(
|
step, detailed_output = await self.agent_step(
|
||||||
task, step, browser_state, organization=organization, task_block=task_block
|
task, step, browser_state, organization=organization, task_block=task_block
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ class AgentFunction:
|
|||||||
"""
|
"""
|
||||||
return
|
return
|
||||||
|
|
||||||
def generate_async_operations(
|
async def generate_async_operations(
|
||||||
self,
|
self,
|
||||||
organization: Organization,
|
organization: Organization,
|
||||||
task: Task,
|
task: Task,
|
||||||
|
|||||||
@@ -1074,15 +1074,6 @@ async def chain_click(
|
|||||||
# File choosers are impossible to close if you don't expect one. Instead of dealing with it, close it!
|
# File choosers are impossible to close if you don't expect one. Instead of dealing with it, close it!
|
||||||
|
|
||||||
locator = skyvern_element.locator
|
locator = skyvern_element.locator
|
||||||
try:
|
|
||||||
await locator.hover(timeout=timeout)
|
|
||||||
except Exception:
|
|
||||||
LOG.warning(
|
|
||||||
"Failed to hover over element in chain_click",
|
|
||||||
action=action,
|
|
||||||
locator=locator,
|
|
||||||
exc_info=True,
|
|
||||||
)
|
|
||||||
# TODO (suchintan): This should likely result in an ActionFailure -- we can figure out how to do this later!
|
# TODO (suchintan): This should likely result in an ActionFailure -- we can figure out how to do this later!
|
||||||
LOG.info("Chain click starts", action=action, locator=locator)
|
LOG.info("Chain click starts", action=action, locator=locator)
|
||||||
file: list[str] | str = []
|
file: list[str] | str = []
|
||||||
@@ -1171,7 +1162,6 @@ async def chain_click(
|
|||||||
parent_javascript_triggered = await is_javascript_triggered(scraped_page, page, parent_locator)
|
parent_javascript_triggered = await is_javascript_triggered(scraped_page, page, parent_locator)
|
||||||
javascript_triggered = javascript_triggered or parent_javascript_triggered
|
javascript_triggered = javascript_triggered or parent_javascript_triggered
|
||||||
|
|
||||||
await parent_locator.hover(timeout=timeout)
|
|
||||||
await parent_locator.click(timeout=timeout)
|
await parent_locator.click(timeout=timeout)
|
||||||
|
|
||||||
LOG.info(
|
LOG.info(
|
||||||
@@ -2283,10 +2273,6 @@ async def click_sibling_of_input(
|
|||||||
input_id = await input_element.get_attribute("id")
|
input_id = await input_element.get_attribute("id")
|
||||||
sibling_label_css = f'label[for="{input_id}"]'
|
sibling_label_css = f'label[for="{input_id}"]'
|
||||||
label_locator = parent_locator.locator(sibling_label_css)
|
label_locator = parent_locator.locator(sibling_label_css)
|
||||||
try:
|
|
||||||
await locator.hover(timeout=timeout)
|
|
||||||
except Exception:
|
|
||||||
LOG.warning("Failed to hover over input element in click_sibling_of_input", exc_info=True)
|
|
||||||
await label_locator.click(timeout=timeout)
|
await label_locator.click(timeout=timeout)
|
||||||
LOG.info(
|
LOG.info(
|
||||||
"Successfully clicked sibling label of input element",
|
"Successfully clicked sibling label of input element",
|
||||||
|
|||||||
@@ -456,6 +456,34 @@ class SkyvernElement:
|
|||||||
async def input_clear(self, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS) -> None:
|
async def input_clear(self, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS) -> None:
|
||||||
await self.get_locator().clear(timeout=timeout)
|
await self.get_locator().clear(timeout=timeout)
|
||||||
|
|
||||||
|
async def move_mouse_to_safe(
|
||||||
|
self,
|
||||||
|
page: Page,
|
||||||
|
task_id: str | None = None,
|
||||||
|
step_id: str | None = None,
|
||||||
|
timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS,
|
||||||
|
) -> tuple[float, float] | tuple[None, None]:
|
||||||
|
element_id = self.get_id()
|
||||||
|
try:
|
||||||
|
return await self.move_mouse_to(page, timeout=timeout)
|
||||||
|
except NoElementBoudingBox:
|
||||||
|
LOG.warning(
|
||||||
|
"Failed to move mouse to the element - NoElementBoudingBox",
|
||||||
|
task_id=task_id,
|
||||||
|
step_id=step_id,
|
||||||
|
element_id=element_id,
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
LOG.warning(
|
||||||
|
"Failed to move mouse to the element - unexpectd exception",
|
||||||
|
task_id=task_id,
|
||||||
|
step_id=step_id,
|
||||||
|
element_id=element_id,
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
|
return None, None
|
||||||
|
|
||||||
async def move_mouse_to(
|
async def move_mouse_to(
|
||||||
self, page: Page, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS
|
self, page: Page, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS
|
||||||
) -> tuple[float, float]:
|
) -> tuple[float, float]:
|
||||||
|
|||||||
Reference in New Issue
Block a user