Skip to content

Commit b8758bf

Browse files
committed
fix(a2a): add auto_create_session flag to A2aAgentExecutor
1 parent c78e452 commit b8758bf

3 files changed

Lines changed: 37 additions & 6 deletions

File tree

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from google.adk.runners import Runner
3939
from typing_extensions import override
4040

41+
from ...errors.session_not_found_error import SessionNotFoundError
4142
from ...utils.context_utils import Aclosing
4243
from ..agent.interceptors.new_integration_extension import _NEW_A2A_ADK_INTEGRATION_EXTENSION
4344
from ..converters.request_converter import AgentRunRequest
@@ -75,12 +76,14 @@ def __init__(
7576
config: Optional[A2aAgentExecutorConfig] = None,
7677
use_legacy: bool = False,
7778
force_new_version: bool = False,
79+
auto_create_session: bool = True,
7880
):
7981
super().__init__()
8082
self._runner = runner
8183
self._config = config or A2aAgentExecutorConfig()
8284
self._use_legacy = use_legacy
8385
self._force_new_version = force_new_version
86+
self._auto_create_session = auto_create_session
8487
self._executor_impl = None
8588

8689
async def _resolve_runner(self) -> Runner:
@@ -141,6 +144,7 @@ async def execute(
141144
self._executor_impl = ExecutorImpl(
142145
runner=self._runner,
143146
config=self._config,
147+
auto_create_session=self._auto_create_session,
144148
)
145149
await self._executor_impl.execute(context, event_queue)
146150
return
@@ -328,10 +332,23 @@ async def _prepare_session(
328332
run_request: AgentRunRequest,
329333
runner: Runner,
330334
):
331-
session = await runner._get_or_create_session(
335+
session = await runner.session_service.get_session(
336+
app_name=runner.app_name,
332337
user_id=run_request.user_id,
333338
session_id=run_request.session_id,
334339
)
340+
if not session:
341+
if self._auto_create_session:
342+
session = await runner.session_service.create_session(
343+
app_name=runner.app_name,
344+
user_id=run_request.user_id,
345+
session_id=run_request.session_id,
346+
)
347+
else:
348+
raise SessionNotFoundError(
349+
f'Session not found: {run_request.session_id}'
350+
)
351+
# Update run_request with the new session_id
335352
run_request.session_id = session.id
336353
return session
337354

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from a2a.types import TextPart
3939
from typing_extensions import override
4040

41+
from ...errors.session_not_found_error import SessionNotFoundError
4142
from ...runners import Runner
4243
from ...sessions import base_session_service
4344
from ...utils.context_utils import Aclosing
@@ -70,10 +71,12 @@ def __init__(
7071
*,
7172
runner: Runner | Callable[..., Runner | Awaitable[Runner]],
7273
config: Optional[A2aAgentExecutorConfig] = None,
74+
auto_create_session: bool = True,
7375
):
7476
super().__init__()
7577
self._runner = runner
7678
self._config = config or A2aAgentExecutorConfig()
79+
self._auto_create_session = auto_create_session
7780

7881
@override
7982
async def cancel(self, context: RequestContext, event_queue: EventQueue):
@@ -286,13 +289,25 @@ async def _resolve_session(
286289
raise ValueError('user_id must be set in AgentRunRequest')
287290
if not run_request.session_id:
288291
raise ValueError('session_id must be set in AgentRunRequest')
289-
session = await runner._get_or_create_session(
292+
session = await runner.session_service.get_session(
293+
app_name=runner.app_name,
290294
user_id=run_request.user_id,
291295
session_id=run_request.session_id,
292-
get_session_config=base_session_service.GetSessionConfig(
293-
num_recent_events=0
294-
),
296+
# Checking existence doesn't require event history.
297+
config=base_session_service.GetSessionConfig(num_recent_events=0),
295298
)
299+
if not session:
300+
if self._auto_create_session:
301+
session = await runner.session_service.create_session(
302+
app_name=runner.app_name,
303+
user_id=run_request.user_id,
304+
session_id=run_request.session_id,
305+
)
306+
else:
307+
raise SessionNotFoundError(
308+
f'Session not found: {run_request.session_id}'
309+
)
310+
# Update run_request with the new session_id
296311
run_request.session_id = session.id
297312

298313
def _get_invocation_metadata(

src/google/adk/a2a/utils/agent_to_a2a.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ async def create_runner() -> Runner:
145145
session_service=InMemorySessionService(),
146146
memory_service=InMemoryMemoryService(),
147147
credential_service=InMemoryCredentialService(),
148-
auto_create_session=True,
149148
)
150149

151150
# Create A2A components

0 commit comments

Comments
 (0)