from __future__ import annotations from core.device_manager import DeviceManager from core.models import Scene from tools._device import get_driver from vision.ocr import PaddleOCREngine, run_ocr from vision.scene_builder import build_scene, infer_png_size from vision.ui_parser import parse_ui_tree def describe_screen( device_id: str | None = None, *, manager: DeviceManager | None = None, ocr_engine: PaddleOCREngine | None = None, ) -> Scene: driver = get_driver(device_id, manager=manager) screenshot = driver.screenshot() raw_tree = driver.tree() width, height = infer_png_size(screenshot) return build_scene( screen_width=width, screen_height=height, ui_elements=parse_ui_tree(raw_tree), ocr_elements=run_ocr(screenshot, engine=ocr_engine), )