Source code for fermilink.agents.registry
from __future__ import annotations
from collections.abc import Iterable
from fermilink.agent_runtime import normalize_provider
from fermilink.agents.base import ProviderAgent
from fermilink.agents.claude_agent import ClaudeAgent
from fermilink.agents.codex_agent import CodexAgent
from fermilink.agents.deepseek_agent import DeepseekAgent
from fermilink.agents.gemini_agent import GeminiAgent
[docs]
class AgentRegistry:
"""Lookup registry for provider adapters."""
[docs]
def __init__(self, agents: Iterable[ProviderAgent]) -> None:
mapping: dict[str, ProviderAgent] = {}
for agent in agents:
mapping[agent.provider_id()] = agent
self._agents = mapping
[docs]
def get(self, provider: str) -> ProviderAgent:
normalized = normalize_provider(provider)
agent = self._agents.get(normalized)
if agent is None:
raise ValueError(f"No provider agent registered for '{normalized}'.")
return agent
[docs]
def provider_bin_env_map(self) -> dict[str, str]:
return {name: agent.bin_env_key for name, agent in self._agents.items()}
[docs]
def provider_bin_default_map(self) -> dict[str, str]:
return {name: agent.default_binary for name, agent in self._agents.items()}
[docs]
def all(self) -> tuple[ProviderAgent, ...]:
return tuple(self._agents.values())
_DEFAULT_AGENT_REGISTRY = AgentRegistry(
agents=(
CodexAgent(),
ClaudeAgent(),
GeminiAgent(),
DeepseekAgent(),
)
)
[docs]
def get_default_agent_registry() -> AgentRegistry:
return _DEFAULT_AGENT_REGISTRY
[docs]
def get_provider_agent(provider: str) -> ProviderAgent:
return _DEFAULT_AGENT_REGISTRY.get(provider)