From c3cef0056b12e10b15f9046d149e1e7f1becde0c Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Thu, 23 Oct 2025 07:33:55 -0400 Subject: [PATCH 1/8] Separate protobuf dependencies --- pyproject.toml | 9 +++++---- src/a2a/utils/proto_utils.py | 8 +++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 46f7400a..9691efa4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,8 +11,6 @@ dependencies = [ "httpx>=0.28.1", "httpx-sse>=0.4.0", "pydantic>=2.11.3", - "protobuf>=5.29.5", - "google-api-core>=1.26.0", ] classifiers = [ @@ -29,9 +27,12 @@ classifiers = [ ] [project.optional-dependencies] -http-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] +proto = ["protobuf>=5.29.5", "google-api-core>=1.26.0"] +jsonrpc-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] +rest-server = ["fastapi>=0.115.2", "sse-starlette", "starlette", "a2a-sdk[proto]"] +http-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[rest-server]"] encryption = ["cryptography>=43.0.0"] -grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0"] +grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "a2a-sdk[proto]"] telemetry = ["opentelemetry-api>=1.33.0", "opentelemetry-sdk>=1.33.0"] postgresql = ["sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0"] mysql = ["sqlalchemy[asyncio,aiomysql]>=2.0.0"] diff --git a/src/a2a/utils/proto_utils.py b/src/a2a/utils/proto_utils.py index e619cd72..7e87824e 100644 --- a/src/a2a/utils/proto_utils.py +++ b/src/a2a/utils/proto_utils.py @@ -7,7 +7,13 @@ from typing import Any -from google.protobuf import json_format, struct_pb2 + +try: + from google.protobuf import json_format, struct_pb2 +except ImportError as e: + raise ImportError( + 'proto-utils requires protobuf. Install with "pip install a2a-sdk[proto]"' + ) from e from a2a import types from a2a.grpc import a2a_pb2 From 8ffaa435ba814bc3409c916eb317bd0a448ab2da Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Thu, 23 Oct 2025 23:24:29 -0400 Subject: [PATCH 2/8] fix google-api-core as well --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9691efa4..ee8d8b02 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,12 +27,12 @@ classifiers = [ ] [project.optional-dependencies] -proto = ["protobuf>=5.29.5", "google-api-core>=1.26.0"] +proto = ["protobuf>=5.29.5"] jsonrpc-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] rest-server = ["fastapi>=0.115.2", "sse-starlette", "starlette", "a2a-sdk[proto]"] http-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[rest-server]"] encryption = ["cryptography>=43.0.0"] -grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "a2a-sdk[proto]"] +grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "google-api-core>=1.26.0", "a2a-sdk[proto]"] telemetry = ["opentelemetry-api>=1.33.0", "opentelemetry-sdk>=1.33.0"] postgresql = ["sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0"] mysql = ["sqlalchemy[asyncio,aiomysql]>=2.0.0"] From 0e234169ebafdf74b93578168b6358987cd18b87 Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Fri, 24 Oct 2025 14:28:51 -0400 Subject: [PATCH 3/8] re-order dependencies Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ee8d8b02..0c6a76b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,8 @@ classifiers = [ [project.optional-dependencies] proto = ["protobuf>=5.29.5"] jsonrpc-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] -rest-server = ["fastapi>=0.115.2", "sse-starlette", "starlette", "a2a-sdk[proto]"] -http-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[rest-server]"] +rest-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[proto]"] +http-server = ["a2a-sdk[rest-server]"] encryption = ["cryptography>=43.0.0"] grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "google-api-core>=1.26.0", "a2a-sdk[proto]"] telemetry = ["opentelemetry-api>=1.33.0", "opentelemetry-sdk>=1.33.0"] From 16ab7ccc457a8784b26938fb7622456e6bae4c50 Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Fri, 24 Oct 2025 14:45:27 -0400 Subject: [PATCH 4/8] patch to readme, remove rest-server extra --- .github/actions/spelling/allow.txt | 42 +++++++++++++++--------------- README.md | 4 ++- pyproject.toml | 3 +-- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index a016962c..da68a546 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -1,17 +1,10 @@ AAgent +ACMRTUXB ACard AClient -ACMRTUXB -aconnect -adk AError AFast -agentic AGrpc -aio -aiomysql -amannn -aproject ARequest ARun AServer @@ -19,6 +12,26 @@ AServers AService AStarlette AUser +DSNs +EUR +GBP +GVsb +INR +JPY +JSONRPCt +JWS +Llm +POSTGRES +RUF +SLF +Tful +aconnect +adk +agentic +aio +aiomysql +amannn +aproject autouse backticks cla @@ -29,32 +42,23 @@ coro datamodel deepwiki drivername -DSNs dunders euo -EUR excinfo fernet fetchrow fetchval -GBP genai getkwargs gle -GVsb ietf initdb inmemory -INR isready -JPY -JSONRPCt -JWS kwarg langgraph lifecycles linting -Llm lstrips mikeas mockurl @@ -64,7 +68,6 @@ oidc opensource otherurl postgres -POSTGRES postgresql protoc pyi @@ -74,14 +77,11 @@ pyversions redef respx resub -RUF -SLF socio sse tagwords taskupdate testuuid -Tful tiangolo typeerror vulnz diff --git a/README.md b/README.md index 4964376e..e127909a 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,9 @@ Install the core SDK and any desired extras using your preferred package manager | ------------------------ | ------------------------------------------ | -------------------------------------------- | | **Core SDK** | `uv add a2a-sdk` | `pip install a2a-sdk` | | **All Extras** | `uv add "a2a-sdk[all]"` | `pip install "a2a-sdk[all]"` | -| **HTTP Server** | `uv add "a2a-sdk[http-server]"` | `pip install "a2a-sdk[http-server]"` | +| **protobuf** | `uv add "a2a-sdk[proto]"` | `pip install "a2a-sdk[proto]"` | +| **JSON-RPC Server** | `uv add "a2a-sdk[jsonrpc-server]"` | `pip install "a2a-sdk[jsonrpc-server]"` | +| **HTTP (Rest) Server** | `uv add "a2a-sdk[http-server]"` | `pip install "a2a-sdk[http-server]"` | | **gRPC Support** | `uv add "a2a-sdk[grpc]"` | `pip install "a2a-sdk[grpc]"` | | **OpenTelemetry Tracing**| `uv add "a2a-sdk[telemetry]"` | `pip install "a2a-sdk[telemetry]"` | | **Encryption** | `uv add "a2a-sdk[encryption]"` | `pip install "a2a-sdk[encryption]"` | diff --git a/pyproject.toml b/pyproject.toml index 0c6a76b3..3fb811c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,7 @@ classifiers = [ [project.optional-dependencies] proto = ["protobuf>=5.29.5"] jsonrpc-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] -rest-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[proto]"] -http-server = ["a2a-sdk[rest-server]"] +http-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[proto]"] encryption = ["cryptography>=43.0.0"] grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "google-api-core>=1.26.0", "a2a-sdk[proto]"] telemetry = ["opentelemetry-api>=1.33.0", "opentelemetry-sdk>=1.33.0"] From 66b42d1ec3024650a30b9c45e8c10ded14492a4a Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Mon, 27 Oct 2025 11:47:30 -0400 Subject: [PATCH 5/8] Update README.md Co-authored-by: Holt Skinner <13262395+holtskinner@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e127909a..d77b07a5 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Install the core SDK and any desired extras using your preferred package manager | **All Extras** | `uv add "a2a-sdk[all]"` | `pip install "a2a-sdk[all]"` | | **protobuf** | `uv add "a2a-sdk[proto]"` | `pip install "a2a-sdk[proto]"` | | **JSON-RPC Server** | `uv add "a2a-sdk[jsonrpc-server]"` | `pip install "a2a-sdk[jsonrpc-server]"` | -| **HTTP (Rest) Server** | `uv add "a2a-sdk[http-server]"` | `pip install "a2a-sdk[http-server]"` | +| **HTTP (REST) Server** | `uv add "a2a-sdk[http-server]"` | `pip install "a2a-sdk[http-server]"` | | **gRPC Support** | `uv add "a2a-sdk[grpc]"` | `pip install "a2a-sdk[grpc]"` | | **OpenTelemetry Tracing**| `uv add "a2a-sdk[telemetry]"` | `pip install "a2a-sdk[telemetry]"` | | **Encryption** | `uv add "a2a-sdk[encryption]"` | `pip install "a2a-sdk[encryption]"` | From b95680606982ba3bf376b18eac6ea20ba1d3d6b7 Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Mon, 3 Nov 2025 10:31:26 -0500 Subject: [PATCH 6/8] remove proto extra, consolidate in http-server, grpc --- pyproject.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3fb811c0..edeecc22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,11 +27,10 @@ classifiers = [ ] [project.optional-dependencies] -proto = ["protobuf>=5.29.5"] jsonrpc-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"] -http-server = ["a2a-sdk[jsonrpc-server]", "a2a-sdk[proto]"] +http-server = ["a2a-sdk[jsonrpc-server]", "protobuf>=5.29.5"] encryption = ["cryptography>=43.0.0"] -grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "google-api-core>=1.26.0", "a2a-sdk[proto]"] +grpc = ["grpcio>=1.60", "grpcio-tools>=1.60", "grpcio_reflection>=1.7.0", "google-api-core>=1.26.0", "protobuf>=5.29.5"] telemetry = ["opentelemetry-api>=1.33.0", "opentelemetry-sdk>=1.33.0"] postgresql = ["sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0"] mysql = ["sqlalchemy[asyncio,aiomysql]>=2.0.0"] From 965c371e1cedc156fe711035e9749265e70ae717 Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Mon, 3 Nov 2025 10:32:13 -0500 Subject: [PATCH 7/8] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index d77b07a5..082646ec 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,6 @@ Install the core SDK and any desired extras using your preferred package manager | ------------------------ | ------------------------------------------ | -------------------------------------------- | | **Core SDK** | `uv add a2a-sdk` | `pip install a2a-sdk` | | **All Extras** | `uv add "a2a-sdk[all]"` | `pip install "a2a-sdk[all]"` | -| **protobuf** | `uv add "a2a-sdk[proto]"` | `pip install "a2a-sdk[proto]"` | | **JSON-RPC Server** | `uv add "a2a-sdk[jsonrpc-server]"` | `pip install "a2a-sdk[jsonrpc-server]"` | | **HTTP (REST) Server** | `uv add "a2a-sdk[http-server]"` | `pip install "a2a-sdk[http-server]"` | | **gRPC Support** | `uv add "a2a-sdk[grpc]"` | `pip install "a2a-sdk[grpc]"` | From 285ff7a7590983d8db80952a279399c588099f2f Mon Sep 17 00:00:00 2001 From: Vinay Ramesh Date: Mon, 3 Nov 2025 10:33:06 -0500 Subject: [PATCH 8/8] Update proto_utils.py --- src/a2a/utils/proto_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2a/utils/proto_utils.py b/src/a2a/utils/proto_utils.py index 7e87824e..ded45b90 100644 --- a/src/a2a/utils/proto_utils.py +++ b/src/a2a/utils/proto_utils.py @@ -12,7 +12,7 @@ from google.protobuf import json_format, struct_pb2 except ImportError as e: raise ImportError( - 'proto-utils requires protobuf. Install with "pip install a2a-sdk[proto]"' + 'proto-utils requires protobuf. Install with "pip install a2a-sdk[grpc] or a2a-sdk[http-server] depending on need"' ) from e from a2a import types