56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
|
|
from collections.abc import Iterable
|
||
|
|
|
||
|
|
from app.agents.registry.models import (
|
||
|
|
AgentManifest,
|
||
|
|
CapabilityManifest,
|
||
|
|
SpecialistTemplateManifest,
|
||
|
|
SubCommanderManifest,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def _validate_unique_ids(values: Iterable[str], label: str) -> set[str]:
|
||
|
|
unique_values: set[str] = set()
|
||
|
|
for value in values:
|
||
|
|
if value in unique_values:
|
||
|
|
raise ValueError(f"duplicate {label}: {value}")
|
||
|
|
unique_values.add(value)
|
||
|
|
return unique_values
|
||
|
|
|
||
|
|
|
||
|
|
def validate_registry_bundle(
|
||
|
|
*,
|
||
|
|
agents: list[AgentManifest],
|
||
|
|
sub_commanders: list[SubCommanderManifest],
|
||
|
|
capabilities: list[CapabilityManifest],
|
||
|
|
specialist_templates: list[SpecialistTemplateManifest],
|
||
|
|
) -> None:
|
||
|
|
agent_ids = _validate_unique_ids((agent.agent_id for agent in agents), "agent id")
|
||
|
|
_validate_unique_ids(
|
||
|
|
(sub_commander.sub_commander_id for sub_commander in sub_commanders),
|
||
|
|
"sub commander id",
|
||
|
|
)
|
||
|
|
capability_ids = _validate_unique_ids(
|
||
|
|
(capability.capability_id for capability in capabilities),
|
||
|
|
"capability id",
|
||
|
|
)
|
||
|
|
_validate_unique_ids(
|
||
|
|
(specialist_template.template_id for specialist_template in specialist_templates),
|
||
|
|
"template id",
|
||
|
|
)
|
||
|
|
|
||
|
|
for sub_commander in sub_commanders:
|
||
|
|
if sub_commander.parent_agent_id not in agent_ids:
|
||
|
|
raise ValueError(f"unknown parent agent id: {sub_commander.parent_agent_id}")
|
||
|
|
|
||
|
|
for capability_id in sub_commander.capability_ids:
|
||
|
|
if capability_id not in capability_ids:
|
||
|
|
raise ValueError(f"unknown capability id: {capability_id}")
|
||
|
|
|
||
|
|
for specialist_template in specialist_templates:
|
||
|
|
if specialist_template.allowed_capability_ids is None:
|
||
|
|
continue
|
||
|
|
|
||
|
|
for capability_id in specialist_template.allowed_capability_ids:
|
||
|
|
if capability_id not in capability_ids:
|
||
|
|
raise ValueError(f"unknown capability id: {capability_id}")
|