Source code for p2p.agents.factory
"""Factories connecting agents to the single backend registry."""
from __future__ import annotations
from collections.abc import Callable
from typing import Any
import p2p.backends # Registers built-in backend adapters.
from p2p.agents.base import Agent
from p2p.agents.config import AgentConfig
from p2p.registry import BACKENDS
[docs]
def create_backend(
*,
backend_type: str,
model_name: str,
**backend_kwargs: Any,
):
"""Create a backend through ``p2p.registry.BACKENDS``."""
if "model_name" in backend_kwargs:
raise ValueError(
"model_name must be supplied through its explicit argument"
)
return BACKENDS.create(
backend_type,
model_name=model_name,
**backend_kwargs,
)
[docs]
def create_agent(
*,
config: AgentConfig,
eid: str,
endowment: str = "",
backend=None,
backend_factory: Callable[..., Any] | None = None,
) -> Agent:
"""Create one generic agent using an injected or registered backend."""
if backend is not None and backend_factory is not None:
raise ValueError(
"provide either backend or backend_factory, not both"
)
if backend is None:
resolver = backend_factory or create_backend
backend = resolver(
backend_type=config.agent_type,
model_name=config.model_name,
**dict(config.agent_kwargs),
)
return Agent(
eid=eid,
endowment=endowment,
formality=config.formality,
backend=backend,
)
__all__ = ["create_agent", "create_backend"]