Spaces:
Running
Running
| from __future__ import annotations | |
| """Logging configuration for the Ask-the-Web Agent.""" | |
| import logging | |
| import sys | |
| from typing import Any | |
| from rich.console import Console | |
| from rich.logging import RichHandler | |
| from src.utils.config import settings | |
| # Rich console for pretty output | |
| console = Console() | |
| def get_logger(name: str) -> logging.Logger: | |
| """Get a configured logger instance. | |
| Args: | |
| name: Logger name (typically __name__) | |
| Returns: | |
| Configured logger instance | |
| """ | |
| logger = logging.getLogger(name) | |
| if not logger.handlers: | |
| logger.setLevel(getattr(logging, settings.log_level.upper())) | |
| if settings.log_format == "json": | |
| # JSON format for production | |
| handler = logging.StreamHandler(sys.stdout) | |
| formatter = logging.Formatter( | |
| '{"timestamp": "%(asctime)s", "level": "%(levelname)s", ' | |
| '"name": "%(name)s", "message": "%(message)s"}' | |
| ) | |
| handler.setFormatter(formatter) | |
| else: | |
| # Rich handler for development | |
| handler = RichHandler( | |
| console=console, | |
| show_time=True, | |
| show_path=False, | |
| rich_tracebacks=True, | |
| ) | |
| logger.addHandler(handler) | |
| logger.propagate = False | |
| return logger | |
| def log_agent_step( | |
| logger: logging.Logger, | |
| step_type: str, | |
| content: dict[str, Any], | |
| iteration: int | None = None, | |
| ) -> None: | |
| """Log an agent step with structured data. | |
| Args: | |
| logger: Logger instance | |
| step_type: Type of step (thought, action, observation, etc.) | |
| content: Step content as dictionary | |
| iteration: Optional iteration number | |
| """ | |
| prefix = f"[Iteration {iteration}] " if iteration is not None else "" | |
| logger.info(f"{prefix}{step_type.upper()}: {content}") | |
| def log_tool_call( | |
| logger: logging.Logger, | |
| tool_name: str, | |
| parameters: dict[str, Any], | |
| result: Any = None, | |
| error: str | None = None, | |
| ) -> None: | |
| """Log a tool call with parameters and result. | |
| Args: | |
| logger: Logger instance | |
| tool_name: Name of the tool | |
| parameters: Tool parameters | |
| result: Tool result (optional) | |
| error: Error message if failed (optional) | |
| """ | |
| if error: | |
| logger.error(f"Tool '{tool_name}' failed: {error} | Params: {parameters}") | |
| else: | |
| logger.info(f"Tool '{tool_name}' called | Params: {parameters}") | |
| if result: | |
| logger.debug(f"Tool '{tool_name}' result: {result}") | |