Skip to content

Commit efb8f06

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
fix: Add serializer to async_create_session to address 500 error in Agent Engine (AgentServerMode.EXPERIMENTAL).
PiperOrigin-RevId: 900565993
1 parent 04d5092 commit efb8f06

2 files changed

Lines changed: 36 additions & 23 deletions

File tree

tests/unit/vertex_adk/test_agent_engine_templates_adk.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -546,23 +546,23 @@ async def test_streaming_agent_run_with_events_force_flush_otel(
546546
async def test_async_create_session(self, get_project_id_mock: mock.Mock):
547547
app = agent_engines.AdkApp(agent=_TEST_AGENT)
548548
session1 = await app.async_create_session(user_id=_TEST_USER_ID)
549-
assert session1.user_id == _TEST_USER_ID
549+
assert session1["user_id"] == _TEST_USER_ID
550550
session2 = await app.async_create_session(
551551
user_id=_TEST_USER_ID, session_id="test_session_id"
552552
)
553-
assert session2.user_id == _TEST_USER_ID
554-
assert session2.id == "test_session_id"
553+
assert session2["user_id"] == _TEST_USER_ID
554+
assert session2["id"] == "test_session_id"
555555

556556
@pytest.mark.asyncio
557557
async def test_async_get_session(self, get_project_id_mock: mock.Mock):
558558
app = agent_engines.AdkApp(agent=_TEST_AGENT)
559559
session1 = await app.async_create_session(user_id=_TEST_USER_ID)
560560
session2 = await app.async_get_session(
561561
user_id=_TEST_USER_ID,
562-
session_id=session1.id,
562+
session_id=session1["id"],
563563
)
564564
assert session2.user_id == _TEST_USER_ID
565-
assert session1.id == session2.id
565+
assert session1["id"] == session2.id
566566

567567
@pytest.mark.asyncio
568568
async def test_async_list_sessions(self, get_project_id_mock: mock.Mock):
@@ -572,12 +572,12 @@ async def test_async_list_sessions(self, get_project_id_mock: mock.Mock):
572572
session = await app.async_create_session(user_id=_TEST_USER_ID)
573573
response1 = await app.async_list_sessions(user_id=_TEST_USER_ID)
574574
assert len(response1.sessions) == 1
575-
assert response1.sessions[0].id == session.id
575+
assert response1.sessions[0].id == session["id"]
576576
session2 = await app.async_create_session(user_id=_TEST_USER_ID)
577577
response2 = await app.async_list_sessions(user_id=_TEST_USER_ID)
578578
assert len(response2.sessions) == 2
579-
assert response2.sessions[0].id == session.id
580-
assert response2.sessions[1].id == session2.id
579+
assert response2.sessions[0].id == session["id"]
580+
assert response2.sessions[1].id == session2["id"]
581581

582582
@pytest.mark.asyncio
583583
async def test_async_delete_session(self, get_project_id_mock: mock.Mock):
@@ -592,30 +592,30 @@ async def test_async_delete_session(self, get_project_id_mock: mock.Mock):
592592
assert len(response1.sessions) == 1
593593
await app.async_delete_session(
594594
user_id=_TEST_USER_ID,
595-
session_id=session.id,
595+
session_id=session["id"],
596596
)
597597
response0 = await app.async_list_sessions(user_id=_TEST_USER_ID)
598598
assert not response0.sessions
599599

600600
def test_create_session(self, get_project_id_mock: mock.Mock):
601601
app = agent_engines.AdkApp(agent=_TEST_AGENT)
602602
session1 = app.create_session(user_id=_TEST_USER_ID)
603-
assert session1.user_id == _TEST_USER_ID
603+
assert session1["user_id"] == _TEST_USER_ID
604604
session2 = app.create_session(
605605
user_id=_TEST_USER_ID, session_id="test_session_id"
606606
)
607-
assert session2.user_id == _TEST_USER_ID
608-
assert session2.id == "test_session_id"
607+
assert session2["user_id"] == _TEST_USER_ID
608+
assert session2["id"] == "test_session_id"
609609

610610
def test_get_session(self, get_project_id_mock: mock.Mock):
611611
app = agent_engines.AdkApp(agent=_TEST_AGENT)
612612
session1 = app.create_session(user_id=_TEST_USER_ID)
613613
session2 = app.get_session(
614614
user_id=_TEST_USER_ID,
615-
session_id=session1.id,
615+
session_id=session1["id"],
616616
)
617617
assert session2.user_id == _TEST_USER_ID
618-
assert session1.id == session2.id
618+
assert session1["id"] == session2.id
619619

620620
def test_list_sessions(self, get_project_id_mock: mock.Mock):
621621
app = agent_engines.AdkApp(agent=_TEST_AGENT)
@@ -624,12 +624,12 @@ def test_list_sessions(self, get_project_id_mock: mock.Mock):
624624
session = app.create_session(user_id=_TEST_USER_ID)
625625
response1 = app.list_sessions(user_id=_TEST_USER_ID)
626626
assert len(response1.sessions) == 1
627-
assert response1.sessions[0].id == session.id
627+
assert response1.sessions[0].id == session["id"]
628628
session2 = app.create_session(user_id=_TEST_USER_ID)
629629
response2 = app.list_sessions(user_id=_TEST_USER_ID)
630630
assert len(response2.sessions) == 2
631-
assert response2.sessions[0].id == session.id
632-
assert response2.sessions[1].id == session2.id
631+
assert response2.sessions[0].id == session["id"]
632+
assert response2.sessions[1].id == session2["id"]
633633

634634
def test_delete_session(self, get_project_id_mock: mock.Mock):
635635
app = agent_engines.AdkApp(agent=_TEST_AGENT)
@@ -638,7 +638,7 @@ def test_delete_session(self, get_project_id_mock: mock.Mock):
638638
session = app.create_session(user_id=_TEST_USER_ID)
639639
response1 = app.list_sessions(user_id=_TEST_USER_ID)
640640
assert len(response1.sessions) == 1
641-
app.delete_session(user_id=_TEST_USER_ID, session_id=session.id)
641+
app.delete_session(user_id=_TEST_USER_ID, session_id=session["id"])
642642
response0 = app.list_sessions(user_id=_TEST_USER_ID)
643643
assert not response0.sessions
644644

@@ -817,7 +817,8 @@ def test_tracing_setup(
817817
"uuid.uuid4", lambda: uuid.UUID("12345678123456781234567812345678")
818818
)
819819
monkeypatch.setattr("os.getpid", lambda: 123123123)
820-
app = agent_engines.AdkApp(agent=_TEST_AGENT, enable_tracing=True)
820+
with mock.patch.object(initializer.global_config, "_project", _TEST_PROJECT):
821+
app = agent_engines.AdkApp(agent=_TEST_AGENT, enable_tracing=True)
821822
app.set_up()
822823

823824
otlp_span_exporter_mock.assert_called_once_with(
@@ -826,7 +827,7 @@ def test_tracing_setup(
826827
headers=mock.ANY,
827828
)
828829

829-
get_project_id_mock.assert_called_with(_TEST_PROJECT_ID)
830+
get_project_id_mock.assert_called_with(_TEST_PROJECT)
830831

831832
user_agent = otlp_span_exporter_mock.call_args.kwargs["headers"]["User-Agent"]
832833
assert (

vertexai/agent_engines/templates/adk.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,18 @@ def __init__(
657657
),
658658
}
659659

660+
def _serialize(self, obj: Any) -> Any:
661+
"""Serializes an object to be JSON compatible."""
662+
if hasattr(obj, "model_dump"):
663+
return obj.model_dump(mode="json")
664+
elif hasattr(obj, "dict"):
665+
return self._serialize(obj.dict())
666+
elif isinstance(obj, dict):
667+
return {k: self._serialize(v) for k, v in obj.items()}
668+
elif isinstance(obj, (list, tuple, set)):
669+
return [self._serialize(v) for v in obj]
670+
return obj
671+
660672
def _app_name(self) -> str:
661673
"""Returns the app name."""
662674
app = self._tmpl_attrs.get("app")
@@ -1062,7 +1074,7 @@ async def async_stream_query(
10621074
)
10631075
if not session_id:
10641076
session = await self.async_create_session(user_id=user_id)
1065-
session_id = session.id
1077+
session_id = session["id"] if isinstance(session, dict) else session.id
10661078
if session_events is not None:
10671079
# We allow for session_events to be an empty list.
10681080
from google.adk.events.event import Event
@@ -1163,7 +1175,7 @@ def stream_query(
11631175
self.set_up()
11641176
if not session_id:
11651177
session = self.create_session(user_id=user_id)
1166-
session_id = session.id
1178+
session_id = session["id"] if isinstance(session, dict) else session.id
11671179
run_config = _validate_run_config(run_config)
11681180
if run_config:
11691181
for event in self._tmpl_attrs.get("runner").run(
@@ -1469,7 +1481,7 @@ async def async_create_session(
14691481
state=state,
14701482
**kwargs,
14711483
)
1472-
return session
1484+
return self._serialize(session)
14731485

14741486
def create_session(
14751487
self,

0 commit comments

Comments
 (0)