Danialebrat's picture
Adding HelpScout to UI
58db664
"""
Base Agent class for all agents in the HelpScout processing workflow.
Provides a common interface and consistent error handling.
"""
from abc import ABC, abstractmethod
from typing import Dict, Any
import logging
logger = logging.getLogger(__name__)
class BaseAgent(ABC):
"""
Abstract base class for all agents in the agentic workflow.
Enforces a consistent interface and provides shared utilities.
"""
def __init__(self, name: str, config: Dict[str, Any]):
self.name = name
self.config = config
self.model = config.get("model", "gpt-5-nano")
self.temperature = config.get("temperature", 0.2)
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.
Must be implemented by all concrete agent classes.
"""
pass
@abstractmethod
def validate_input(self, input_data: Dict[str, Any]) -> bool:
"""
Validate input data before processing.
Returns True if input is valid, False otherwise.
"""
pass
def log_processing(self, message: str, level: str = "info"):
log_method = getattr(logger, level, logger.info)
log_method(f"[{self.name}] {message}")
def handle_error(self, error: Exception, context: str = "") -> Dict[str, Any]:
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,
}