Skip to content

datarobot_genai.dragent.frontends.agent_manifest

agent_manifest

Agent Manifest: a static reflection of a running agent's declared NAT workflow structure, served at /.well-known/agent-manifest.json alongside the existing A2A /.well-known/agent-card.json.

Unlike the A2A agent card (hand-authored skills/description metadata, see :mod:~datarobot_genai.dragent.frontends.a2a), this manifest is derived entirely from workflow.yaml's own declared structure - the functions/function_groups/workflow sections of the NAT :class:~nat.data_models.config.Config - so it needs no separate configuration and can never drift from what the agent actually declares.

The manifest's own wire format is provisional: workload-api's manifest-parsing consumer hasn't landed yet, so there is no authoritative schema to match against. This shape may need to change once that lands.

AgentManifestRootAgent

Bases: BaseModel

The workflow's entry-point function - workflow: in workflow.yaml.

Source code in datarobot_genai/dragent/frontends/agent_manifest.py
class AgentManifestRootAgent(BaseModel):
    """The workflow's entry-point function - ``workflow:`` in workflow.yaml."""

    name: str = Field(description="Display name, falling back to the registered type")
    type: str = Field(description="Registered NAT component type, e.g. 'streaming_memory_agent'")
    description: str | None = Field(
        default=None, description="Only present when the concrete config type declares one"
    )

AgentManifestComponent

Bases: BaseModel

One declared functions: or function_groups: entry.

Source code in datarobot_genai/dragent/frontends/agent_manifest.py
class AgentManifestComponent(BaseModel):
    """One declared ``functions:`` or ``function_groups:`` entry."""

    name: str = Field(description="The workflow.yaml key this component is declared under")
    type: str = Field(description="Registered NAT component type")
    kind: Literal["function", "function_group"]
    description: str | None = Field(
        default=None, description="Only present when the concrete config type declares one"
    )

build_agent_manifest

build_agent_manifest(config: Config) -> AgentManifest

Build the manifest from a NAT Config alone - no build/execution needed.

config.workflow/config.functions/config.function_groups are already fully-parsed workflow.yaml declarations by the time a Config exists, so this never runs any agent code.

Source code in datarobot_genai/dragent/frontends/agent_manifest.py
def build_agent_manifest(config: Config) -> AgentManifest:
    """Build the manifest from a NAT ``Config`` alone - no build/execution needed.

    ``config.workflow``/``config.functions``/``config.function_groups`` are
    already fully-parsed ``workflow.yaml`` declarations by the time a
    ``Config`` exists, so this never runs any agent code.
    """
    return AgentManifest(
        root_agent=_root_agent_from_config(config),
        components=_components_from_config(config),
    )