minitap-mobile-use 2.7.1__py3-none-any.whl → 2.7.2__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.

Potentially problematic release.


This version of minitap-mobile-use might be problematic. Click here for more details.

@@ -73,12 +73,8 @@ class CortexNode:
73
73
  ctx=self.ctx, name="cortex", use_fallback=True, temperature=1
74
74
  ).with_structured_output(CortexOutput)
75
75
  response: CortexOutput = await with_fallback(
76
- main_call=lambda: invoke_llm_with_timeout_message(
77
- llm.ainvoke(messages), agent_name="Cortex"
78
- ),
79
- fallback_call=lambda: invoke_llm_with_timeout_message(
80
- llm_fallback.ainvoke(messages), agent_name="Cortex (Fallback)"
81
- ),
76
+ main_call=lambda: invoke_llm_with_timeout_message(llm.ainvoke(messages)),
77
+ fallback_call=lambda: invoke_llm_with_timeout_message(llm_fallback.ainvoke(messages)),
82
78
  ) # type: ignore
83
79
 
84
80
  EMPTY_STRING_TOKENS = ["{}", "[]", "null", "", "None"]
@@ -65,12 +65,8 @@ class ExecutorNode:
65
65
  llm = llm.bind_tools(**llm_bind_tools_kwargs)
66
66
  llm_fallback = llm_fallback.bind_tools(**llm_bind_tools_kwargs)
67
67
  response = await with_fallback(
68
- main_call=lambda: invoke_llm_with_timeout_message(
69
- llm.ainvoke(messages), agent_name="Executor"
70
- ),
71
- fallback_call=lambda: invoke_llm_with_timeout_message(
72
- llm_fallback.ainvoke(messages), agent_name="Executor (Fallback)"
73
- ),
68
+ main_call=lambda: invoke_llm_with_timeout_message(llm.ainvoke(messages)),
69
+ fallback_call=lambda: invoke_llm_with_timeout_message(llm_fallback.ainvoke(messages)),
74
70
  )
75
71
  return await state.asanitize_update(
76
72
  ctx=self.ctx,
@@ -1,12 +1,17 @@
1
1
  import asyncio
2
- from typing import Any
3
- from langgraph.types import Command
4
- from pydantic import BaseModel
5
- from typing import override
6
- from langchain_core.runnables import RunnableConfig
7
- from langgraph.store.base import BaseStore
2
+ import copy
3
+ from typing import Any, override
4
+
8
5
  from langchain_core.messages import AnyMessage, ToolCall, ToolMessage
6
+ from langchain_core.runnables import RunnableConfig
9
7
  from langgraph.prebuilt import ToolNode
8
+ from langgraph.store.base import BaseStore
9
+ from langgraph.types import Command
10
+ from pydantic import BaseModel
11
+
12
+ from minitap.mobile_use.utils.logger import get_logger
13
+
14
+ logger = get_logger(__name__)
10
15
 
11
16
 
12
17
  class ExecutorToolNode(ToolNode):
@@ -67,6 +72,26 @@ class ExecutorToolNode(ToolNode):
67
72
  message=f"Unexpected tool output type: {type(output)}",
68
73
  )
69
74
  failed = True
75
+
76
+ call_without_state = copy.deepcopy(call)
77
+ if "args" in call_without_state and "state" in call_without_state["args"]:
78
+ del call_without_state["args"]["state"]
79
+ if failed:
80
+ error_msg = ""
81
+ try:
82
+ if isinstance(output, ToolMessage):
83
+ error_msg = output.content
84
+ elif isinstance(output, Command):
85
+ tool_msg = self._get_tool_message(output)
86
+ error_msg = tool_msg.content
87
+ except Exception:
88
+ error_msg = "Could not extract error details"
89
+
90
+ logger.info(f"❌ Tool call failed: {call_without_state}")
91
+ logger.info(f" Error: {error_msg}")
92
+ else:
93
+ logger.info("✅ Tool call succeeded: " + str(call_without_state))
94
+
70
95
  outputs.append(output)
71
96
  return self._combine_tool_outputs(outputs, input_type) # type: ignore
72
97
 
@@ -37,11 +37,7 @@ async def hopper(
37
37
  ctx=ctx, name="hopper", is_utils=True, use_fallback=True, temperature=0
38
38
  ).with_structured_output(HopperOutput)
39
39
  response: HopperOutput = await with_fallback(
40
- main_call=lambda: invoke_llm_with_timeout_message(
41
- llm.ainvoke(messages), agent_name="Hopper"
42
- ),
43
- fallback_call=lambda: invoke_llm_with_timeout_message(
44
- llm_fallback.ainvoke(messages), agent_name="Hopper (Fallback)"
45
- ),
40
+ main_call=lambda: invoke_llm_with_timeout_message(llm.ainvoke(messages)),
41
+ fallback_call=lambda: invoke_llm_with_timeout_message(llm_fallback.ainvoke(messages)),
46
42
  ) # type: ignore
47
43
  return response
@@ -81,12 +81,8 @@ class OrchestratorNode:
81
81
  ctx=self.ctx, name="orchestrator", use_fallback=True, temperature=1
82
82
  ).with_structured_output(OrchestratorOutput)
83
83
  response: OrchestratorOutput = await with_fallback(
84
- main_call=lambda: invoke_llm_with_timeout_message(
85
- llm.ainvoke(messages), agent_name="Orchestrator"
86
- ),
87
- fallback_call=lambda: invoke_llm_with_timeout_message(
88
- llm_fallback.ainvoke(messages), agent_name="Orchestrator (Fallback)"
89
- ),
84
+ main_call=lambda: invoke_llm_with_timeout_message(llm.ainvoke(messages)),
85
+ fallback_call=lambda: invoke_llm_with_timeout_message(llm_fallback.ainvoke(messages)),
90
86
  ) # type: ignore
91
87
  if response.needs_replaning:
92
88
  thoughts = [response.reason]
@@ -68,11 +68,9 @@ async def outputter(
68
68
  structured_llm_fallback = llm_fallback.with_structured_output(schema)
69
69
 
70
70
  response = await with_fallback(
71
- main_call=lambda: invoke_llm_with_timeout_message(
72
- structured_llm.ainvoke(messages), agent_name="Outputter"
73
- ),
71
+ main_call=lambda: invoke_llm_with_timeout_message(structured_llm.ainvoke(messages)),
74
72
  fallback_call=lambda: invoke_llm_with_timeout_message(
75
- structured_llm_fallback.ainvoke(messages), agent_name="Outputter (Fallback)"
73
+ structured_llm_fallback.ainvoke(messages)
76
74
  ),
77
75
  ) # type: ignore
78
76
  if isinstance(response, BaseModel):
@@ -52,10 +52,10 @@ class PlannerNode:
52
52
  ).with_structured_output(PlannerOutput)
53
53
  response: PlannerOutput = await with_fallback(
54
54
  main_call=lambda: invoke_llm_with_timeout_message(
55
- llm.ainvoke(messages), agent_name="Planner"
55
+ llm.ainvoke(messages),
56
56
  ),
57
57
  fallback_call=lambda: invoke_llm_with_timeout_message(
58
- llm_fallback.ainvoke(messages), agent_name="Planner (Fallback)"
58
+ llm_fallback.ainvoke(messages),
59
59
  ),
60
60
  ) # type: ignore
61
61
  subgoals_plan = [
@@ -101,11 +101,7 @@ async def screen_analyzer(ctx: MobileUseContext, screenshot_base64: str, prompt:
101
101
  llm_fallback = get_llm(ctx=ctx, name="screen_analyzer", use_fallback=True, temperature=0)
102
102
 
103
103
  response = await with_fallback(
104
- main_call=lambda: invoke_llm_with_timeout_message(
105
- llm.ainvoke(messages), agent_name="ScreenAnalyzer"
106
- ),
107
- fallback_call=lambda: invoke_llm_with_timeout_message(
108
- llm_fallback.ainvoke(messages), agent_name="ScreenAnalyzer (Fallback)"
109
- ),
104
+ main_call=lambda: invoke_llm_with_timeout_message(llm.ainvoke(messages)),
105
+ fallback_call=lambda: invoke_llm_with_timeout_message(llm_fallback.ainvoke(messages)),
110
106
  )
111
107
  return response.content # type: ignore
@@ -86,7 +86,7 @@ def record_events(output_path: Path | None, events: list[str] | BaseModel | Any)
86
86
  else:
87
87
  events_content = json.dumps(events, indent=2)
88
88
 
89
- with open(output_path, "w") as f:
89
+ with open(output_path, "w", encoding="utf-8") as f:
90
90
  f.write(events_content)
91
91
 
92
92
 
@@ -96,10 +96,14 @@ def post_executor_gate(
96
96
  if isinstance(last_message, AIMessage):
97
97
  tool_calls = getattr(last_message, "tool_calls", None)
98
98
  if tool_calls and len(tool_calls) > 0:
99
- logger.info("🔨👁️ Found tool calls: " + str(tool_calls))
99
+ logger.info("[executor] Executing " + str(len(tool_calls)) + " tool calls:")
100
+ for tool_call in tool_calls:
101
+ logger.info("-------------")
102
+ logger.info("[executor] - " + str(tool_call) + "\n")
103
+ logger.info("-------------")
100
104
  return "invoke_tools"
101
105
  else:
102
- logger.info("🔨❌ No tool calls found")
106
+ logger.info("[executor] No tool calls found")
103
107
  return "skip"
104
108
 
105
109
 
@@ -46,7 +46,7 @@ class AgentConfigBuilder:
46
46
  self._servers: ServerConfig = get_default_servers()
47
47
  self._graph_config_callbacks: Callbacks = None
48
48
 
49
- def add_profile(self, profile: AgentProfile) -> "AgentConfigBuilder":
49
+ def add_profile(self, profile: AgentProfile, validate: bool = True) -> "AgentConfigBuilder":
50
50
  """
51
51
  Add an agent profile to the mobile-use agent.
52
52
 
@@ -54,10 +54,15 @@ class AgentConfigBuilder:
54
54
  profile: The agent profile to add
55
55
  """
56
56
  self._agent_profiles[profile.name] = profile
57
- profile.llm_config.validate_providers()
57
+ if validate:
58
+ profile.llm_config.validate_providers()
58
59
  return self
59
60
 
60
- def add_profiles(self, profiles: list[AgentProfile]) -> "AgentConfigBuilder":
61
+ def add_profiles(
62
+ self,
63
+ profiles: list[AgentProfile],
64
+ validate: bool = True,
65
+ ) -> "AgentConfigBuilder":
61
66
  """
62
67
  Add multiple agent profiles to the mobile-use agent.
63
68
 
@@ -65,8 +70,7 @@ class AgentConfigBuilder:
65
70
  profiles: List of agent profiles to add
66
71
  """
67
72
  for profile in profiles:
68
- self.add_profile(profile=profile)
69
- profile.llm_config.validate_providers()
73
+ self.add_profile(profile=profile, validate=validate)
70
74
  return self
71
75
 
72
76
  def with_default_profile(self, profile: str | AgentProfile) -> "AgentConfigBuilder":
@@ -162,7 +166,7 @@ class AgentConfigBuilder:
162
166
  self._graph_config_callbacks = callbacks
163
167
  return self
164
168
 
165
- def build(self) -> AgentConfig:
169
+ def build(self, validate_profiles: bool = True) -> AgentConfig:
166
170
  """
167
171
  Build the mobile-use AgentConfig object.
168
172
 
@@ -185,14 +189,17 @@ class AgentConfigBuilder:
185
189
  elif isinstance(self._default_profile, AgentProfile):
186
190
  default_profile = self._default_profile
187
191
  if default_profile.name not in self._agent_profiles:
188
- self.add_profile(default_profile)
192
+ self.add_profile(default_profile, validate=validate_profiles)
189
193
  elif nb_profiles <= 0:
190
- llm_config = get_default_minitap_llm_config() or get_default_llm_config()
194
+ llm_config = (
195
+ get_default_minitap_llm_config(validate=validate_profiles)
196
+ or get_default_llm_config()
197
+ )
191
198
  default_profile = AgentProfile(
192
199
  name=DEFAULT_PROFILE_NAME,
193
200
  llm_config=llm_config,
194
201
  )
195
- self.add_profile(default_profile)
202
+ self.add_profile(default_profile, validate=validate_profiles)
196
203
  elif nb_profiles == 1:
197
204
  # Select the only one available
198
205
  default_profile = next(iter(self._agent_profiles.values()))
@@ -28,7 +28,6 @@ user_messages_logger = get_logger(__name__)
28
28
 
29
29
  async def invoke_llm_with_timeout_message[T](
30
30
  llm_call: Coroutine[Any, Any, T],
31
- agent_name: str,
32
31
  timeout_seconds: int = 10,
33
32
  ) -> T:
34
33
  """
@@ -36,7 +35,6 @@ async def invoke_llm_with_timeout_message[T](
36
35
 
37
36
  Args:
38
37
  llm_call: The coroutine of the LLM call to execute.
39
- agent_name: The name of the agent making the call (for the message).
40
38
  timeout_seconds: The delay in seconds before displaying the message.
41
39
 
42
40
  Returns:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: minitap-mobile-use
3
- Version: 2.7.1
3
+ Version: 2.7.2
4
4
  Summary: AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph.
5
5
  Author: Pierre-Louis Favreau, Jean-Pierre Lo, Nicolas Dehandschoewercker
6
6
  License: MIT License
@@ -1,46 +1,46 @@
1
1
  minitap/mobile_use/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
2
2
  minitap/mobile_use/agents/contextor/contextor.py,sha256=6c40c226a08219eaac34e763931d3cca2b4b2f3650afe09fd1b5f37880647969,1357
3
3
  minitap/mobile_use/agents/cortex/cortex.md,sha256=5ecc65b221f93f4b6daf50a88936bb0e585a7213ddca12e30710754f55a65f84,16321
4
- minitap/mobile_use/agents/cortex/cortex.py,sha256=21447e151a34386ec2a260ad70b0fb6acf5bb2bf4f8ccd54028bb531b935be02,5831
4
+ minitap/mobile_use/agents/cortex/cortex.py,sha256=abfed90942dda397953fc54c7dbf07bd28d59cdab8cf6c2250569cd2a3bb76b2,5718
5
5
  minitap/mobile_use/agents/cortex/types.py,sha256=04c4c91f55a587b0c3e612243d7bf1fca7328f65a7d13999df4708d6a81b54dc,945
6
6
  minitap/mobile_use/agents/executor/executor.md,sha256=a7b922203cc80b068e6a0a79b298757c8a11f45e1add84c04f026e4c351336ea,3756
7
- minitap/mobile_use/agents/executor/executor.py,sha256=99c84af73685c57d56db12874a60208619b5c329b291cc91ecbcd1a832130680,3369
8
- minitap/mobile_use/agents/executor/tool_node.py,sha256=2ad729ede393882460ae3d180ac1c0e1ab1688f40b2017220aad1b059f6485c5,3900
7
+ minitap/mobile_use/agents/executor/executor.py,sha256=5c15e49ba0eb3f663bc679880ae28deca1f769936790c42ba739f2a9f0e81934,3252
8
+ minitap/mobile_use/agents/executor/tool_node.py,sha256=e36eaee821a7425eacf95f688cf8c340925f0b824d7d01d3c303a8528337f63f,4866
9
9
  minitap/mobile_use/agents/executor/utils.py,sha256=74cf2287053cd4fc763835870e5ae029ca36f6cd0ca7d50678ad05d52ab265b7,368
10
10
  minitap/mobile_use/agents/hopper/hopper.md,sha256=a1764bc43c9b53b3bfe0584abbf0ff7b6e3f516faab3f368fa27bfd9090b5770,1555
11
- minitap/mobile_use/agents/hopper/hopper.py,sha256=76d87ba79ce9132a54224a0d8380d05d8947c292b40528ed67381fa0bfc14b4c,1650
11
+ minitap/mobile_use/agents/hopper/hopper.py,sha256=8901c6cefab94a981b3a1214047187a8925dbc0447bd38751bd72e2a46536719,1553
12
12
  minitap/mobile_use/agents/orchestrator/human.md,sha256=6559026aa921b7ad7dddcf3dfcd5d9930252edd6484d60ea92ff6ca97ed028fc,229
13
13
  minitap/mobile_use/agents/orchestrator/orchestrator.md,sha256=cc1a353c577f2eef42d9a528178ccc2c0a4a144a907a29878f9efe57e83b12fa,2546
14
- minitap/mobile_use/agents/orchestrator/orchestrator.py,sha256=21af0a1771ecc0880b7d2238c707c37dd57351510089d39139c5d6fdc34b0be1,5503
14
+ minitap/mobile_use/agents/orchestrator/orchestrator.py,sha256=4c3bfc13bb6ffaf68a29f32df6cbe419cbf124c1e2abce6ef12d7f0af98660e1,5378
15
15
  minitap/mobile_use/agents/orchestrator/types.py,sha256=f53dfdc99e8d50888ac1cde5f7f90ba5c87837a8eee8dd8efa31f2640394433c,335
16
16
  minitap/mobile_use/agents/outputter/human.md,sha256=6b9b45c640b163554524b1aec4cd97134c628eeb8557a32e23c8f966d32f642e,771
17
- minitap/mobile_use/agents/outputter/outputter.py,sha256=d6e788882bf63b2ac48823575d561ad4a43d65b584b81626d24a8a8c56ef863f,3331
17
+ minitap/mobile_use/agents/outputter/outputter.py,sha256=570f996114deb9d9b12ea77db8586d5a5a3dac1238d3044d3a7860db1003d69e,3250
18
18
  minitap/mobile_use/agents/outputter/test_outputter.py,sha256=907b517c486f82a384a364e0bd202c00e8e8082c138461f6eead0e25c2779ba9,5538
19
19
  minitap/mobile_use/agents/planner/human.md,sha256=cb37be2af568918e60238eaa785837178a3ba8f8112de86850d9a62914c18314,222
20
20
  minitap/mobile_use/agents/planner/planner.md,sha256=6c003612c7ad2fece469e6f439751643a69e6559e604d1f8a5e14663fae04a4b,4527
21
- minitap/mobile_use/agents/planner/planner.py,sha256=c4cae78cb2a4d9f3fe3b386e2c04d560ff08c8ce26474feeb93d1419990cdf8e,3294
21
+ minitap/mobile_use/agents/planner/planner.py,sha256=c8786393a7f5245786976abc73304d2a19d7d40fb72a26a56e2d6a3a0345074c,3241
22
22
  minitap/mobile_use/agents/planner/types.py,sha256=e8acf3c2d1505286a138b6f7c3ef36f397d154953311d0875e3ef35152653e7f,1496
23
23
  minitap/mobile_use/agents/planner/utils.py,sha256=88b4b039e09cea254615ff3d0bc8951c3717a68702742e913a0176ecfbcaf495,2315
24
24
  minitap/mobile_use/agents/screen_analyzer/human.md,sha256=1421b0cf68507ebc2c4df6b76e4d4e738b9ebee4d4691cc8d623680b6f33dfef,352
25
- minitap/mobile_use/agents/screen_analyzer/screen_analyzer.py,sha256=38d88206d1d0ee3917afe88760cf181a4f9d5b6a0e7e03de619d739959924c78,4069
25
+ minitap/mobile_use/agents/screen_analyzer/screen_analyzer.py,sha256=639247622e4a90f6a339c3589c4ac6a9a23f08097009e035a3d5ba62abe6012c,3956
26
26
  minitap/mobile_use/agents/summarizer/summarizer.py,sha256=56c2c7d5d48f4ba045b1401538db78b2ddbd43280389ed4cbc58ecd1da0c7610,1083
27
27
  minitap/mobile_use/clients/device_hardware_client.py,sha256=9593380a7a3df32f02aa22717678c25e91367df26b1743abde9e57aec5dc2474,857
28
28
  minitap/mobile_use/clients/ios_client.py,sha256=74b417bbfba597a50c534d76065aa160efdf3810a16fd5c1f74323a4a705fcab,1629
29
29
  minitap/mobile_use/clients/screen_api_client.py,sha256=3615dc65d25c38b4d8dc5512f9adb3bcf69dca7a0298a472a6812f604a275c47,2019
30
- minitap/mobile_use/config.py,sha256=4d93a1a916e1a3a7e0664d2a5a2f651cdca50527994a3a5c4f000b5fe8d4013d,13618
30
+ minitap/mobile_use/config.py,sha256=02275a3c23a417fb610bb6432c3222b043009f205b03d68e0bed5df5c85a7ec3,13636
31
31
  minitap/mobile_use/constants.py,sha256=3acd9d6ade5bc772e902b3473f3ba12ddd04e7306963ca2bae49d1132d89ba46,95
32
32
  minitap/mobile_use/context.py,sha256=2e212588a8a7caf58460fead0cae195c6386b7301026bbb2d78fe56c263ce6c3,2131
33
33
  minitap/mobile_use/controllers/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
34
34
  minitap/mobile_use/controllers/mobile_command_controller.py,sha256=e1eadfa0d4555a04174baa520b7c8f01ff83d1c8cbc90edf4c7052408cec337b,20361
35
35
  minitap/mobile_use/controllers/platform_specific_commands_controller.py,sha256=84061d2a44ad8eed985f339866a4eb9456d7b9007ecf2ce6277e08335cf8f564,3274
36
36
  minitap/mobile_use/controllers/types.py,sha256=c4dd6b266dd8f157ca1e6a211369ba8e7f65d3fda72b0742bda1128eefd99473,2935
37
- minitap/mobile_use/graph/graph.py,sha256=24eab15a3540a6b63004eb82ca3577cd1da3f83354a9a49bb3e7a0c7b67f64df,5797
37
+ minitap/mobile_use/graph/graph.py,sha256=94dbac498a77eab3fbb413182ec4c3272c353837f71268344e150a2c00a9747e,6012
38
38
  minitap/mobile_use/graph/state.py,sha256=1903f49772be7f9725e69718194a7be953203f882ec5e26211a5db6fdc569478,3596
39
39
  minitap/mobile_use/main.py,sha256=1405a13eab2c3b86b148bb9678e829447522753a10572935fc1e3ed3bbce6878,3927
40
40
  minitap/mobile_use/sdk/__init__.py,sha256=4e5555c0597242b9523827194a2500b9c6d7e5c04b1ccd2056c9b1f4d42a31cd,318
41
41
  minitap/mobile_use/sdk/agent.py,sha256=a1380a32b14784ce3cdcd7deaca2ffd643491bc23372297a24798a53bc7a1a37,30579
42
42
  minitap/mobile_use/sdk/builders/__init__.py,sha256=d6c96d39b80900a114698ef205ab5061a541f33bfa99c456d9345e5adb8ff6ff,424
43
- minitap/mobile_use/sdk/builders/agent_config_builder.py,sha256=542d7d06c677059c8f8e0bc27d95f2dce282b1cfe0320fa6f902bc2f9d08140d,7686
43
+ minitap/mobile_use/sdk/builders/agent_config_builder.py,sha256=4b8ed9eb84d9093f18166e4c4f99e3da6941cf374c9c112cb3c37ea0fadcfe02,7917
44
44
  minitap/mobile_use/sdk/builders/index.py,sha256=64336ac3b3dea4673a48e95b8c5ac4196ecd5d2196380377d102593d0a1dc138,442
45
45
  minitap/mobile_use/sdk/builders/task_request_builder.py,sha256=9e6cf7afb68af986d6a81487179bb79d28f63047a068725d92996dbcbe753376,6857
46
46
  minitap/mobile_use/sdk/constants.py,sha256=436ba0700c6cf37ac0c9e3995a5f5a0d54ca87af72686eb9667a2c6a96e30f68,292
@@ -64,7 +64,7 @@ minitap/mobile_use/servers/start_servers.py,sha256=2155d744726ac64c38b38e2e589e1
64
64
  minitap/mobile_use/servers/stop_servers.py,sha256=04a409a17fc0323209301fe28fbb037d71e41e5422eb369640f9f329aae312f5,7064
65
65
  minitap/mobile_use/servers/utils.py,sha256=f3cc85da39f8d60cb840001be418562de7db95462370db9b79e96d884abe5c17,294
66
66
  minitap/mobile_use/services/accessibility.py,sha256=42bcbe81b427ee6f6e82bcfe420fc40630db950bda354e3e433c2dda2e159628,3404
67
- minitap/mobile_use/services/llm.py,sha256=7d8c784085fb4f91a1b5d2e715f07e89a686fbdf7aeba4afda444c63ac9b43d3,7153
67
+ minitap/mobile_use/services/llm.py,sha256=1a7921fdf9430fe8f18a515f8b537e9773a445e0182b09992751073e2f55f1e5,7055
68
68
  minitap/mobile_use/tools/index.py,sha256=3b09ac41efb38a339ed4dd265c37aca85bd56f26938df45a6723b9b06071a3ca,2294
69
69
  minitap/mobile_use/tools/mobile/back.py,sha256=8b909e412c8ad382e339b8c89171bf1363398a95a5c96126f79ee2f24e3c2ed1,1816
70
70
  minitap/mobile_use/tools/mobile/erase_one_char.py,sha256=a125933619614b621479c514c8e29a7ec6b504b1e7ab1be13603a744f32322d6,1985
@@ -96,7 +96,7 @@ minitap/mobile_use/utils/shell_utils.py,sha256=b35ae7f863379adb86c9ba0f9b3b9d495
96
96
  minitap/mobile_use/utils/test_ui_hierarchy.py,sha256=96c1549c05b4f7254a22d57dbd40aea860756f1e0b9d8cc24319383643448422,5911
97
97
  minitap/mobile_use/utils/time.py,sha256=41bfaabb3751de11443ccb4a3f1f53d5ebacc7744c72e32695fdcc3d23f17d49,160
98
98
  minitap/mobile_use/utils/ui_hierarchy.py,sha256=f3370518035d9daf02c08042a9e28ad564f4fc81a2b268103b9a7f8bc5c61d11,3797
99
- minitap_mobile_use-2.7.1.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
100
- minitap_mobile_use-2.7.1.dist-info/entry_points.txt,sha256=663a29cfd551a4eaa0f27335f0bd7e4a732a4e39c76b68ef5c8dc444d4a285fa,60
101
- minitap_mobile_use-2.7.1.dist-info/METADATA,sha256=99668e39404908f08cf4a20437af8571551423b9c197d51553005cd5061edc0d,11995
102
- minitap_mobile_use-2.7.1.dist-info/RECORD,,
99
+ minitap_mobile_use-2.7.2.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
100
+ minitap_mobile_use-2.7.2.dist-info/entry_points.txt,sha256=663a29cfd551a4eaa0f27335f0bd7e4a732a4e39c76b68ef5c8dc444d4a285fa,60
101
+ minitap_mobile_use-2.7.2.dist-info/METADATA,sha256=5d363ea1b75c0ae699cf85b94fa2ccb86b97af30dc3f382638e4c3f907bda627,11995
102
+ minitap_mobile_use-2.7.2.dist-info/RECORD,,