""" Base Agent class for visualization agents Provides common functionality and interface for all agents """ from abc import ABC, abstractmethod from typing import Dict, Any import logging class BaseVisualizationAgent(ABC): """ Abstract base class for all visualization agents """ def __init__(self, name: str, model: str = "gpt-5-nano", temperature: float = 0.7): """ Initialize base agent Args: name: Agent name model: LLM model to use temperature: LLM temperature """ self.name = name self.model = model self.temperature = temperature self.logger = logging.getLogger(f"visualization.agents.{name}") @abstractmethod def process(self, input_data: Dict[str, Any]) -> Dict[str, Any]: """ Process input data and return results Args: input_data: Input data dictionary Returns: Results dictionary """ pass @abstractmethod def validate_input(self, input_data: Dict[str, Any]) -> bool: """ Validate input data Args: input_data: Input data dictionary Returns: True if valid, False otherwise """ pass def log_processing(self, message: str, level: str = "info"): """ Log processing information Args: message: Log message level: Log level (info, warning, error) """ log_func = getattr(self.logger, level.lower(), self.logger.info) log_func(f"[{self.name}] {message}") def handle_error(self, error: Exception, context: str = "") -> Dict[str, Any]: """ Handle errors consistently Args: error: Exception that occurred context: Additional context information Returns: Error response dictionary """ error_msg = f"Error in {self.name}: {str(error)}" if context: error_msg += f" | Context: {context}" self.log_processing(error_msg, level="error") return { 'success': False, 'error': str(error), 'error_type': type(error).__name__, 'context': context }