Skip to content

Commit 90dd73f

Browse files
Merge pull request #8 from satendrakumar/develop
Code refactoring
2 parents cf2db62 + 2a50f13 commit 90dd73f

File tree

5 files changed

+61
-53
lines changed

5 files changed

+61
-53
lines changed

a2a_client_app.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import asyncio
22
import uuid
33

4-
from src.a2a.a2a_client import A2ASimpleClient
4+
from src.a2a.a2a_client import A2AClient
55

66

77
async def main():
8-
a2a_client: A2ASimpleClient = A2ASimpleClient()
8+
a2a_client: A2AClient = A2AClient()
99
agent_host_url = "http://localhost:8000/a2a"
1010

1111
trending_task = a2a_client.create_task(
@@ -23,10 +23,7 @@ async def main():
2323
print(trending_topics)
2424
print(analysis)
2525

26-
print(
27-
"###############################################################################################################"
28-
)
29-
print("Multi-turn conversation with an agent............................")
26+
print("Multi-turn conversation with an agent...................")
3027
context_id = str(uuid.uuid4())
3128
print(f"Starting conversation with context_id: {context_id}")
3229

src/a2a/a2a_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
AGENT_CARD_PATH = "/agent-card.json"
1010

1111

12-
class A2ASimpleClient:
12+
class A2AClient:
1313
def __init__(self, default_timeout: float = 240.0):
1414
# Cache for agent metadata
1515
self._agent_info_cache: dict[str, dict[str, Any] | None] = {}

src/a2a/a2a_fastapi_app.py

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,25 @@
11
from collections.abc import Callable
22
from typing import Any
33

4-
from fastapi import APIRouter, FastAPI
5-
from google.adk import Runner
6-
from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor, A2aAgentExecutorConfig
7-
from google.adk.agents import LlmAgent
8-
from google.adk.artifacts import InMemoryArtifactService
9-
from google.adk.memory import InMemoryMemoryService
10-
from google.adk.sessions import InMemorySessionService
11-
from starlette.applications import Starlette
12-
134
from a2a.server.apps.jsonrpc.jsonrpc_app import CallContextBuilder, JSONRPCApplication
145
from a2a.server.context import ServerCallContext
15-
from a2a.server.request_handlers import DefaultRequestHandler
166
from a2a.server.request_handlers.request_handler import RequestHandler
17-
from a2a.server.tasks import InMemoryTaskStore
187
from a2a.types import AgentCard
198
from a2a.utils.constants import AGENT_CARD_WELL_KNOWN_PATH, DEFAULT_RPC_URL, EXTENDED_AGENT_CARD_PATH
20-
21-
22-
def get_agent_request_handler(agent: LlmAgent):
23-
runner = Runner(
24-
app_name=agent.name,
25-
agent=agent,
26-
artifact_service=InMemoryArtifactService(),
27-
session_service=InMemorySessionService(),
28-
memory_service=InMemoryMemoryService(),
29-
)
30-
config = A2aAgentExecutorConfig()
31-
executor = A2aAgentExecutor(runner=runner, config=config)
32-
return DefaultRequestHandler(agent_executor=executor, task_store=InMemoryTaskStore())
9+
from fastapi import APIRouter, FastAPI
10+
from starlette.applications import Starlette
3311

3412

3513
class A2AFastApiApp(JSONRPCApplication):
3614
def __init__(
37-
self,
38-
fastapi_app: FastAPI,
39-
agent_card: AgentCard,
40-
http_handler: RequestHandler,
41-
extended_agent_card: AgentCard | None = None,
42-
context_builder: CallContextBuilder | None = None,
43-
card_modifier: Callable[[AgentCard], AgentCard] | None = None,
44-
extended_card_modifier: Callable[[AgentCard, ServerCallContext], AgentCard] | None = None,
15+
self,
16+
fastapi_app: FastAPI,
17+
agent_card: AgentCard,
18+
http_handler: RequestHandler,
19+
extended_agent_card: AgentCard | None = None,
20+
context_builder: CallContextBuilder | None = None,
21+
card_modifier: Callable[[AgentCard], AgentCard] | None = None,
22+
extended_card_modifier: Callable[[AgentCard, ServerCallContext], AgentCard] | None = None,
4523
):
4624
super().__init__(
4725
agent_card=agent_card,
@@ -54,11 +32,11 @@ def __init__(
5432
self.fastapi_app = fastapi_app
5533

5634
def build(
57-
self,
58-
agent_card_url: str = AGENT_CARD_WELL_KNOWN_PATH,
59-
rpc_url: str = DEFAULT_RPC_URL,
60-
extended_agent_card_url: str = EXTENDED_AGENT_CARD_PATH,
61-
**kwargs: Any,
35+
self,
36+
agent_card_url: str = AGENT_CARD_WELL_KNOWN_PATH,
37+
rpc_url: str = DEFAULT_RPC_URL,
38+
extended_agent_card_url: str = EXTENDED_AGENT_CARD_PATH,
39+
**kwargs: Any,
6240
) -> Starlette:
6341
name_prefix = rpc_url.replace("/", "")
6442
router = APIRouter()

src/a2a/a2a_request_handler.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from a2a.server.request_handlers import DefaultRequestHandler
2+
from a2a.server.tasks import InMemoryTaskStore
3+
from google.adk import Runner
4+
from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor, A2aAgentExecutorConfig
5+
from google.adk.agents import LlmAgent
6+
from google.adk.artifacts import InMemoryArtifactService
7+
from google.adk.memory import InMemoryMemoryService
8+
from google.adk.sessions import InMemorySessionService
9+
10+
11+
class A2ARequestHandler:
12+
@staticmethod
13+
def get_request_handler(agent: LlmAgent):
14+
runner = Runner(
15+
app_name=agent.name,
16+
agent=agent,
17+
artifact_service=InMemoryArtifactService(),
18+
session_service=InMemorySessionService(),
19+
memory_service=InMemoryMemoryService(),
20+
)
21+
config = A2aAgentExecutorConfig()
22+
executor = A2aAgentExecutor(runner=runner, config=config)
23+
return DefaultRequestHandler(agent_executor=executor, task_store=InMemoryTaskStore())

src/a2a/a2a_utils.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,34 @@
11
from typing import Callable
22

3+
from a2a.types import AgentCard
34
from fastapi import FastAPI
45
from google.adk.agents import LlmAgent
56

6-
from a2a.types import AgentCard
7-
from src.a2a.a2a_fastapi_app import A2AFastApiApp, get_agent_request_handler
7+
from src.a2a.a2a_fastapi_app import A2AFastApiApp
8+
from src.a2a.a2a_request_handler import A2ARequestHandler
89

910

1011
class A2AUtils:
12+
"""
13+
Utility class for A2A (Agent-to-Agent) communication.
14+
15+
This class provides static methods to assist in constructing and managing agent
16+
communication processes in the A2A framework. It is specifically designed to help
17+
configure and set up agents, their request handlers, and their associated API endpoints.
18+
19+
"""
1120
@staticmethod
1221
def build(
13-
name: str,
14-
get_agent: Callable[[str], LlmAgent],
15-
get_agent_card: Callable[[str], AgentCard],
16-
model_name: str,
17-
agent_base_url: str,
18-
app: FastAPI,
22+
name: str,
23+
get_agent: Callable[[str], LlmAgent],
24+
get_agent_card: Callable[[str], AgentCard],
25+
model_name: str,
26+
agent_base_url: str,
27+
app: FastAPI,
1928
) -> None:
2029
agent = get_agent(model_name)
21-
agent_request_handler = get_agent_request_handler(agent)
30+
agent_request_handler = A2ARequestHandler.get_request_handler(agent)
2231
agent_card = get_agent_card(f"{agent_base_url}/{name}/")
2332
agent_server = A2AFastApiApp(fastapi_app=app, agent_card=agent_card, http_handler=agent_request_handler)
2433
agent_server.build(rpc_url=f"/{name}/", agent_card_url=f"/{name}/{{path:path}}")
34+

0 commit comments

Comments
 (0)