Skip to content

Fasta2a

FastA2A

Warning

This page is WIP.

To make it easier to implement A2A servers, we've implemented FastA2A, a library built on top of Starlette and Pydantic to bring A2A to Python.

You can use FastA2A with any agentic framework (it's not exclusive to PydanticAI). That said, we have a convenience method to create an A2A server from an existing PydanticAI agent.

"a2a.py
from pydantic_ai.agent import Agent

agent = Agent('anthropic:claude-3-5-sonnet-latest', name='My A2A Agent')
app = agent.to_a2a()

Then you can run the server with:

uvicorn a2a:app --host 0.0.0.0 --port 8000

Design

We built FastA2A with the following design in mind:

flowchart TB
    Server["HTTP Server"] <--> |Sends Requests/<br>Receives Results| TM

    subgraph CC[Core Components]
        direction RL
        TM["TaskManager<br>(coordinates)"] --> |Schedules Tasks| TE
        TM <--> Storage
        TE["Worker<br>(queues & exec.)"] <--> Storage["Storage<br>(persistence)"]
        TE --> |Delegates Execution| Runner
    end

    Runner["Runner<br>(implementation)"]

You can bring your own Storage, Worker and Runner.

By default, if using the from_agent method, the TaskManager will use an in-memory called InMemoryStorage and a Worker that runs the tasks in the same process.

Storage

The Storage is responsible for saving and loading tasks.

You can bring your own Storage by subclassing the Storage class and overriding the save_task and load_task methods.

Worker

The Worker is responsible for both scheduling tasks and executing them.

Runner

The Runner is the component that defines how the task is executed.