| """ |
| 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 |
| } |