1- from typing import Annotated
1+ from typing import Annotated , Optional , Type , overload
22
33from pydantic import Field
44
55from askui .agent import ComputerAgent
66from askui .agent_base import Agent
77from askui .agent_settings import AgentSettings
88from askui .android_agent import AndroidAgent
9+ from askui .locators .locators import Locator
10+ from askui .models .shared .settings import GetSettings , LocateSettings
911from askui .models .shared .tools import Tool
12+ from askui .models .types .geometry import Point
13+ from askui .models .types .response_schemas import ResponseSchema
1014from askui .prompts .act_prompts import create_multidevice_agent_prompt
1115from askui .reporting import CompositeReporter , Reporter
1216from askui .retry import Retry
17+ from askui .utils .source_utils import InputSource
1318
1419
1520class MultiDeviceAgent (Agent ):
@@ -90,6 +95,65 @@ def android(self) -> AndroidAgent:
9095 """The composed Android agent."""
9196 return self ._android_agent
9297
98+ @overload
99+ def get (
100+ self ,
101+ query : Annotated [str , Field (min_length = 1 )],
102+ response_schema : None = None ,
103+ source : Optional [InputSource ] = None ,
104+ get_settings : GetSettings | None = None ,
105+ ) -> str : ...
106+ @overload
107+ def get (
108+ self ,
109+ query : Annotated [str , Field (min_length = 1 )],
110+ response_schema : Type [ResponseSchema ],
111+ source : Optional [InputSource ] = None ,
112+ get_settings : GetSettings | None = None ,
113+ ) -> ResponseSchema : ...
114+
115+ def get (
116+ self ,
117+ query : Annotated [str , Field (min_length = 1 )],
118+ response_schema : Type [ResponseSchema ] | None = None ,
119+ source : Optional [InputSource ] = None ,
120+ get_settings : GetSettings | None = None ,
121+ ) -> ResponseSchema | str :
122+ """Not supported on `MultiDeviceAgent`.
123+
124+ Use `agent.computer.get()` or `agent.android.get()` instead.
125+
126+ Raises:
127+ NotImplementedError: Always.
128+ """
129+ error_msg = (
130+ "MultiDeviceAgent does not support get() directly."
131+ " Use agent.computer.get() or agent.android.get()"
132+ " instead."
133+ )
134+ raise NotImplementedError (error_msg )
135+
136+ def locate (
137+ self ,
138+ locator : str | Locator ,
139+ screenshot : Optional [InputSource ] = None ,
140+ locate_settings : LocateSettings | None = None ,
141+ ) -> Point :
142+ """Not supported on `MultiDeviceAgent`.
143+
144+ Use `agent.computer.locate()` or `agent.android.locate()`
145+ instead.
146+
147+ Raises:
148+ NotImplementedError: Always.
149+ """
150+ error_msg = (
151+ "MultiDeviceAgent does not support locate() directly."
152+ " Use agent.computer.locate() or"
153+ " agent.android.locate() instead."
154+ )
155+ raise NotImplementedError (error_msg )
156+
93157 def close (self ) -> None :
94158 self ._computer_agent .act_agent_os_facade .disconnect ()
95159 self ._android_agent .act_agent_os_facade .disconnect ()
@@ -99,6 +163,3 @@ def open(self) -> None:
99163 self ._computer_agent .open ()
100164 self ._android_agent .open ()
101165 super ().open ()
102-
103- # Get and locate functions must be overridden and throw please use
104- # .computer_agent and .android_agent instead.
0 commit comments