| """ |
| Base Agent Class - All agents inherit from this |
| """ |
| from abc import ABC, abstractmethod |
| import logging |
| from datetime import datetime |
|
|
| logging.basicConfig(level=logging.INFO) |
|
|
| class StudentState: |
| """Standardized student state object for agent perception""" |
| def __init__(self, user_id, **kwargs): |
| self.user_id = user_id |
| for key, value in kwargs.items(): |
| setattr(self, key, value) |
|
|
| class BaseAgent(ABC): |
| """Base class for all autonomous agents""" |
| |
| def __init__(self, agent_id, name): |
| self.agent_id = agent_id |
| self.name = name |
| self.state = "idle" |
| self.memory = [] |
| self.logger = logging.getLogger(f"Agent-{name}") |
| self.created_at = datetime.utcnow() |
| |
| def log(self, message, level="info"): |
| """Log agent activities""" |
| log_entry = { |
| "timestamp": datetime.utcnow().isoformat(), |
| "agent": self.name, |
| "message": message, |
| "state": self.state |
| } |
| self.memory.append(log_entry) |
| |
| if level == "info": |
| self.logger.info(f"[{self.name}] {message}") |
| elif level == "error": |
| self.logger.error(f"[{self.name}] {message}") |
| elif level == "warning": |
| self.logger.warning(f"[{self.name}] {message}") |
| |
| def update_state(self, new_state): |
| """Update agent state""" |
| old_state = self.state |
| self.state = new_state |
| self.log(f"State transition: {old_state} → {new_state}") |
| |
| @abstractmethod |
| def perceive(self, environment): |
| """Perceive the environment - to be implemented by subclasses""" |
| pass |
| |
| @abstractmethod |
| def decide(self): |
| """Make autonomous decisions - to be implemented by subclasses""" |
| pass |
| |
| @abstractmethod |
| def act(self): |
| """Execute actions - to be implemented by subclasses""" |
| pass |
| |
| def get_memory(self, limit=10): |
| """Retrieve recent memory""" |
| return self.memory[-limit:] |
| |
| def clear_memory(self): |
| """Clear agent memory""" |
| self.memory = [] |
| self.log("Memory cleared") |