Skip to content

Commit aaa03ac

Browse files
google-genai-botcopybara-github
authored andcommitted
refactor: Remove the session events dependency from A2aAgentExecutor
PiperOrigin-RevId: 893590774
1 parent 6f29775 commit aaa03ac

File tree

6 files changed

+40
-14
lines changed

6 files changed

+40
-14
lines changed

src/google/adk/a2a/executor/a2a_agent_executor_impl.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from typing_extensions import override
3939

4040
from ...runners import Runner
41+
from ...sessions import base_session_service
4142
from ...utils.context_utils import Aclosing
4243
from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION
4344
from ..converters.from_adk_event import create_error_status_event
@@ -287,6 +288,8 @@ async def _resolve_session(
287288
app_name=runner.app_name,
288289
user_id=user_id,
289290
session_id=session_id,
291+
# Checking existence doesn't require event history.
292+
config=base_session_service.GetSessionConfig(num_recent_events=0),
290293
)
291294
if session is None:
292295
session = await runner.session_service.create_session(

src/google/adk/sessions/base_session_service.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,16 @@
2727

2828

2929
class GetSessionConfig(BaseModel):
30-
"""The configuration of getting a session."""
30+
"""The configuration of getting a session.
31+
32+
Attributes:
33+
num_recent_events: The limit of recent events to get for the session.
34+
Optional: if None, the filter is not applied; if greater than 0, returns
35+
at most given number of recent events; if 0, no events are returned.
36+
after_timestamp: The earliest timestamp of events to get for the session.
37+
Optional: if None, the filter is not applied; otherwise, returns events
38+
with timestamp >= the given time.
39+
"""
3140

3241
num_recent_events: Optional[int] = None
3342
after_timestamp: Optional[float] = None

src/google/adk/sessions/in_memory_session_service.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,13 @@ def _get_session_impl(
178178
copied_session = copy.deepcopy(session)
179179

180180
if config:
181-
if config.num_recent_events:
182-
copied_session.events = copied_session.events[
183-
-config.num_recent_events :
184-
]
181+
if config.num_recent_events is not None:
182+
if config.num_recent_events == 0:
183+
copied_session.events = []
184+
else:
185+
copied_session.events = copied_session.events[
186+
-config.num_recent_events :
187+
]
185188
if config.after_timestamp:
186189
i = len(copied_session.events) - 1
187190
while i >= 0:

src/google/adk/sessions/sqlite_session_service.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,14 @@ async def get_session(
261261

262262
query_parts.append("ORDER BY timestamp DESC")
263263

264-
if config and config.num_recent_events:
264+
if config and config.num_recent_events is not None:
265265
query_parts.append("LIMIT ?")
266266
params.append(config.num_recent_events)
267267

268-
event_rows = await db.execute_fetchall(" ".join(query_parts), params)
268+
if config and config.num_recent_events == 0:
269+
event_rows = []
270+
else:
271+
event_rows = await db.execute_fetchall(" ".join(query_parts), params)
269272
storage_events_data = [row["event_data"] for row in event_rows]
270273

271274
# Fetch states from storage

src/google/adk/sessions/vertex_ai_session_service.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,19 @@ async def get_session(
172172
}
173173

174174
try:
175-
get_session_response, events_iterator = await asyncio.gather(
176-
api_client.agent_engines.sessions.get(name=session_resource_name),
177-
api_client.agent_engines.sessions.events.list(
178-
name=session_resource_name,
179-
**list_events_kwargs,
180-
),
181-
)
175+
if config and config.num_recent_events == 0:
176+
get_session_response = await api_client.agent_engines.sessions.get(
177+
name=session_resource_name
178+
)
179+
events_iterator = []
180+
else:
181+
get_session_response, events_iterator = await asyncio.gather(
182+
api_client.agent_engines.sessions.get(name=session_resource_name),
183+
api_client.agent_engines.sessions.events.list(
184+
name=session_resource_name,
185+
**list_events_kwargs,
186+
),
187+
)
182188
except ClientError as e:
183189
if e.code == 404:
184190
logger.debug(

tests/unittests/a2a/executor/test_a2a_agent_executor_impl.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from google.adk.events.event_actions import EventActions
3737
from google.adk.runners import RunConfig
3838
from google.adk.runners import Runner
39+
from google.adk.sessions.base_session_service import GetSessionConfig
3940
from google.genai.types import Content
4041
import pytest
4142

@@ -659,6 +660,7 @@ async def test_resolve_session_creates_new_session(self):
659660
app_name=self.mock_runner.app_name,
660661
user_id="test-user",
661662
session_id="old-session-id",
663+
config=GetSessionConfig(num_recent_events=0, after_timestamp=None),
662664
)
663665
self.mock_runner.session_service.create_session.assert_called_once_with(
664666
app_name=self.mock_runner.app_name,

0 commit comments

Comments
 (0)