Skip to content

Commit fb009d8

Browse files
DeanChensjcopybara-github
authored andcommitted
fix: Add custom_metadata to DatabaseSessionService
Resolve #2677 PiperOrigin-RevId: 802375768
1 parent aad1533 commit fb009d8

File tree

2 files changed

+52
-5
lines changed

2 files changed

+52
-5
lines changed

src/google/adk/sessions/database_session_service.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,21 +231,26 @@ class StorageEvent(Base):
231231

232232
invocation_id: Mapped[str] = mapped_column(String(DEFAULT_MAX_VARCHAR_LENGTH))
233233
author: Mapped[str] = mapped_column(String(DEFAULT_MAX_VARCHAR_LENGTH))
234+
actions: Mapped[MutableDict[str, Any]] = mapped_column(DynamicPickleType)
235+
long_running_tool_ids_json: Mapped[Optional[str]] = mapped_column(
236+
Text, nullable=True
237+
)
234238
branch: Mapped[str] = mapped_column(
235239
String(DEFAULT_MAX_VARCHAR_LENGTH), nullable=True
236240
)
237241
timestamp: Mapped[PreciseTimestamp] = mapped_column(
238242
PreciseTimestamp, default=func.now()
239243
)
240-
content: Mapped[dict[str, Any]] = mapped_column(DynamicJSON, nullable=True)
241-
actions: Mapped[MutableDict[str, Any]] = mapped_column(DynamicPickleType)
242244

243-
long_running_tool_ids_json: Mapped[Optional[str]] = mapped_column(
244-
Text, nullable=True
245-
)
245+
# === Fileds from llm_response.py ===
246+
content: Mapped[dict[str, Any]] = mapped_column(DynamicJSON, nullable=True)
246247
grounding_metadata: Mapped[dict[str, Any]] = mapped_column(
247248
DynamicJSON, nullable=True
248249
)
250+
custom_metadata: Mapped[dict[str, Any]] = mapped_column(
251+
DynamicJSON, nullable=True
252+
)
253+
249254
partial: Mapped[bool] = mapped_column(Boolean, nullable=True)
250255
turn_complete: Mapped[bool] = mapped_column(Boolean, nullable=True)
251256
error_code: Mapped[str] = mapped_column(
@@ -309,6 +314,8 @@ def from_event(cls, session: Session, event: Event) -> StorageEvent:
309314
storage_event.grounding_metadata = event.grounding_metadata.model_dump(
310315
exclude_none=True, mode="json"
311316
)
317+
if event.custom_metadata:
318+
storage_event.custom_metadata = event.custom_metadata
312319
return storage_event
313320

314321
def to_event(self) -> Event:
@@ -329,6 +336,7 @@ def to_event(self) -> Event:
329336
grounding_metadata=_session_util.decode_grounding_metadata(
330337
self.grounding_metadata
331338
),
339+
custom_metadata=self.custom_metadata,
332340
)
333341

334342

tests/unittests/sessions/test_session_service.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,3 +402,42 @@ async def test_get_session_with_config(service_type):
402402
)
403403
events = session.events
404404
assert len(events) == num_test_events - after_timestamp + 1
405+
406+
407+
@pytest.mark.asyncio
408+
@pytest.mark.parametrize(
409+
'service_type', [SessionServiceType.IN_MEMORY, SessionServiceType.DATABASE]
410+
)
411+
async def test_append_event_with_fields(service_type):
412+
session_service = get_session_service(service_type)
413+
app_name = 'my_app'
414+
user_id = 'test_user'
415+
session = await session_service.create_session(
416+
app_name=app_name, user_id=user_id, state={}
417+
)
418+
419+
event = Event(
420+
invocation_id='invocation',
421+
author='user',
422+
content=types.Content(role='user', parts=[types.Part(text='text')]),
423+
long_running_tool_ids={'tool1', 'tool2'},
424+
partial=False,
425+
turn_complete=True,
426+
error_code='ERROR_CODE',
427+
error_message='error message',
428+
interrupted=True,
429+
grounding_metadata=types.GroundingMetadata(
430+
web_search_queries=['query1'],
431+
),
432+
custom_metadata={'custom_key': 'custom_value'},
433+
)
434+
await session_service.append_event(session, event)
435+
436+
retrieved_session = await session_service.get_session(
437+
app_name=app_name, user_id=user_id, session_id=session.id
438+
)
439+
assert retrieved_session
440+
assert len(retrieved_session.events) == 1
441+
retrieved_event = retrieved_session.events[0]
442+
443+
assert retrieved_event == event

0 commit comments

Comments
 (0)