""" Telemetry for Browser Use. """ from typing import TYPE_CHECKING # Type stubs for lazy imports if TYPE_CHECKING: from browser_use.telemetry.service import ProductTelemetry from browser_use.telemetry.views import ( BaseTelemetryEvent, CLITelemetryEvent, MCPClientTelemetryEvent, MCPServerTelemetryEvent, ) # Lazy imports mapping _LAZY_IMPORTS = { 'ProductTelemetry': ('browser_use.telemetry.service', 'ProductTelemetry'), 'BaseTelemetryEvent': ('browser_use.telemetry.views', 'BaseTelemetryEvent'), 'CLITelemetryEvent': ('browser_use.telemetry.views', 'CLITelemetryEvent'), 'MCPClientTelemetryEvent': ('browser_use.telemetry.views', 'MCPClientTelemetryEvent'), 'MCPServerTelemetryEvent': ('browser_use.telemetry.views', 'MCPServerTelemetryEvent'), } def __getattr__(name: str): """Lazy import mechanism for telemetry components.""" if name in _LAZY_IMPORTS: module_path, attr_name = _LAZY_IMPORTS[name] try: from importlib import import_module module = import_module(module_path) attr = getattr(module, attr_name) # Cache the imported attribute in the module's globals globals()[name] = attr return attr except ImportError as e: raise ImportError(f'Failed to import {name} from {module_path}: {e}') from e raise AttributeError(f"module '{__name__}' has no attribute '{name}'") __all__ = [ 'BaseTelemetryEvent', 'ProductTelemetry', 'CLITelemetryEvent', 'MCPClientTelemetryEvent', 'MCPServerTelemetryEvent', ]