Skip to content

To OAS Examples

Examples of exporting Dapr agents/workflows to Open Agent Spec format.

Export Agent Configuration

Create an agent programmatically and export to OAS:

from dapr_agents_oas_adapter import DaprAgentSpecExporter
from dapr_agents_oas_adapter.types import DaprAgentConfig

# Create configuration
config = DaprAgentConfig(
    name="customer_support",
    role="Support Agent",
    goal="Help customers resolve issues quickly",
    instructions=[
        "Greet the customer professionally",
        "Listen carefully to their issue",
        "Provide clear step-by-step solutions",
        "Escalate complex issues appropriately"
    ],
    tools=["lookup_order", "check_inventory", "create_ticket"],
    system_prompt="You are a helpful customer support agent."
)

# Export
exporter = DaprAgentSpecExporter()

# To YAML
yaml_output = exporter.to_yaml(config)
print(yaml_output)

# To JSON
json_output = exporter.to_json(config)

# To dictionary
dict_output = exporter.to_dict(config)

Output YAML:

agentspec_version: "1.0"
component_type: Agent
name: customer_support
description: null
system_prompt: You are a helpful customer support agent.
tools:
  - lookup_order
  - check_inventory
  - create_ticket

Export Workflow Definition

Create and export a workflow:

from dapr_agents_oas_adapter import DaprAgentSpecExporter
from dapr_agents_oas_adapter.types import (
    WorkflowDefinition,
    WorkflowTaskDefinition,
    WorkflowEdgeDefinition
)

# Create workflow
workflow = WorkflowDefinition(
    name="document_processor",
    description="Process and analyze documents",
    tasks=[
        WorkflowTaskDefinition(
            name="start",
            task_type="start"
        ),
        WorkflowTaskDefinition(
            name="extract_text",
            task_type="tool",
            config={"tool_name": "ocr_extract"}
        ),
        WorkflowTaskDefinition(
            name="analyze",
            task_type="llm",
            config={
                "prompt_template": "Analyze this document:\n{{ text }}"
            }
        ),
        WorkflowTaskDefinition(
            name="summarize",
            task_type="llm",
            config={
                "prompt_template": "Summarize the analysis:\n{{ analysis }}"
            }
        ),
        WorkflowTaskDefinition(
            name="end",
            task_type="end"
        )
    ],
    edges=[
        WorkflowEdgeDefinition(from_node="start", to_node="extract_text"),
        WorkflowEdgeDefinition(from_node="extract_text", to_node="analyze"),
        WorkflowEdgeDefinition(from_node="analyze", to_node="summarize"),
        WorkflowEdgeDefinition(from_node="summarize", to_node="end")
    ],
    start_node="start",
    end_nodes=["end"]
)

# Export
exporter = DaprAgentSpecExporter()
yaml_output = exporter.to_yaml(workflow)
print(yaml_output)

Export Branching Workflow

Workflow with conditional branches:

workflow = WorkflowDefinition(
    name="approval_workflow",
    description="Route requests based on amount",
    tasks=[
        WorkflowTaskDefinition(name="start", task_type="start"),
        WorkflowTaskDefinition(
            name="classify",
            task_type="llm",
            config={
                "prompt_template": "Classify amount {{ amount }}: high or low?",
                "branch_output_key": "classification"
            }
        ),
        WorkflowTaskDefinition(name="manager_approval", task_type="agent"),
        WorkflowTaskDefinition(name="auto_approve", task_type="tool"),
        WorkflowTaskDefinition(name="end", task_type="end")
    ],
    edges=[
        WorkflowEdgeDefinition(from_node="start", to_node="classify"),
        WorkflowEdgeDefinition(
            from_node="classify",
            to_node="manager_approval",
            from_branch="high"
        ),
        WorkflowEdgeDefinition(
            from_node="classify",
            to_node="auto_approve",
            from_branch="low"
        ),
        WorkflowEdgeDefinition(from_node="manager_approval", to_node="end"),
        WorkflowEdgeDefinition(from_node="auto_approve", to_node="end")
    ],
    start_node="start",
    end_nodes=["end"]
)

exporter = DaprAgentSpecExporter()
print(exporter.to_yaml(workflow))

Roundtrip Conversion

Load, modify, and export back:

from dapr_agents_oas_adapter import (
    DaprAgentSpecLoader,
    DaprAgentSpecExporter
)
from dapr_agents_oas_adapter.types import DaprAgentConfig

# Load original
loader = DaprAgentSpecLoader()
config = loader.load_yaml(original_yaml)

# Modify
if isinstance(config, DaprAgentConfig):
    config.tools.append("new_capability")
    config.instructions.append("Use new_capability when needed")

# Export updated version
exporter = DaprAgentSpecExporter()
updated_yaml = exporter.to_yaml(config)

# Verify roundtrip
reloaded = loader.load_yaml(updated_yaml)
assert reloaded.name == config.name

Save to Files

Export to files:

from pathlib import Path
from dapr_agents_oas_adapter import DaprAgentSpecExporter
from dapr_agents_oas_adapter.types import DaprAgentConfig

config = DaprAgentConfig(
    name="file_agent",
    role="Helper",
    goal="Assist with files"
)

exporter = DaprAgentSpecExporter()

# Save as YAML
Path("agent.yaml").write_text(exporter.to_yaml(config))

# Save as JSON
Path("agent.json").write_text(exporter.to_json(config))

# Save as Python dict (for programmatic use)
import json
Path("agent_dict.json").write_text(
    json.dumps(exporter.to_dict(config), indent=2)
)

Bulk Export

Export multiple configurations:

from dapr_agents_oas_adapter import DaprAgentSpecExporter
from dapr_agents_oas_adapter.types import DaprAgentConfig

agents = [
    DaprAgentConfig(name="agent1", role="Role1", goal="Goal1"),
    DaprAgentConfig(name="agent2", role="Role2", goal="Goal2"),
    DaprAgentConfig(name="agent3", role="Role3", goal="Goal3"),
]

exporter = DaprAgentSpecExporter()

for agent in agents:
    filename = f"{agent.name}.yaml"
    with open(filename, "w") as f:
        f.write(exporter.to_yaml(agent))
    print(f"Exported: {filename}")