Introduce a manifest-backed agent registry surface and align graph tests with the new runtime prompt and tool indexing behavior.
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}")
|