Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/askui/computer_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
ComputerListDisplaysTool,
ComputerMouseClickTool,
ComputerMouseHoldDownTool,
ComputerMousePressHoldReleaseTool,
ComputerMouseReleaseTool,
ComputerMouseScrollTool,
ComputerMoveMouseTool,
Expand Down Expand Up @@ -511,6 +512,7 @@ def get_default_tools() -> list[Tool]:
ComputerKeyboardTapTool(),
ComputerMouseClickTool(),
ComputerMouseHoldDownTool(),
ComputerMousePressHoldReleaseTool(),
ComputerMouseReleaseTool(),
ComputerMouseScrollTool(),
ComputerMoveMouseTool(),
Expand Down
2 changes: 2 additions & 0 deletions src/askui/tools/computer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from .list_displays_tool import ComputerListDisplaysTool
from .mouse_click_tool import ComputerMouseClickTool
from .mouse_hold_down_tool import ComputerMouseHoldDownTool
from .mouse_press_hold_release_tool import ComputerMousePressHoldReleaseTool
from .mouse_release_tool import ComputerMouseReleaseTool
from .mouse_scroll_tool import ComputerMouseScrollTool
from .move_mouse_tool import ComputerMoveMouseTool
Expand All @@ -26,6 +27,7 @@
"ComputerKeyboardTapTool",
"ComputerMouseClickTool",
"ComputerMouseHoldDownTool",
"ComputerMousePressHoldReleaseTool",
"ComputerMouseReleaseTool",
"ComputerMouseScrollTool",
"ComputerMoveMouseTool",
Expand Down
44 changes: 44 additions & 0 deletions src/askui/tools/computer/mouse_press_hold_release_tool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import time
from typing import get_args

from askui.models.shared import ComputerBaseTool
from askui.tools.agent_os import AgentOs, MouseButton


class ComputerMousePressHoldReleaseTool(ComputerBaseTool):
"""Computer Mouse Press Hold Release Tool"""

def __init__(self, agent_os: AgentOs | None = None) -> None:
super().__init__(
name="mouse_press_hold_release",
description=(
"Press down the mouse button at the current position and hold"
" it down for the specified time, then release it."
),
input_schema={
"type": "object",
"properties": {
"mouse_button": {
"type": "string",
"description": "The mouse button to hold down.",
"enum": get_args(MouseButton),
},
"hold_time": {
"type": "integer",
"description": (
"The number of seconds the button is pressed."
" Must be an integer, e.g. 5 for 5 seconds."
),
},
},
"required": ["mouse_button", "hold_time"],
},
agent_os=agent_os,
)
self.is_cacheable = True

def __call__(self, mouse_button: MouseButton, hold_time: int) -> str:
self.agent_os.mouse_down(mouse_button)
time.sleep(hold_time)
self.agent_os.mouse_up(mouse_button)
return f"Mouse button {mouse_button} was pressed for {hold_time} seconds."
Loading