Source code for ralph.policy.models._agents_policy

"""AgentsPolicy Pydantic model."""

from typing import Self

from pydantic import Field, model_validator

from ralph.policy.models._agent_chain_config import AgentChainConfig
from ralph.policy.models._agent_drain_config import AgentDrainConfig
from ralph.policy.models._frozen_policy_model import _FrozenPolicyModel


[docs] class AgentsPolicy(_FrozenPolicyModel): """Top-level agents.toml policy document.""" agent_chains: dict[str, AgentChainConfig] = Field( default_factory=dict, description="Named agent chains available for binding", ) agent_drains: dict[str, AgentDrainConfig] = Field( default_factory=dict, description="Drain-to-chain bindings", ) forbid_sibling_drain_inference: bool = Field( default=False, description="If True, reject implicit sibling-drain inheritance at startup", ) @model_validator(mode="after") def drains_reference_known_chains(self) -> Self: for drain, cfg in self.agent_drains.items(): if cfg.chain not in self.agent_chains: raise ValueError(f"Drain '{drain}' references unknown chain '{cfg.chain}'") return self @model_validator(mode="after") def no_empty_chains(self) -> Self: for name, cfg in self.agent_chains.items(): if not cfg.agents: raise ValueError(f"Chain '{name}' has no agents") return self