50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
"""Multi-agent registry.
|
|
|
|
Holds multiple Agent instances keyed by name. The first registered
|
|
agent is the default (used by scheduler and as fallback).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from .agent import Agent
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class AgentRegistry:
|
|
"""Registry of named Agent instances."""
|
|
|
|
def __init__(self):
|
|
self._agents: dict[str, Agent] = {}
|
|
self._default_name: str | None = None
|
|
|
|
def register(self, name: str, agent: Agent, is_default: bool = False):
|
|
"""Register an agent by name."""
|
|
self._agents[name] = agent
|
|
if is_default or self._default_name is None:
|
|
self._default_name = name
|
|
log.info("Registered agent: %s (default=%s)", name, name == self._default_name)
|
|
|
|
def get(self, name: str) -> Agent | None:
|
|
return self._agents.get(name)
|
|
|
|
def list_agents(self) -> list[str]:
|
|
return list(self._agents.keys())
|
|
|
|
@property
|
|
def default(self) -> Agent | None:
|
|
if self._default_name:
|
|
return self._agents.get(self._default_name)
|
|
return None
|
|
|
|
@property
|
|
def default_name(self) -> str:
|
|
return self._default_name or "default"
|
|
|
|
def __len__(self) -> int:
|
|
return len(self._agents)
|