Files
agentic-mobile-control/tools/describe_screen.py
T
q792602257 8d5b02e37f
Tests / Test passed: 858
fix(perception): degrade to OCR-only when UI tree is unavailable
driver.tree() failures (WDA/Appium session errors) previously raised
uncaught, killing describe_screen() before OCR ever ran. Malformed
tree content (invalid XML) had the same problem inside
parse_ui_tree(). Both are now caught and logged, falling back to an
empty ui_elements list so the scene degrades to OCR-only, mirroring
the existing OCR-failure fallback in run_ocr().
2026-07-15 10:03:30 +08:00

32 lines
977 B
Python

from __future__ import annotations
import logging
from core.models import Scene
from device.manager import DeviceManager
from perception.ocr import PaddleOCREngine
from perception.provider import DefaultPerceptionProvider, PerceptionProvider
from tools._device import get_driver
logger = logging.getLogger(__name__)
def describe_screen(
device_id: str | None = None,
*,
manager: DeviceManager | None = None,
ocr_engine: PaddleOCREngine | None = None,
perception_provider: PerceptionProvider | None = None,
) -> Scene:
driver = get_driver(device_id, manager=manager)
screenshot = driver.screenshot()
try:
raw_tree = driver.tree()
except Exception:
logger.warning(
"UI tree retrieval failed; continuing without UI tree", exc_info=True
)
raw_tree = None
provider = perception_provider or DefaultPerceptionProvider(ocr_engine=ocr_engine)
return provider.build_scene(screenshot, raw_tree)