Skip to content

Commit 58ad0ac

Browse files
committed
Upgrade simple_generalist dependencies
Signed-off-by: Ed Snible <snible@us.ibm.com>
1 parent fdc5594 commit 58ad0ac

3 files changed

Lines changed: 80 additions & 46 deletions

File tree

a2a/simple_generalist/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ requires-python = ">=3.12,<3.13"
55
description = "A generalist AG2 agent exposed via A2A, powered by MCP tools"
66
dependencies = [
77
"python-dotenv>=1.2.2",
8-
"a2a-sdk[http-server]>=0.3.22",
8+
"a2a-sdk[http-server]>=1.1.0,<2",
99
"ag2[openai,mcp,tracing]>=0.13.2",
1010
"httpx>=0.28.1",
1111
"pydantic>=2.13.4",

a2a/simple_generalist/src/simple_generalist/a2a_server/server.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@
44
import traceback
55
from typing import Any
66
from a2a.server.agent_execution import AgentExecutor, RequestContext
7-
from a2a.server.apps import A2AStarletteApplication
87
from a2a.server.events.event_queue import EventQueue
98
from a2a.server.request_handlers import DefaultRequestHandler
9+
from a2a.server.routes import create_agent_card_routes, create_jsonrpc_routes
1010
from a2a.server.tasks import InMemoryTaskStore, TaskUpdater
1111
from a2a.types import (
1212
AgentCapabilities,
1313
AgentCard,
14+
AgentInterface,
1415
AgentSkill,
15-
Part,
1616
TaskState,
17-
TextPart,
1817
)
19-
from a2a.utils import new_agent_text_message, new_task
18+
from a2a.helpers import new_task_from_user_message, new_text_part
19+
20+
from starlette.applications import Starlette
2021

2122
from autogen.mcp.mcp_client import create_toolkit, Toolkit
2223
from mcp import ClientSession
@@ -69,7 +70,7 @@ def get_agent_card(settings: Settings) -> AgentCard:
6970
return AgentCard(
7071
name="Simple Generalist Agent",
7172
description="A generalist AG2 agent exposed via A2A, powered by MCP tools",
72-
url=agent_url,
73+
supported_interfaces=[AgentInterface(url=agent_url, protocol_binding="JSONRPC")],
7374
version="0.1.0",
7475
default_input_modes=["text"],
7576
default_output_modes=["text"],
@@ -125,7 +126,7 @@ async def execute(self, context: RequestContext, event_queue: EventQueue):
125126
# Get or create task
126127
task = context.current_task
127128
if not task:
128-
task = new_task(context.message) # type: ignore
129+
task = new_task_from_user_message(context.message) # type: ignore
129130
await event_queue.enqueue_event(task)
130131

131132
# Create task updater for progress events
@@ -138,24 +139,20 @@ async def event_callback(message: str, final: bool = False):
138139

139140
if final:
140141
# Final message with artifact
141-
parts = [Part(root=TextPart(text=message))]
142+
parts = [new_text_part(message)]
142143
await task_updater.add_artifact(parts)
143144
await task_updater.complete()
144145
else:
145146
# Progress update
146147
await task_updater.update_status(
147-
TaskState.working,
148-
new_agent_text_message(
149-
message,
150-
task_updater.context_id,
151-
task_updater.task_id,
152-
),
148+
TaskState.TASK_STATE_WORKING,
149+
task_updater.new_agent_message([new_text_part(message)]),
153150
)
154151

155152
async def error_callback(message: str):
156153
"""Send error event and mark task as failed."""
157154
logger.info(f"Error event: {message}")
158-
parts = [Part(root=TextPart(text=message))]
155+
parts = [new_text_part(message)]
159156
await task_updater.add_artifact(parts)
160157
await task_updater.failed()
161158

@@ -234,16 +231,18 @@ def create_app(settings: Settings) -> Any:
234231
request_handler = DefaultRequestHandler(
235232
agent_executor=SimpleGeneralistExecutor(settings),
236233
task_store=InMemoryTaskStore(),
237-
)
238-
239-
# Create A2A server
240-
server = A2AStarletteApplication(
241234
agent_card=agent_card,
242-
http_handler=request_handler,
243235
)
244236

245-
# Build and return the app
246-
app = server.build()
237+
# a2a-sdk 1.x replaced A2AStarletteApplication with route factories that we
238+
# assemble into a Starlette app ourselves.
239+
routes = create_jsonrpc_routes(request_handler, rpc_url="/")
240+
# Serve the current well-known path (/.well-known/agent-card.json) plus the
241+
# legacy /.well-known/agent.json path for backward compatibility.
242+
routes += create_agent_card_routes(agent_card)
243+
routes += create_agent_card_routes(agent_card, card_url="/.well-known/agent.json")
244+
245+
app = Starlette(routes=routes)
247246
logger.info("A2A server application created")
248247

249248
return app

a2a/simple_generalist/uv.lock

Lines changed: 59 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)