Skip to content

v1.21.0

Choose a tag to compare

@mpangrazzi mpangrazzi released this 07 Jul 14:21
f67c09d

This release adds 🤝 A2A protocol support to Hayhooks. Chat-capable Haystack pipelines can now be exposed as discoverable A2A agents, so other agents can find them through agent cards and delegate work to them.

Install and run:

pip install "hayhooks[a2a]"
hayhooks a2a run

🤝 A2A Server

  • New hayhooks a2a run command.
  • Exposes pipelines with run_chat_completion or run_chat_completion_async as A2A agents.
  • Serves per-agent cards at /{pipeline_name}/.well-known/agent-card.json.
  • Supports JSON-RPC A2A requests at POST /{pipeline_name}/.
  • Streams responses via SSE artifact updates.
  • Supports A2A 1.0, with A2A 0.3 compatibility enabled by default.

🧩 Agent Configuration

Customize generated agent cards with a2a_card on the pipeline wrapper.

Opt out of A2A exposure with:

class PipelineWrapper(BasePipelineWrapper):
    skip_a2a = True

When running behind a reverse proxy, use --external-url or HAYHOOKS_A2A_EXTERNAL_URL so agent cards advertise the public URL.

🧪 Demo and Docs

  • New examples/a2a_multi_agent demo showing two Haystack agents delegating over A2A while using MCP tools.
  • New A2A documentation, CLI docs, installation notes, and environment variable reference.

⚠️ Current Limitation

For now, A2A task execution is request-bound: each task runs inside the HTTP request handler by calling run_chat_completion / run_chat_completion_async.

This means detached/background task execution, input-required pauses, and push notification delivery are not supported yet.

Also note:

  • A2A routes are built at startup; restart hayhooks a2a run after deploying or undeploying pipelines.
  • Task state is in-memory and lost on restart.
  • Agent cards are path-prefixed under /{pipeline_name}/.well-known/agent-card.json.

Full Changelog: v1.20.0...v1.21.0