minitap-mobile-use 2.5.0__tar.gz → 2.5.2__tar.gz

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.

Files changed (100) hide show
  1. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/PKG-INFO +1 -1
  2. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/clients/ios_client.py +1 -1
  3. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/config.py +28 -1
  4. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/agent.py +15 -0
  5. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/builders/agent_config_builder.py +3 -2
  6. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/platform_manual_task_example.py +1 -1
  7. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/platform_minimal_example.py +1 -1
  8. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/services/platform.py +1 -1
  9. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/device_screen_api.py +25 -4
  10. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/services/llm.py +3 -3
  11. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/pyproject.toml +1 -1
  12. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/LICENSE +0 -0
  13. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/README.md +0 -0
  14. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/__init__.py +0 -0
  15. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/contextor/contextor.py +0 -0
  16. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/cortex/cortex.md +0 -0
  17. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/cortex/cortex.py +0 -0
  18. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/cortex/types.py +0 -0
  19. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/executor/executor.md +0 -0
  20. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/executor/executor.py +0 -0
  21. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/executor/tool_node.py +0 -0
  22. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/executor/utils.py +0 -0
  23. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/hopper/hopper.md +0 -0
  24. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/hopper/hopper.py +0 -0
  25. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/orchestrator/human.md +0 -0
  26. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/orchestrator/orchestrator.md +0 -0
  27. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/orchestrator/orchestrator.py +0 -0
  28. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/orchestrator/types.py +0 -0
  29. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/outputter/human.md +0 -0
  30. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/outputter/outputter.py +0 -0
  31. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/outputter/test_outputter.py +0 -0
  32. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/planner/human.md +0 -0
  33. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/planner/planner.md +0 -0
  34. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/planner/planner.py +0 -0
  35. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/planner/types.py +0 -0
  36. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/planner/utils.py +0 -0
  37. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/agents/summarizer/summarizer.py +0 -0
  38. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/clients/device_hardware_client.py +0 -0
  39. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/clients/screen_api_client.py +0 -0
  40. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/constants.py +0 -0
  41. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/context.py +0 -0
  42. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/controllers/__init__.py +0 -0
  43. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/controllers/mobile_command_controller.py +0 -0
  44. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/controllers/platform_specific_commands_controller.py +0 -0
  45. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/graph/graph.py +0 -0
  46. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/graph/state.py +0 -0
  47. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/main.py +0 -0
  48. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/__init__.py +0 -0
  49. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/builders/__init__.py +0 -0
  50. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/builders/index.py +0 -0
  51. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/builders/task_request_builder.py +0 -0
  52. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/constants.py +0 -0
  53. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/README.md +0 -0
  54. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/__init__.py +0 -0
  55. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/simple_photo_organizer.py +0 -0
  56. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/examples/smart_notification_assistant.py +0 -0
  57. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/types/__init__.py +0 -0
  58. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/types/agent.py +0 -0
  59. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/types/exceptions.py +0 -0
  60. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/types/platform.py +0 -0
  61. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/types/task.py +0 -0
  62. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/sdk/utils.py +0 -0
  63. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/config.py +0 -0
  64. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/device_hardware_bridge.py +0 -0
  65. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/start_servers.py +0 -0
  66. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/stop_servers.py +0 -0
  67. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/servers/utils.py +0 -0
  68. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/services/accessibility.py +0 -0
  69. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/index.py +0 -0
  70. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/back.py +0 -0
  71. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/clear_text.py +0 -0
  72. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/erase_one_char.py +0 -0
  73. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/glimpse_screen.py +0 -0
  74. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/input_text.py +0 -0
  75. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/launch_app.py +0 -0
  76. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/long_press_on.py +0 -0
  77. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/open_link.py +0 -0
  78. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/press_key.py +0 -0
  79. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/stop_app.py +0 -0
  80. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/swipe.py +0 -0
  81. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/tap.py +0 -0
  82. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/mobile/wait_for_animation_to_end.py +0 -0
  83. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/test_utils.py +0 -0
  84. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/tool_wrapper.py +0 -0
  85. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/types.py +0 -0
  86. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/tools/utils.py +0 -0
  87. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/cli_helpers.py +0 -0
  88. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/cli_selection.py +0 -0
  89. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/conversations.py +0 -0
  90. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/decorators.py +0 -0
  91. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/errors.py +0 -0
  92. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/file.py +0 -0
  93. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/logger.py +0 -0
  94. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/media.py +0 -0
  95. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/recorder.py +0 -0
  96. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/requests_utils.py +0 -0
  97. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/shell_utils.py +0 -0
  98. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/test_ui_hierarchy.py +0 -0
  99. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/time.py +0 -0
  100. {minitap_mobile_use-2.5.0 → minitap_mobile_use-2.5.2}/minitap/mobile_use/utils/ui_hierarchy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: minitap-mobile-use
3
- Version: 2.5.0
3
+ Version: 2.5.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
@@ -14,7 +14,7 @@ def get_ios_devices() -> tuple[bool, list[str], str]:
14
14
  - list[str]: A list of iOS device UDIDs.
15
15
  - str: An error message if any.
16
16
  """
17
- if platform.system() != "Linux":
17
+ if platform.system() != "Darwin":
18
18
  return False, [], "xcrun is only available on macOS."
19
19
 
20
20
  try:
@@ -26,7 +26,7 @@ class Settings(BaseSettings):
26
26
  MINITAP_API_KEY: SecretStr | None = None
27
27
 
28
28
  OPENAI_BASE_URL: str | None = None
29
- MINITAP_API_BASE_URL: str = "https://platform.minitap.ai"
29
+ MINITAP_BASE_URL: str = "https://platform.minitap.ai"
30
30
 
31
31
  DEVICE_SCREEN_API_BASE_URL: str | None = None
32
32
  DEVICE_HARDWARE_BRIDGE_BASE_URL: str | None = None
@@ -211,6 +211,33 @@ def get_default_llm_config() -> LLMConfig:
211
211
  )
212
212
 
213
213
 
214
+ def get_default_minitap_llm_config() -> LLMConfig | None:
215
+ """
216
+ Returns a default LLM config using the Minitap provider.
217
+ Only returns a config if MINITAP_API_KEY is available.
218
+
219
+ Returns:
220
+ LLMConfig with minitap provider if API key is available, None otherwise
221
+ """
222
+ if not settings.MINITAP_API_KEY:
223
+ return None
224
+
225
+ return LLMConfig(
226
+ planner=LLM(provider="minitap", model="meta-llama/llama-4-scout"),
227
+ orchestrator=LLM(provider="minitap", model="openai/gpt-oss-120b"),
228
+ cortex=LLMWithFallback(
229
+ provider="minitap",
230
+ model="google/gemini-2.5-pro",
231
+ fallback=LLM(provider="minitap", model="openai/gpt-5"),
232
+ ),
233
+ executor=LLM(provider="minitap", model="meta-llama/llama-3.3-70b-instruct"),
234
+ utils=LLMConfigUtils(
235
+ outputter=LLM(provider="minitap", model="openai/gpt-4.1"),
236
+ hopper=LLM(provider="minitap", model="openai/gpt-5-nano"),
237
+ ),
238
+ )
239
+
240
+
214
241
  def deep_merge_llm_config(default: LLMConfig, override: dict) -> LLMConfig:
215
242
  def _deep_merge_dict(base: dict, extra: dict):
216
243
  for key, value in extra.items():
@@ -409,6 +409,21 @@ class Agent:
409
409
  self._finalize_tracing(task=task, context=context)
410
410
  return output
411
411
 
412
+ def is_healthy(self):
413
+ """
414
+ Check if the agent is healthy by verifying the streaming connection status.
415
+ Uses the configured Screen API base URL instead of hardcoding localhost.
416
+ """
417
+ try:
418
+ response = self._screen_api_client.get_with_retry("/streaming-status", timeout=2)
419
+ if response.status_code == 200:
420
+ data = response.json()
421
+ is_connected = data.get("is_streaming_connected", False)
422
+ return is_connected
423
+ return False
424
+ except Exception:
425
+ return False
426
+
412
427
  def clean(self, force: bool = False):
413
428
  if not self._initialized and not force:
414
429
  return
@@ -6,7 +6,7 @@ import copy
6
6
 
7
7
  from langchain_core.callbacks.base import Callbacks
8
8
 
9
- from minitap.mobile_use.config import get_default_llm_config
9
+ from minitap.mobile_use.config import get_default_llm_config, get_default_minitap_llm_config
10
10
  from minitap.mobile_use.context import DevicePlatform
11
11
  from minitap.mobile_use.sdk.constants import (
12
12
  DEFAULT_HW_BRIDGE_BASE_URL,
@@ -187,9 +187,10 @@ class AgentConfigBuilder:
187
187
  if default_profile.name not in self._agent_profiles:
188
188
  self.add_profile(default_profile)
189
189
  elif nb_profiles <= 0:
190
+ llm_config = get_default_minitap_llm_config() or get_default_llm_config()
190
191
  default_profile = AgentProfile(
191
192
  name=DEFAULT_PROFILE_NAME,
192
- llm_config=get_default_llm_config(),
193
+ llm_config=llm_config,
193
194
  )
194
195
  self.add_profile(default_profile)
195
196
  elif nb_profiles == 1:
@@ -31,7 +31,7 @@ async def main() -> None:
31
31
  Main execution function demonstrating manual task creation pattern.
32
32
 
33
33
  Visit https://platform.minitap.ai to get your API key.
34
- Set MINITAP_API_KEY and MINITAP_API_BASE_URL environment variables.
34
+ Set MINITAP_API_KEY and MINITAP_BASE_URL environment variables.
35
35
  """
36
36
  agent = Agent()
37
37
  agent.init()
@@ -28,7 +28,7 @@ async def main() -> None:
28
28
 
29
29
  Visit https://platform.minitap.ai to create a task, customize your profiles,
30
30
  and get your API key.
31
- Set MINITAP_API_KEY and MINITAP_API_BASE_URL environment variables.
31
+ Set MINITAP_API_KEY and MINITAP_BASE_URL environment variables.
32
32
  """
33
33
  agent = Agent()
34
34
  agent.init()
@@ -37,7 +37,7 @@ DEFAULT_PROFILE = "default"
37
37
 
38
38
  class PlatformService:
39
39
  def __init__(self, api_key: str | None = None):
40
- self._base_url = settings.MINITAP_API_BASE_URL
40
+ self._base_url = settings.MINITAP_BASE_URL
41
41
 
42
42
  if api_key:
43
43
  self._api_key = api_key
@@ -8,21 +8,24 @@ import requests
8
8
  import uvicorn
9
9
  from fastapi import FastAPI, HTTPException
10
10
  from fastapi.responses import JSONResponse
11
+ from sseclient import SSEClient
12
+
11
13
  from minitap.mobile_use.servers.config import server_settings
12
14
  from minitap.mobile_use.servers.utils import is_port_in_use
13
- from sseclient import SSEClient
14
15
 
15
16
  DEVICE_HARDWARE_BRIDGE_BASE_URL = server_settings.DEVICE_HARDWARE_BRIDGE_BASE_URL
16
17
  DEVICE_HARDWARE_BRIDGE_API_URL = f"{DEVICE_HARDWARE_BRIDGE_BASE_URL}/api"
17
18
 
18
19
  _latest_screen_data = None
20
+ _is_streaming_connected = False
21
+
19
22
  _data_lock = threading.Lock()
20
23
  _stream_thread = None
21
24
  _stop_event = threading.Event()
22
25
 
23
26
 
24
27
  def _stream_worker():
25
- global _latest_screen_data
28
+ global _latest_screen_data, _is_streaming_connected
26
29
  sse_url = f"{DEVICE_HARDWARE_BRIDGE_API_URL}/device-screen/sse"
27
30
  headers = {"Accept": "text/event-stream"}
28
31
 
@@ -31,6 +34,8 @@ def _stream_worker():
31
34
  with requests.get(sse_url, stream=True, headers=headers) as response:
32
35
  response.raise_for_status()
33
36
  print("--- Stream connected, listening for events... ---")
37
+ with _data_lock:
38
+ _is_streaming_connected = True
34
39
  event_source = (chunk for chunk in response.iter_content())
35
40
  client = SSEClient(event_source)
36
41
  for event in client.events():
@@ -59,10 +64,12 @@ def _stream_worker():
59
64
  "platform": platform,
60
65
  }
61
66
 
62
- except requests.exceptions.RequestException as e:
67
+ except Exception as e:
63
68
  print(f"Connection error in stream worker: {e}. Retrying in 2 seconds...")
64
69
  with _data_lock:
70
+ _is_streaming_connected = False
65
71
  _latest_screen_data = None
72
+
66
73
  time.sleep(2)
67
74
 
68
75
 
@@ -76,9 +83,11 @@ def start_stream():
76
83
 
77
84
 
78
85
  def stop_stream():
79
- global _stream_thread
86
+ global _stream_thread, _is_streaming_connected
80
87
  if _stream_thread and _stream_thread.is_alive():
81
88
  _stop_event.set()
89
+ with _data_lock:
90
+ _is_streaming_connected = False
82
91
  _stream_thread.join(timeout=2)
83
92
  print("--- Background screen streaming stopped ---")
84
93
 
@@ -135,6 +144,18 @@ async def health_check():
135
144
  raise HTTPException(status_code=503, detail=f"Maestro Studio not available: {e}")
136
145
 
137
146
 
147
+ @app.get("/streaming-status")
148
+ async def streaming_status():
149
+ """Check if the SSE streaming connection is active."""
150
+ with _data_lock:
151
+ return JSONResponse(
152
+ content={
153
+ "is_streaming_connected": _is_streaming_connected,
154
+ "has_screen_data": _latest_screen_data is not None,
155
+ }
156
+ )
157
+
158
+
138
159
  def start():
139
160
  if not is_port_in_use(server_settings.DEVICE_SCREEN_API_PORT):
140
161
  uvicorn.run(app, host="0.0.0.0", port=server_settings.DEVICE_SCREEN_API_PORT)
@@ -71,10 +71,10 @@ def get_minitap_llm(
71
71
  else:
72
72
  raise ValueError("MINITAP_API_KEY must be provided or set in environment")
73
73
 
74
- if settings.MINITAP_API_BASE_URL is None:
75
- raise ValueError("MINITAP_API_BASE_URL must be set in environment")
74
+ if settings.MINITAP_BASE_URL is None:
75
+ raise ValueError("MINITAP_BASE_URL must be set in environment")
76
76
 
77
- llm_base_url = f"{settings.MINITAP_API_BASE_URL}/api/v1"
77
+ llm_base_url = f"{settings.MINITAP_BASE_URL}/api/v1"
78
78
 
79
79
  if max_retries is None and model.startswith("google/"):
80
80
  max_retries = 2
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "minitap-mobile-use"
3
- version = "2.5.0"
3
+ version = "2.5.2"
4
4
  description = "AI-powered multi-agent system that automates real Android and iOS devices through low-level control using LangGraph."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }