diff --git a/pyproject.toml b/pyproject.toml index 79beffc8..f3fa879e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -183,7 +183,7 @@ unfixable = [] dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" [tool.ruff.lint.per-file-ignores] -"src/askui/agent.py" = ["E501"] +"src/askui/computer_agent.py" = ["E501"] "src/askui/android_agent.py" = ["E501"] "src/askui/locators/locators.py" = ["E501"] "src/askui/locators/relatable.py" = ["E501", "SLF001"] diff --git a/src/askui/__init__.py b/src/askui/__init__.py index 9d71f276..4f3560f6 100644 --- a/src/askui/__init__.py +++ b/src/askui/__init__.py @@ -7,9 +7,9 @@ os.environ["FASTMCP_EXPERIMENTAL_ENABLE_NEW_OPENAPI_PARSER"] = "true" -from .agent import ComputerAgent, VisionAgent from .agent_base import Agent from .agent_settings import AgentSettings +from .computer_agent import ComputerAgent, VisionAgent from .locators import Locator from .models import ( Base64ImageSourceParam, diff --git a/src/askui/agent_base.py b/src/askui/agent_base.py index 6e5e94cd..3f72d84c 100644 --- a/src/askui/agent_base.py +++ b/src/askui/agent_base.py @@ -878,3 +878,7 @@ def __exit__( traceback: types.TracebackType | None, ) -> None: self.close() + + @staticmethod + def get_default_tools() -> list[Tool]: + return [] diff --git a/src/askui/android_agent.py b/src/askui/android_agent.py index 375aaf39..f9779821 100644 --- a/src/askui/android_agent.py +++ b/src/askui/android_agent.py @@ -81,23 +81,7 @@ def __init__( super().__init__( reporter=reporter, retry=retry, - tools=[ - AndroidScreenshotTool(), - AndroidTapTool(), - AndroidTypeTool(), - AndroidDragAndDropTool(), - AndroidKeyTapEventTool(), - AndroidSwipeTool(), - AndroidKeyCombinationTool(), - AndroidShellTool(), - AndroidSelectDeviceBySerialNumberTool(), - AndroidSelectDisplayByUniqueIDTool(), - AndroidGetConnectedDevicesSerialNumbersTool(), - AndroidGetConnectedDisplaysInfosTool(), - AndroidGetCurrentConnectedDeviceInfosTool(), - ExceptionTool(), - ] - + (act_tools or []), + tools=self.get_default_tools() + (act_tools or []), agent_os=self.os, settings=settings, callbacks=callbacks, @@ -357,6 +341,25 @@ def set_device_by_serial_number( ) self.os.set_device_by_serial_number(device_sn) + @staticmethod + def get_default_tools() -> list[Tool]: + return [ + AndroidScreenshotTool(), + AndroidTapTool(), + AndroidTypeTool(), + AndroidDragAndDropTool(), + AndroidKeyTapEventTool(), + AndroidSwipeTool(), + AndroidKeyCombinationTool(), + AndroidShellTool(), + AndroidSelectDeviceBySerialNumberTool(), + AndroidSelectDisplayByUniqueIDTool(), + AndroidGetConnectedDevicesSerialNumbersTool(), + AndroidGetConnectedDisplaysInfosTool(), + AndroidGetCurrentConnectedDeviceInfosTool(), + ExceptionTool(), + ] + class AndroidVisionAgent(AndroidAgent): def __init__(self, *args, **kwargs) -> None: # type: ignore diff --git a/src/askui/agent.py b/src/askui/computer_agent.py similarity index 96% rename from src/askui/agent.py rename to src/askui/computer_agent.py index b8a7895b..a71ef63c 100644 --- a/src/askui/agent.py +++ b/src/askui/computer_agent.py @@ -92,25 +92,7 @@ def __init__( super().__init__( reporter=reporter, retry=retry, - tools=[ - ExceptionTool(), - ComputerGetSystemInfoTool(), - ComputerGetMousePositionTool(), - ComputerKeyboardPressedTool(), - ComputerKeyboardReleaseTool(), - ComputerKeyboardTapTool(), - ComputerMouseClickTool(), - ComputerMouseHoldDownTool(), - ComputerMouseReleaseTool(), - ComputerMouseScrollTool(), - ComputerMoveMouseTool(), - ComputerScreenshotTool(), - ComputerTypeTool(), - ComputerListDisplaysTool(), - ComputerRetrieveActiveDisplayTool(), - ComputerSetActiveDisplayTool(), - ] - + (act_tools or []), + tools=self.get_default_tools() + (act_tools or []), agent_os=self.tools.os, settings=settings, callbacks=callbacks, @@ -508,6 +490,27 @@ def cli( ) self.tools.os.run_command(command) + @staticmethod + def get_default_tools() -> list[Tool]: + return [ + ExceptionTool(), + ComputerGetSystemInfoTool(), + ComputerGetMousePositionTool(), + ComputerKeyboardPressedTool(), + ComputerKeyboardReleaseTool(), + ComputerKeyboardTapTool(), + ComputerMouseClickTool(), + ComputerMouseHoldDownTool(), + ComputerMouseReleaseTool(), + ComputerMouseScrollTool(), + ComputerMoveMouseTool(), + ComputerScreenshotTool(), + ComputerTypeTool(), + ComputerListDisplaysTool(), + ComputerRetrieveActiveDisplayTool(), + ComputerSetActiveDisplayTool(), + ] + class VisionAgent(ComputerAgent): def __init__(self, *args, **kwargs) -> None: # type: ignore diff --git a/src/askui/web_agent.py b/src/askui/web_agent.py index 355c2987..fc6eea98 100644 --- a/src/askui/web_agent.py +++ b/src/askui/web_agent.py @@ -1,6 +1,6 @@ from pydantic import ConfigDict, validate_call -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.agent_settings import AgentSettings from askui.models.shared.settings import ( ActSettings, diff --git a/tests/e2e/agent/conftest.py b/tests/e2e/agent/conftest.py index eecc501f..19bdbaa6 100644 --- a/tests/e2e/agent/conftest.py +++ b/tests/e2e/agent/conftest.py @@ -6,8 +6,7 @@ import pytest from typing_extensions import override -from askui import AgentSettings -from askui.agent import ComputerAgent +from askui import AgentSettings, ComputerAgent from askui.locators.locators import Locator from askui.locators.serializers import AskUiLocatorSerializer from askui.model_providers.detection_provider import DetectionProvider diff --git a/tests/e2e/agent/test_act.py b/tests/e2e/agent/test_act.py index 078d68b6..124be7b8 100644 --- a/tests/e2e/agent/test_act.py +++ b/tests/e2e/agent/test_act.py @@ -1,4 +1,4 @@ -from askui.agent import ComputerAgent +from askui import ComputerAgent def test_act( diff --git a/tests/e2e/agent/test_act_caching.py b/tests/e2e/agent/test_act_caching.py index b13a2953..711b4caa 100644 --- a/tests/e2e/agent/test_act_caching.py +++ b/tests/e2e/agent/test_act_caching.py @@ -4,7 +4,7 @@ import tempfile from pathlib import Path -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.models.shared.settings import CacheExecutionSettings, CachingSettings diff --git a/tests/e2e/agent/test_agent_offset.py b/tests/e2e/agent/test_agent_offset.py index c9e0969d..6debc46d 100644 --- a/tests/e2e/agent/test_agent_offset.py +++ b/tests/e2e/agent/test_agent_offset.py @@ -5,7 +5,7 @@ from PIL import Image as PILImage -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.locators import Element if TYPE_CHECKING: diff --git a/tests/e2e/agent/test_locate.py b/tests/e2e/agent/test_locate.py index 2a3d1931..4df48ba2 100644 --- a/tests/e2e/agent/test_locate.py +++ b/tests/e2e/agent/test_locate.py @@ -5,7 +5,7 @@ import pytest from PIL import Image as PILImage -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.locators import AiElement, Element, Prompt, Text from askui.locators.locators import Image from askui.models.exceptions import ElementNotFoundError diff --git a/tests/e2e/agent/test_locate_with_different_models.py b/tests/e2e/agent/test_locate_with_different_models.py index d8f0ce88..21600c92 100644 --- a/tests/e2e/agent/test_locate_with_different_models.py +++ b/tests/e2e/agent/test_locate_with_different_models.py @@ -3,7 +3,7 @@ import pytest from PIL import Image as PILImage -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.exceptions import AutomationError from askui.locators import AiElement, Prompt, Text diff --git a/tests/e2e/agent/test_locate_with_relations.py b/tests/e2e/agent/test_locate_with_relations.py index 80c79c00..7a43a4ce 100644 --- a/tests/e2e/agent/test_locate_with_relations.py +++ b/tests/e2e/agent/test_locate_with_relations.py @@ -5,7 +5,7 @@ import pytest from PIL import Image as PILImage -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.locators import Element, Image, Prompt, Text from askui.locators.locators import AiElement from askui.models.exceptions import ElementNotFoundError diff --git a/tests/e2e/agent/test_wait.py b/tests/e2e/agent/test_wait.py index ce56562d..aecc1ec4 100644 --- a/tests/e2e/agent/test_wait.py +++ b/tests/e2e/agent/test_wait.py @@ -8,7 +8,7 @@ from PIL import Image as PILImage from pydantic import ValidationError -from askui.agent import ComputerAgent +from askui import ComputerAgent from askui.locators import Element from askui.models.exceptions import WaitUntilError diff --git a/tests/e2e/test_telemetry.py b/tests/e2e/test_telemetry.py index fa90791c..25b9202a 100644 --- a/tests/e2e/test_telemetry.py +++ b/tests/e2e/test_telemetry.py @@ -1,8 +1,8 @@ import pytest from PIL import Image +from askui import ComputerAgent from askui import locators as loc -from askui.agent import ComputerAgent from askui.container import telemetry from askui.telemetry.processors import Segment, SegmentSettings from askui.tools.toolbox import AgentToolbox