Skip to content

ArtifactsComponent

The ArtifactsComponent provides a REST API for querying and publishing artifacts on the blackboard, enabling external systems to interact with the Flock orchestrator.

Overview

This component exposes HTTP endpoints for artifact operations, including querying with advanced filters, publishing new artifacts, and viewing consumption history.

Configuration

ArtifactComponentConfig

Fields: - prefix (str, default: "/api/v1/plugin/") - URL prefix for endpoints - tags (list[str], default: ["Artifacts"]) - OpenAPI tags

Usage

from flock import Flock
from flock.components.server import (
    ArtifactsComponent,
    ArtifactComponentConfig
)

artifacts = ArtifactsComponent(
    config=ArtifactComponentConfig(
        prefix="/api/v1",
        tags=["Artifacts", "Blackboard"]
    )
)

await flock.serve(components=[artifacts])

Endpoints

GET /api/v1/plugin/artifacts

Query artifacts with filtering and pagination.

Query Parameters: - type_names (list[str]) - Filter by artifact types - produced_by (list[str]) - Filter by producer agents - correlation_id (str) - Filter by correlation ID - tags (list[str]) - Filter by tags - visibility (list[str]) - Filter by visibility kind - start (ISO datetime) - Start of time range - end (ISO datetime) - End of time range - limit (int) - Max results (default: 100) - offset (int) - Pagination offset - embed_consumptions (bool) - Include consumption records

Response:

{
  "artifacts": [
    {
      "id": "uuid-1",
      "type": "Pizza",
      "payload": {
        "name": "Hawaiian Supreme",
        "toppings": ["pineapple", "ham"]
      },
      "produced_by": "pizza_master",
      "created_at": "2025-10-31T12:00:00Z",
      "tags": ["urgent"],
      "consumptions": [
        {
          "consumer": "pizza_reviewer",
          "consumed_at": "2025-10-31T12:00:01Z"
        }
      ]
    }
  ],
  "total": 1,
  "limit": 100,
  "offset": 0
}

POST /api/v1/plugin/artifacts

Publish a new artifact to the blackboard.

Request Body:

{
  "artifact_type": "Pizza",
  "payload": {
    "name": "Margherita",
    "toppings": ["tomato", "mozzarella", "basil"]
  },
  "tags": ["urgent", "customer-request"],
  "correlation_id": "order-123",
  "visibility": {
    "kind": "public"
  }
}

Response:

{
  "artifact_id": "uuid-new",
  "status": "published",
  "triggered_agents": ["pizza_reviewer", "pizza_delivery"]
}

Best Practices

1. Use Filtering for Performance

# ✅ Filter by correlation ID for workflow tracking
response = await client.get(
    "/api/v1/plugin/artifacts",
    params={"correlation_id": "workflow-123"}
)

2. Include Consumption Data

# Get artifacts with consumption history
response = await client.get(
    "/api/v1/plugin/artifacts",
    params={"embed_consumptions": True}
)

# See which agents consumed each artifact
for artifact in response.json()["artifacts"]:
    print(f"Consumed by: {artifact['consumed_by']}")

3. Paginate Large Result Sets

# Fetch in batches
limit = 50
offset = 0

while True:
    response = await client.get(
        "/api/v1/plugin/artifacts",
        params={"limit": limit, "offset": offset}
    )

    artifacts = response.json()["artifacts"]
    if not artifacts:
        break

    process_artifacts(artifacts)
    offset += limit

Component Properties

  • Name: artifacts
  • Priority: 1
  • Dependencies: None

Example

See: examples/09-server-components/06_artifacts_component.py