masterllm / services /agents /agent_registry.py
stellar413's picture
Added fixed agent to agent communication
6df13ef
# services/agents/agent_registry.py
"""
Central registry for all utility agents.
Provides lazy initialization and retrieval.
"""
import os
from typing import Dict, Optional
from services.agents.base_agent import BaseUtilityAgent
class AgentRegistry:
"""
Singleton registry for all utility agents.
Lazy initialization ensures agents are only created when needed,
avoiding startup overhead.
"""
_instance: Optional['AgentRegistry'] = None
_agents: Dict[str, BaseUtilityAgent] = {}
_initialized: bool = False
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def _initialize_agents(self):
"""Initialize all agents lazily."""
if self._initialized:
return
# Import agents here to avoid circular imports
# and to delay initialization until first use
from services.agents.extract_text_agent import ExtractTextAgent
from services.agents.extract_tables_agent import ExtractTablesAgent
from services.agents.describe_images_agent import DescribeImagesAgent
from services.agents.summarizer_agent import SummarizerAgent
from services.agents.classifier_agent import ClassifierAgent
from services.agents.ner_agent import NERAgent
from services.agents.translator_agent import TranslatorAgent
from services.agents.signature_verification_agent import SignatureVerificationAgent
from services.agents.stamp_detection_agent import StampDetectionAgent
# Register all agents
self._agents = {
"extract_text": ExtractTextAgent(),
"extract_tables": ExtractTablesAgent(),
"describe_images": DescribeImagesAgent(),
"summarize": SummarizerAgent(),
"classify": ClassifierAgent(),
"ner": NERAgent(),
"translate": TranslatorAgent(),
"signature_verification": SignatureVerificationAgent(),
"stamp_detection": StampDetectionAgent(),
}
self._initialized = True
def get_agent(self, name: str) -> Optional[BaseUtilityAgent]:
"""
Get agent by name.
Args:
name: Agent identifier (e.g., "extract_text")
Returns:
Agent instance or None if not found
"""
if not self._initialized:
self._initialize_agents()
return self._agents.get(name)
def list_agents(self) -> list:
"""Get list of all registered agent names."""
if not self._initialized:
self._initialize_agents()
return list(self._agents.keys())
# Singleton instance
_registry = AgentRegistry()
def get_agent(name: str) -> Optional[BaseUtilityAgent]:
"""
Convenience function to get agent from global registry.
Args:
name: Agent identifier
Returns:
Agent instance or None
"""
return _registry.get_agent(name)
def use_agents_enabled() -> bool:
"""
Check if agent mode is enabled via feature flag.
Returns:
True if USE_AGENTS=true in environment
"""
return os.getenv("USE_AGENTS", "false").lower() == "true"