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_active_app_info, 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) scene = provider.build_scene(screenshot, raw_tree) scene.active_app = get_active_app_info(driver) return scene