mirror of
https://github.com/trycua/computer.git
synced 2026-01-02 19:40:18 -06:00
Normalize logging hierarchy (#294)
This commit is contained in:
@@ -6,7 +6,7 @@ import logging
|
||||
__version__ = "0.1.0"
|
||||
|
||||
# Initialize logging
|
||||
logger = logging.getLogger("cua.agent")
|
||||
logger = logging.getLogger("agent")
|
||||
|
||||
# Initialize telemetry when the package is imported
|
||||
try:
|
||||
|
||||
@@ -11,10 +11,8 @@ from .types import AgentResponse
|
||||
from .factory import LoopFactory
|
||||
from .provider_config import DEFAULT_MODELS, ENV_VARS
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ComputerAgent:
|
||||
"""A computer agent that can perform automated tasks using natural language instructions."""
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ flush = _default_flush
|
||||
is_telemetry_enabled = _default_is_telemetry_enabled
|
||||
is_telemetry_globally_disabled = _default_is_telemetry_globally_disabled
|
||||
|
||||
logger = logging.getLogger("cua.agent.telemetry")
|
||||
logger = logging.getLogger("agent.telemetry")
|
||||
|
||||
try:
|
||||
# Import from core telemetry
|
||||
|
||||
@@ -26,10 +26,8 @@ from .api_handler import OmniAPIHandler
|
||||
from .tools.manager import ToolManager
|
||||
from .tools import ToolResult
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def extract_data(input_string: str, data_type: str) -> str:
|
||||
"""Extract content from code blocks."""
|
||||
pattern = f"```{data_type}" + r"(.*?)(```|$)"
|
||||
|
||||
@@ -25,10 +25,8 @@ from .prompts import COMPUTER_USE, SYSTEM_PROMPT, MAC_SPECIFIC_NOTES
|
||||
from .clients.oaicompat import OAICompatClient
|
||||
from .clients.mlxvlm import MLXVLMUITarsClient
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class UITARSLoop(BaseLoop):
|
||||
"""UI-TARS-specific implementation of the agent loop.
|
||||
|
||||
|
||||
@@ -15,13 +15,7 @@ from computer_server.diorama.diorama_computer import DioramaComputer
|
||||
from computer_server.handlers.macos import *
|
||||
|
||||
# simple, nicely formatted logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='[%(asctime)s] [%(levelname)s] %(message)s',
|
||||
datefmt='%H:%M:%S',
|
||||
stream=sys.stdout
|
||||
)
|
||||
logger = logging.getLogger("diorama.virtual_desktop")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
automation_handler = MacOSAutomationHandler()
|
||||
|
||||
|
||||
@@ -28,13 +28,7 @@ import functools
|
||||
import logging
|
||||
|
||||
# simple, nicely formatted logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='[%(asctime)s] [%(levelname)s] %(message)s',
|
||||
datefmt='%H:%M:%S',
|
||||
stream=sys.stdout
|
||||
)
|
||||
logger = logging.getLogger("diorama.draw")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
from computer_server.diorama.safezone import (
|
||||
get_menubar_bounds,
|
||||
|
||||
@@ -12,8 +12,8 @@ import os
|
||||
import aiohttp
|
||||
|
||||
# Set up logging with more detail
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# Configure WebSocket with larger message size
|
||||
WEBSOCKET_MAX_SIZE = 1024 * 1024 * 10 # 10MB limit
|
||||
|
||||
@@ -6,14 +6,14 @@ import sys
|
||||
__version__ = "0.1.0"
|
||||
|
||||
# Initialize logging
|
||||
logger = logging.getLogger("cua.computer")
|
||||
logger = logging.getLogger("computer")
|
||||
|
||||
# Initialize telemetry when the package is imported
|
||||
try:
|
||||
# Import from core telemetry
|
||||
from core.telemetry import (
|
||||
is_telemetry_enabled,
|
||||
flush,
|
||||
is_telemetry_enabled,
|
||||
record_event,
|
||||
)
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ class Computer:
|
||||
experiments: Optional list of experimental features to enable (e.g. ["app-use"])
|
||||
"""
|
||||
|
||||
self.logger = Logger("cua.computer", verbosity)
|
||||
self.logger = Logger("computer", verbosity)
|
||||
self.logger.info("Initializing Computer...")
|
||||
|
||||
# Store original parameters
|
||||
@@ -132,11 +132,11 @@ class Computer:
|
||||
|
||||
# Configure root logger
|
||||
self.verbosity = verbosity
|
||||
self.logger = Logger("cua", verbosity)
|
||||
self.logger = Logger("computer", verbosity)
|
||||
|
||||
# Configure component loggers with proper hierarchy
|
||||
self.vm_logger = Logger("cua.vm", verbosity)
|
||||
self.interface_logger = Logger("cua.interface", verbosity)
|
||||
self.vm_logger = Logger("computer.vm", verbosity)
|
||||
self.interface_logger = Logger("computer.interface", verbosity)
|
||||
|
||||
if not use_host_computer_server:
|
||||
if ":" not in image or len(image.split(":")) != 2:
|
||||
|
||||
@@ -30,7 +30,7 @@ class LinuxComputerInterface(BaseComputerInterface):
|
||||
self._command_lock = asyncio.Lock() # Lock to ensure only one command at a time
|
||||
|
||||
# Set logger name for Linux interface
|
||||
self.logger = Logger("cua.interface.linux", LogLevel.NORMAL)
|
||||
self.logger = Logger("computer.interface.linux", LogLevel.NORMAL)
|
||||
|
||||
@property
|
||||
def ws_uri(self) -> str:
|
||||
|
||||
@@ -29,7 +29,7 @@ class MacOSComputerInterface(BaseComputerInterface):
|
||||
self._command_lock = asyncio.Lock() # Lock to ensure only one command at a time
|
||||
|
||||
# Set logger name for macOS interface
|
||||
self.logger = Logger("cua.interface.macos", LogLevel.NORMAL)
|
||||
self.logger = Logger("computer.interface.macos", LogLevel.NORMAL)
|
||||
|
||||
@property
|
||||
def ws_uri(self) -> str:
|
||||
|
||||
@@ -30,7 +30,7 @@ class WindowsComputerInterface(BaseComputerInterface):
|
||||
self._command_lock = asyncio.Lock() # Lock to ensure only one command at a time
|
||||
|
||||
# Set logger name for Windows interface
|
||||
self.logger = Logger("cua.interface.windows", LogLevel.NORMAL)
|
||||
self.logger = Logger("computer.interface.windows", LogLevel.NORMAL)
|
||||
|
||||
@property
|
||||
def ws_uri(self) -> str:
|
||||
|
||||
@@ -9,10 +9,10 @@ TELEMETRY_AVAILABLE = False
|
||||
|
||||
try:
|
||||
from core.telemetry import (
|
||||
record_event,
|
||||
increment,
|
||||
is_telemetry_enabled,
|
||||
is_telemetry_globally_disabled,
|
||||
record_event,
|
||||
)
|
||||
|
||||
def increment_counter(counter_name: str, value: int = 1) -> None:
|
||||
@@ -22,14 +22,14 @@ try:
|
||||
|
||||
def set_dimension(name: str, value: Any) -> None:
|
||||
"""Set a dimension that will be attached to all events."""
|
||||
logger = logging.getLogger("cua.computer.telemetry")
|
||||
logger = logging.getLogger("computer.telemetry")
|
||||
logger.debug(f"Setting dimension {name}={value}")
|
||||
|
||||
TELEMETRY_AVAILABLE = True
|
||||
logger = logging.getLogger("cua.computer.telemetry")
|
||||
logger = logging.getLogger("computer.telemetry")
|
||||
logger.info("Successfully imported telemetry")
|
||||
except ImportError as e:
|
||||
logger = logging.getLogger("cua.computer.telemetry")
|
||||
logger = logging.getLogger("computer.telemetry")
|
||||
logger.warning(f"Could not import telemetry: {e}")
|
||||
TELEMETRY_AVAILABLE = False
|
||||
|
||||
@@ -40,7 +40,7 @@ def _noop(*args: Any, **kwargs: Any) -> None:
|
||||
pass
|
||||
|
||||
|
||||
logger = logging.getLogger("cua.computer.telemetry")
|
||||
logger = logging.getLogger("computer.telemetry")
|
||||
|
||||
# If telemetry isn't available, use no-op functions
|
||||
if not TELEMETRY_AVAILABLE:
|
||||
|
||||
@@ -15,7 +15,7 @@ from typing import Any, Dict, List, Optional
|
||||
from core import __version__
|
||||
from core.telemetry.sender import send_telemetry
|
||||
|
||||
logger = logging.getLogger("cua.telemetry")
|
||||
logger = logging.getLogger("core.telemetry")
|
||||
|
||||
# Controls how frequently telemetry will be sent (percentage)
|
||||
TELEMETRY_SAMPLE_RATE = 5 # 5% sampling rate
|
||||
|
||||
@@ -16,7 +16,7 @@ from typing import Any, Dict, List, Optional
|
||||
import posthog
|
||||
from core import __version__
|
||||
|
||||
logger = logging.getLogger("cua.telemetry")
|
||||
logger = logging.getLogger("core.telemetry")
|
||||
|
||||
# Controls how frequently telemetry will be sent (percentage)
|
||||
TELEMETRY_SAMPLE_RATE = 100 # 100% sampling rate (was 5%)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import logging
|
||||
from typing import Any, Dict
|
||||
|
||||
logger = logging.getLogger("cua.telemetry")
|
||||
logger = logging.getLogger("core.telemetry")
|
||||
|
||||
|
||||
def send_telemetry(payload: Dict[str, Any]) -> bool:
|
||||
|
||||
@@ -30,7 +30,7 @@ def _configure_telemetry_logging() -> None:
|
||||
level = logging.ERROR
|
||||
|
||||
# Configure the main telemetry logger
|
||||
telemetry_logger = logging.getLogger("cua.telemetry")
|
||||
telemetry_logger = logging.getLogger("core.telemetry")
|
||||
telemetry_logger.setLevel(level)
|
||||
|
||||
|
||||
@@ -46,11 +46,11 @@ try:
|
||||
|
||||
POSTHOG_AVAILABLE = True
|
||||
except ImportError:
|
||||
logger = logging.getLogger("cua.telemetry")
|
||||
logger = logging.getLogger("core.telemetry")
|
||||
logger.info("PostHog not available. Install with: pdm add posthog")
|
||||
POSTHOG_AVAILABLE = False
|
||||
|
||||
logger = logging.getLogger("cua.telemetry")
|
||||
logger = logging.getLogger("core.telemetry")
|
||||
|
||||
|
||||
# Check environment variables for global telemetry opt-out
|
||||
@@ -292,10 +292,9 @@ def set_telemetry_log_level(level: Optional[int] = None) -> None:
|
||||
|
||||
# Set the level for all telemetry-related loggers
|
||||
telemetry_loggers = [
|
||||
"cua.telemetry",
|
||||
"core.telemetry",
|
||||
"cua.agent.telemetry",
|
||||
"cua.computer.telemetry",
|
||||
"agent.telemetry",
|
||||
"computer.telemetry",
|
||||
"posthog",
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user