""" Base Agent — Abstract base for all God Mode agents """ from abc import ABC, abstractmethod from typing import Any, Dict, List, Optional import structlog log = structlog.get_logger() class BaseAgent(ABC): """Abstract base class for all agents in the God Mode ecosystem.""" def __init__(self, name: str, ws_manager=None, ai_router=None): self.name = name self.ws = ws_manager self.ai_router = ai_router self.log = structlog.get_logger().bind(agent=name) @abstractmethod async def run(self, task: str, context: Dict = {}, **kwargs) -> str: """Execute the agent's primary task.""" pass async def emit(self, room: str, event: str, data: Dict, session_id: str = ""): """Emit WebSocket event if manager available.""" if self.ws: await self.ws.emit(room, event, data, session_id=session_id) async def emit_chat(self, session_id: str, event: str, data: Dict): """Emit chat WebSocket event.""" if self.ws: await self.ws.emit_chat(session_id, event, data) async def llm( self, messages: List[Dict], task_id: str = "", session_id: str = "", temperature: float = 0.7, max_tokens: int = 4096, model: str = "", ) -> str: """Route LLM call through AI router.""" if self.ai_router: return await self.ai_router.complete( messages=messages, task_id=task_id, session_id=session_id, temperature=temperature, max_tokens=max_tokens, preferred_model=model, ) return f"[{self.name}] AI router not configured."