Skip to main content

pyagent-blueprint

Pillar 1 of the PyAgent production stack for multi-agent LLM systems — declare your entire agent system in a single YAML file. Validate, compile, test, diff, and generate from the CLI.

License: MIT Python 3.11+

Architecture Pillar: 📋 Blueprint The entry point for all PyAgent systems — declare agents, workflows, providers, and contracts in a single YAML file, then validate, compile, and test without writing Python. Part of the full stack: install pyagent-all for all pillars.

Install

pip install pyagent-blueprint

Depends on: pyagent-patterns, pyagent-router, pyagent-providers, pyagent-context, pydantic, pyyaml, click.

Why Blueprints?

Without blueprints, agent systems are defined in code — hard to version, diff, review, or test without running them. With pyagent-blueprint, your agent system is a YAML document that is:

  • Versioned: semantic version + git-diffable
  • Validated: Pydantic schema + static analysis (dangling refs, security)
  • Compiled: YAML → executable RuntimeGraph in one call
  • Testable: contract conformance tests with MockLLM
  • Renderable: Mermaid diagrams + Markdown docs auto-generated

Blueprint YAML Schema

api_version: pyagent/v1
metadata:
  name: customer-support
  version: 1.0.0
  description: Support routing system
  owner: platform-team

providers:
  primary:
    model: gpt-4.1-mini
  fallback:
    model: gpt-4.1-nano

context:
  memory:
    working_max_tokens: 128000
  compression:
    policy: semantic_lossless
    target_ratio: 0.6

agents:
  classifier:
    prompt: "Classify into: billing, tech, general"
    provider: primary
  billing:
    prompt: "Handle billing inquiries"
    provider: primary
    guardrails: [pii_redact]
  tech:
    prompt: "Handle technical support"
    provider: primary

workflows:
  support:
    pattern: supervisor
    agents:
      classifier: classifier
      routes:
        billing: billing
        tech: tech
    recovery:
      max_retries: 2
      timeout_seconds: 30

contracts:
  support:
    input:
      type: string
      max_tokens: 2000
    output:
      type: string
    sla:
      latency_p95_ms: 5000
      cost_max_usd: 0.05

observability:
  tracing:
    enabled: true
  cost_budget:
    daily_usd: 100.0
    alert_threshold: 0.8

Loader — Load and Validate

from pyagent_blueprint import load_blueprint, load_blueprint_from_str

# From file
spec = load_blueprint("blueprint.yaml")       # YAML or JSON
print(spec.metadata.name)                      # "customer-support"
print(spec.agents.keys())                      # dict_keys(['classifier', 'billing', 'tech'])

# From string
spec = load_blueprint_from_str(yaml_text)

Compiler — Spec → RuntimeGraph

import asyncio
from pyagent_blueprint import BlueprintCompiler, load_blueprint

spec = load_blueprint("blueprint.yaml")
compiler = BlueprintCompiler()
graph = compiler.compile(spec)

# Run a workflow
result = asyncio.run(graph.run("support", "I can't see my invoice"))
print(result.output)

# Inspect
print(graph.describe())
# {"metadata": {...}, "workflows": {"support": {"pattern_type": "Supervisor"}}}

Validator — Static Analysis

from pyagent_blueprint import BlueprintValidator, load_blueprint

spec = load_blueprint("blueprint.yaml")
validator = BlueprintValidator()
issues = validator.validate(spec)

for issue in issues:
    print(f"[{issue.severity}] {issue.path}: {issue.message}")

Checks performed:

  • Dangling agent refs (workflow references undefined agent)
  • Dangling provider refs (agent references undefined provider)
  • Unknown pattern names (not in pattern registry)
  • Contract → workflow ref mismatch
  • Unrealistic SLA values
  • Security: hardcoded API keys in prompts

Renderer — Mermaid + Markdown

from pyagent_blueprint import BlueprintRenderer, load_blueprint

spec = load_blueprint("blueprint.yaml")
renderer = BlueprintRenderer()

# Mermaid diagram
print(renderer.to_mermaid(spec))
# graph TD
#     classifier[Routes customer requests]
#     billing[Billing specialist]
#     tech[Technical support agent]
#     classifier -->|billing| billing
#     classifier -->|tech| tech

# Full Markdown documentation
md = renderer.to_markdown(spec)

Differ — Semantic Diff

from pyagent_blueprint import BlueprintDiffer, load_blueprint

old = load_blueprint("v1.yaml")
new = load_blueprint("v2.yaml")

differ = BlueprintDiffer()
changes = differ.diff(old, new)

print(differ.summary(changes))
# BREAKING (1):
#   [modified] workflows.support.pattern
# WARNING (2):
#   [modified] agents.billing.prompt
#   [removed] agents.legacy

Severity levels:

  • BREAKING: pattern changes, API version changes
  • WARNING: prompt changes, provider changes, removals
  • INFO: metadata, descriptions, additions

Tester — Contract Conformance

import asyncio
from pyagent_blueprint import BlueprintTester, load_blueprint

spec = load_blueprint("blueprint.yaml")
tester = BlueprintTester()

results = asyncio.run(tester.test(spec))
print(tester.summary(results))
# Contract Tests: 1/1 passed
#   ✓ PASS  support
#          ✓ output_non_empty
#          ✓ output_is_string
#          ✓ input_within_token_limit

Generator — Scaffold from Pattern

from pyagent_blueprint import BlueprintGenerator

generator = BlueprintGenerator()
yaml_str = generator.generate(
    pattern="supervisor",
    agents=["classifier", "billing", "tech"],
    name="customer-support",
)
print(yaml_str)

CLI Reference

# Validate
pyagent-blueprint validate blueprint.yaml

# Compile and inspect
pyagent-blueprint compile blueprint.yaml

# Render Mermaid diagram
pyagent-blueprint render blueprint.yaml
pyagent-blueprint render blueprint.yaml --format markdown -o docs.md

# Run contract tests
pyagent-blueprint test blueprint.yaml

# Semantic diff
pyagent-blueprint diff v1.yaml v2.yaml

# Generate scaffold
pyagent-blueprint generate --pattern supervisor --agents "classifier,billing,tech" --name my-system

Observability Configuration — Tracing & Cost Budgets

The observability section of a blueprint declares tracing and cost budget settings. These are validated by the schema and compiled into configuration objects that consumers wire at runtime.

observability:
  tracing:
    enabled: true          # Enable trace event emission
    exporter: langfuse     # Preferred exporter backend (console, jsonl, otel, langfuse)
  cost_budget:
    daily_usd: 100.0       # Daily cost ceiling in USD
    alert_threshold: 0.8   # Alert when 80% of budget consumed

Schema classes (defined in pyagent_blueprint.schema.observability):

Class Fields Description
TracingConfig enabled, exporter Whether tracing is active and which exporter to use
CostBudgetConfig daily_usd, alert_threshold Daily cost limits and alert thresholds
ObservabilitySpec tracing, cost_budget Top-level observability container

After compilation, these settings are available on the RuntimeGraph but are not automatically wired — consumers must manually set up the TraceEventBus and exporters. The compiler will emit warnings if observability is declared but the consumer has not wired tracing hooks.

Context Configuration — Memory, Compression & Redaction

The context section declares memory, compression, and redaction settings for agents:

context:
  memory:
    backend: sqlite             # json or sqlite
    working_max_tokens: 128000  # WorkingMemory token limit
    session_path: session.db    # SessionMemory persistence path
  compression:
    policy: semantic_lossless   # none, fifo, semantic_lossless, sawtooth
    target_ratio: 0.6           # Target compression ratio (0.0–1.0)
  redaction:
    max_sensitivity: internal   # Filter out PII and confidential items

Schema classes (defined in pyagent_blueprint.schema.context):

Class Fields Description
MemoryConfig backend, working_max_tokens, session_path Memory tier configuration
CompressionConfig policy, target_ratio Context compression policy and target
RedactionConfig max_sensitivity Sensitivity ceiling for LLM-bound context
ContextConfigSpec memory, compression, redaction Top-level context container

Like observability, context configuration is compiled but manually wired by the consumer. The compiler warns if context settings are declared but not connected to agents.

RuntimeGraph — The Compiled Output

BlueprintCompiler.compile() produces a RuntimeGraph containing:

  • Resolved providersProviderProtocol instances from the ProviderRegistry
  • Instantiated agentsAgent objects with LLM callables, system prompts, and metadata
  • Wired workflows — Named patterns (Pipeline, Supervisor, etc.) assembled from agents
  • Metadata — Blueprint name, version, description for traceability
graph = compiler.compile(spec)

# Run a named workflow
result = await graph.run("support", "I can't see my invoice")

# Inspect the graph structure
print(graph.describe())
# {
#     "metadata": {"name": "customer-support", "version": "1.0.0"},
#     "workflows": {
#         "support": {
#             "pattern_type": "Supervisor",
#             "agents": ["classifier", "billing", "tech"],
#         }
#     },
#     "providers": ["primary", "fallback"],
#     "observability": {"tracing": {"enabled": true}},
#     "context": {"compression": {"policy": "semantic_lossless"}},
# }

Compiler Warnings

The BlueprintCompiler performs static analysis during compilation and emits warnings for common misconfigurations:

Warning Trigger Severity
Dangling agent ref Workflow references an undefined agent ERROR
Dangling provider ref Agent references an undefined provider ERROR
Unknown pattern Workflow uses a pattern not in the registry ERROR
Unwired observability observability.tracing.enabled: true but no TraceEventBus wired WARNING
Unwired context context.memory or context.compression declared but not connected WARNING
Unrealistic SLA Contract SLA values outside reasonable bounds WARNING
Hardcoded secrets API keys detected in agent prompts WARNING

Warnings for unwired observability and context are especially important: they alert consumers that configuration was declared in the blueprint but was never connected at runtime. This helps catch integration oversights without breaking backward compatibility.

Integration

Blueprint is the integration hub of the PyAgent ecosystem:

Dependency How It's Used
pyagent-patterns Pattern registry for workflow compilation (18 built-in patterns + custom)
pyagent-router CostEstimator and DifficultyScorer for routing-aware blueprints
pyagent-providers ProviderRegistry for resolving named providers to ProviderProtocol instances
pyagent-context ContextConfigSpec drives memory, compression, and redaction configuration
pyagent-trace ObservabilitySpec configures tracing and cost budgets (wired manually)
pyagent-studio Studio loads, validates, and simulates blueprints through its service layer

The Blueprint → Runtime Flow

flowchart LR
    YAML[Blueprint YAML] -->|load_blueprint| Spec[BlueprintSpec]
    Spec -->|validate| V[BlueprintValidator]
    Spec -->|compile| C[BlueprintCompiler]
    C -->|resolve providers| PR[ProviderRegistry]
    C -->|instantiate agents| AG[Agent instances]
    C -->|wire patterns| PT[Pattern instances]
    C -->|produce| RG[RuntimeGraph]
    RG -->|run workflow| R[Result]
  1. Loadload_blueprint("file.yaml") parses YAML and produces a BlueprintSpec (Pydantic model)
  2. ValidateBlueprintValidator.validate(spec) runs static checks (dangling refs, security, SLA)
  3. CompileBlueprintCompiler.compile(spec) resolves providers, instantiates agents, wires patterns
  4. Wire hooks — Consumer manually connects TraceEventBus, ContextLedger, CompressMiddleware to agents
  5. Rungraph.run("workflow_name", "input") executes the pattern and returns a Result

Full stack

Install all pillars at once: pip install pyagent-all

pyagent.org for full documentation.

Full Documentation

See pyagent.org for full API reference and integration guides.

The PyAgent ecosystem

PyAgent is a production stack for multi-agent LLM systems. Each package is independent — install only what you need, or get everything with pip install pyagent-all.

Package What it gives you
pyagent-blueprint Declarative multi-agent blueprints — compile, validate, and diff agent systems from YAML
pyagent-patterns Reusable multi-agent design patterns — Supervisor, Pipeline, ReAct, and 15 more
pyagent-router Difficulty-aware model routing — cost-efficient model selection per task
pyagent-compress Token-efficient agent compression — inter-agent token budgets
pyagent-providers Multi-provider orchestration — fallback chains and capability negotiation
pyagent-context Stateful agent memory — trust-aware, three-tier context ledger
pyagent-trace Multi-agent observability & tracing — pattern-aware OpenTelemetry spans
pyagent-studio Agent control plane dashboard — live traces, cost, and governance

Learn the concepts: The Orchestrator-Worker pattern · Engineering a resilient multi-agent harness · Agent Experience Optimization (AXO)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyagent_blueprint-0.2.4.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyagent_blueprint-0.2.4-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file pyagent_blueprint-0.2.4.tar.gz.

File metadata

  • Download URL: pyagent_blueprint-0.2.4.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyagent_blueprint-0.2.4.tar.gz
Algorithm Hash digest
SHA256 e5d8d3e20ff802b6fef4d35199a5ddf14a5a19594cf81bde020ec2eee7b5fd6d
MD5 e66f58b6904b1a5698c8346dfdedca7f
BLAKE2b-256 f77d98af4fa32b87a87d35d9af961cf79928d684b871da4ca6a6d156f997d4bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyagent_blueprint-0.2.4.tar.gz:

Publisher: publish.yml on pyagent-core/pyagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyagent_blueprint-0.2.4-py3-none-any.whl.

File metadata

File hashes

Hashes for pyagent_blueprint-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 755d8a6940e5c59d2c2e1bfdf06a2ca8eb2751af00e0091adb3fb89b809159a1
MD5 e17788d09ddc75814ed0ee29621859a2
BLAKE2b-256 b07439c23e9879891802e2dabc04cb4c509be3b032c6da9dd8ce2978668c97e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyagent_blueprint-0.2.4-py3-none-any.whl:

Publisher: publish.yml on pyagent-core/pyagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page