| | """ |
| | Base Agent class for all agents in the workflow |
| | This provides a common interface and structure for extensibility |
| | """ |
| |
|
| | from abc import ABC, abstractmethod |
| | from typing import Dict, Any, Optional |
| | import json |
| | import logging |
| |
|
| | logger = logging.getLogger(__name__) |
| |
|
| |
|
| | class BaseAgent(ABC): |
| | """ |
| | Abstract base class for all agents in the agentic workflow. |
| | Provides common functionality and enforces consistent interface. |
| | """ |
| |
|
| | def __init__(self, name: str, config: Dict[str, Any]): |
| | """ |
| | Initialize the base agent. |
| | |
| | Args: |
| | name: Name of the agent |
| | config: Configuration dictionary for the agent |
| | """ |
| | self.name = name |
| | self.config = config |
| | self.model = config.get("model", "gpt-4o-mini") |
| | self.temperature = config.get("temperature", 0.7) |
| | self.max_retries = config.get("max_retries", 3) |
| | logger.info(f"Initialized {self.name} with model {self.model}") |
| |
|
| | @abstractmethod |
| | def process(self, input_data: Dict[str, Any]) -> Dict[str, Any]: |
| | """ |
| | Process input data and return results. |
| | This method must be implemented by all concrete agent classes. |
| | |
| | Args: |
| | input_data: Dictionary containing input data for processing |
| | |
| | Returns: |
| | Dictionary containing processing results |
| | """ |
| | pass |
| |
|
| | @abstractmethod |
| | def validate_input(self, input_data: Dict[str, Any]) -> bool: |
| | """ |
| | Validate input data before processing. |
| | |
| | Args: |
| | input_data: Dictionary containing input data |
| | |
| | Returns: |
| | True if input is valid, False otherwise |
| | """ |
| | pass |
| |
|
| | def get_name(self) -> str: |
| | """Get the agent name.""" |
| | return self.name |
| |
|
| | def get_config(self) -> Dict[str, Any]: |
| | """Get the agent configuration.""" |
| | return self.config |
| |
|
| | def log_processing(self, message: str, level: str = "info"): |
| | """ |
| | Log processing information. |
| | |
| | Args: |
| | message: Log message |
| | level: Log level (info, warning, error, debug) |
| | """ |
| | log_method = getattr(logger, level, logger.info) |
| | log_method(f"[{self.name}] {message}") |
| |
|
| | def handle_error(self, error: Exception, context: str = "") -> Dict[str, Any]: |
| | """ |
| | Handle errors consistently across all agents. |
| | |
| | Args: |
| | error: The exception that occurred |
| | context: Additional context about the error |
| | |
| | Returns: |
| | Error dictionary with details |
| | """ |
| | error_msg = f"Error in {self.name}" |
| | if context: |
| | error_msg += f" ({context})" |
| | error_msg += f": {str(error)}" |
| |
|
| | logger.error(error_msg) |
| |
|
| | return { |
| | "success": False, |
| | "error": str(error), |
| | "agent": self.name, |
| | "context": context |
| | } |