Thomas Piacentini
← Atelier

Chapitre

Operations by binding

Texte original · anglais

Every A2A operation has one name in JSON-RPC and gRPC, one route in HTTP+JSON, one request and one response message, and a fixed list of errors.

The proto defines eleven operations in one gRPC service, A2AService, and the JSON-RPC method carries the same name as the rpc {{proto A2AService}} {{spec §5.3}}. The routes are the proto's google.api.http templates {{proto A2AService}}. The first column links each operation to the section that explains it.

JSON-RPC method gRPC rpc HTTP+JSON route Request in, response out
SendMessage SendMessage POST /message:send SendMessageRequest, SendMessageResponse
SendStreamingMessage SendStreamingMessage POST /message:stream SendMessageRequest, a stream of StreamResponse
GetTask GetTask GET /tasks/{id=*} GetTaskRequest, Task
ListTasks ListTasks GET /tasks ListTasksRequest, ListTasksResponse
CancelTask CancelTask POST /tasks/{id=*}:cancel CancelTaskRequest, Task
SubscribeToTask SubscribeToTask GET /tasks/{id=*}:subscribe in the proto, and POST in §5.3 and §11.3.2, so accept both verbs, as the reference SDK does (conflict D1) {{sdk src/a2a/server/routes/rest_routes.py}} SubscribeToTaskRequest, a stream of StreamResponse
CreateTaskPushNotificationConfig CreateTaskPushNotificationConfig POST /tasks/{task_id=*}/pushNotificationConfigs TaskPushNotificationConfig in and out, with no request wrapper (conflict D5)
GetTaskPushNotificationConfig GetTaskPushNotificationConfig GET /tasks/{task_id=*}/pushNotificationConfigs/{id=*} GetTaskPushNotificationConfigRequest, TaskPushNotificationConfig
ListTaskPushNotificationConfigs ListTaskPushNotificationConfigs GET /tasks/{task_id=*}/pushNotificationConfigs ListTaskPushNotificationConfigsRequest, ListTaskPushNotificationConfigsResponse
DeleteTaskPushNotificationConfig DeleteTaskPushNotificationConfig DELETE /tasks/{task_id=*}/pushNotificationConfigs/{id=*} DeleteTaskPushNotificationConfigRequest, google.protobuf.Empty
GetExtendedAgentCard GetExtendedAgentCard GET /extendedAgentCard GetExtendedAgentCardRequest, AgentCard

Every rpc has a second route in its additional_bindings, the same path under a /{tenant} prefix, such as POST /{tenant}/message:send {{proto A2AService}}. The prose in §5.3, §11.3, and §11.5 lists only the plain routes (discrepancy N12). In JSON-RPC the same value travels as params.tenant, and in gRPC as the tenant field of the request. In every binding it must match the tenant of the chosen interface when that is set {{proto SendMessageRequest}}, as HTTP+JSON explains.

SendMessageResponse holds one task or one message. A send requires message, and get, cancel, and subscribe require the task id. The get, list, and delete configuration requests require taskId, get and delete also require id, and create requires url. JSON-RPC posts each call as one envelope, with the name in method and the request message in params {{spec §9.3}}.

Each operation can raise the errors §3.1 lists for it. The last column names the card capability that must be true. When it is false or absent, the push configuration methods fail with PushNotificationNotSupportedError and the others with UnsupportedOperationError {{spec §3.3.4}}.

Method Other A2A errors Capability flag
SendMessage ContentTypeNotSupportedError, TaskNotFoundError, and UnsupportedOperationError for a terminal task none
SendStreamingMessage The same three as SendMessage streaming
GetTask TaskNotFoundError none
ListTasks None beyond the standard protocol errors none
CancelTask TaskNotCancelableError, TaskNotFoundError none
SubscribeToTask TaskNotFoundError, and UnsupportedOperationError for a terminal task streaming
The four push configuration methods TaskNotFoundError, which GetTaskPushNotificationConfig also returns for a missing configuration pushNotifications
GetExtendedAgentCard ExtendedAgentCardNotConfiguredError when the flag is on and no extended card is configured extendedAgentCard

Any operation can also fail with VersionNotSupportedError, ExtensionSupportRequiredError, or an authentication or authorization error {{spec §3.6.2}} {{spec §3.3.2}}. Errors gives their codes in every binding, and the gRPC binding shows one rpc with its full annotation.

Sources: proto A2AService with its google.api.http routes and additional_bindings, and the request and response messages from SendMessageRequest to ListTaskPushNotificationConfigsResponse (research/sources/a2a.proto); spec §3.1.1 to §3.1.11, §3.3.2, §3.3.4, §3.6.2, §5.3, §9.3, §11.3, §11.3.2, §11.5 (research/sources/specification.md); research/brief-spec.md sections 2.7, 2.8, 3.0, 7.5 and 12.2; research/migration.md section D.6 (N12); sdk src/a2a/server/routes/rest_routes.py at v1.2.2

Code et livrables 1
Ce que vous en retenez

Enregistré dans votre carnet sur cet appareil.

Sources et limites

Les repères de lecture sont déclaratifs. Les résultats de tests sont enregistrés séparément ; ils valent pour les cas exécutés.

AI Engineering from Scratch · 3f9715c · MIT

Télécharger ce fichier ↓