mirror of
https://github.com/encounter/adk-python.git
synced 2026-07-09 18:19:28 -07:00
fix: Handle NOT_FOUND error when fetching Vertex AI sessions
Co-authored-by: Liang Wu <wuliang@google.com> PiperOrigin-RevId: 855464349
This commit is contained in:
committed by
Copybara-Service
parent
b725045e5a
commit
75231a30f1
@@ -24,6 +24,7 @@ from typing import TYPE_CHECKING
|
||||
from typing import Union
|
||||
|
||||
from google.genai import types
|
||||
from google.genai.errors import ClientError
|
||||
from typing_extensions import override
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -155,6 +156,7 @@ class VertexAiSessionService(BaseSessionService):
|
||||
)
|
||||
}
|
||||
|
||||
try:
|
||||
get_session_response, events_iterator = await asyncio.gather(
|
||||
api_client.agent_engines.sessions.get(name=session_resource_name),
|
||||
api_client.agent_engines.sessions.events.list(
|
||||
@@ -162,6 +164,14 @@ class VertexAiSessionService(BaseSessionService):
|
||||
**list_events_kwargs,
|
||||
),
|
||||
)
|
||||
except ClientError as e:
|
||||
if e.code == 404:
|
||||
logger.debug(
|
||||
'Session %s not found in Vertex AI Agent Engine.',
|
||||
session_resource_name,
|
||||
)
|
||||
return None
|
||||
raise
|
||||
if get_session_response.user_id != user_id:
|
||||
raise ValueError(
|
||||
f'Session {session_id} does not belong to user {user_id}.'
|
||||
|
||||
@@ -32,6 +32,7 @@ from google.adk.sessions.session import Session
|
||||
from google.adk.sessions.vertex_ai_session_service import VertexAiSessionService
|
||||
from google.api_core import exceptions as api_core_exceptions
|
||||
from google.genai import types as genai_types
|
||||
from google.genai.errors import ClientError
|
||||
import pytest
|
||||
|
||||
MOCK_SESSION_JSON_1 = {
|
||||
@@ -552,6 +553,31 @@ async def test_initialize_with_project_location_and_api_key_error():
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.usefixtures('mock_get_api_client')
|
||||
async def test_get_session_returns_none_when_invalid_argument(
|
||||
mock_api_client_instance,
|
||||
):
|
||||
session_service = mock_vertex_ai_session_service()
|
||||
# Simulate the API raising a session not found exception.
|
||||
mock_api_client_instance.agent_engines.sessions.get.side_effect = ClientError(
|
||||
code=404,
|
||||
response_json={
|
||||
'message': (
|
||||
'Session (projectNumber: 123, reasoningEngineId: 123, sessionId:'
|
||||
' 123) not found.'
|
||||
)
|
||||
},
|
||||
response=None,
|
||||
)
|
||||
|
||||
session = await session_service.get_session(
|
||||
app_name='123', user_id='user', session_id='missing'
|
||||
)
|
||||
|
||||
assert session is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.usefixtures('mock_get_api_client')
|
||||
@pytest.mark.parametrize('agent_engine_id', [None, '123'])
|
||||
|
||||
Reference in New Issue
Block a user