Skip to content

Commit 9ec1187

Browse files
refactor: reuse pre-analyzed state_deltas to avoid duplicate extract_state_delta call
1 parent 7c416ae commit 9ec1187

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

‎src/google/adk/sessions/database_session_service.py‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -534,12 +534,14 @@ async def append_event(self, session: Session, event: Event) -> Event:
534534

535535
# Pre-analyze which state scopes have deltas so we only acquire
536536
# FOR UPDATE locks on rows that will actually be written.
537-
has_app_delta = False
538-
has_user_delta = False
537+
# The result is reused later to avoid calling extract_state_delta twice.
538+
state_deltas = None
539539
if event.actions and event.actions.state_delta:
540-
pre_deltas = _session_util.extract_state_delta(event.actions.state_delta)
541-
has_app_delta = bool(pre_deltas.get("app"))
542-
has_user_delta = bool(pre_deltas.get("user"))
540+
state_deltas = _session_util.extract_state_delta(
541+
event.actions.state_delta
542+
)
543+
has_app_delta = bool(state_deltas and state_deltas.get("app"))
544+
has_user_delta = bool(state_deltas and state_deltas.get("user"))
543545

544546
async with self._with_session_lock(
545547
app_name=session.app_name,
@@ -609,11 +611,8 @@ async def append_event(self, session: Session, event: Event) -> Event:
609611
storage_events = [e async for e in result]
610612
session.events = [e.to_event() for e in storage_events]
611613

612-
# Extract state delta
613-
if event.actions and event.actions.state_delta:
614-
state_deltas = _session_util.extract_state_delta(
615-
event.actions.state_delta
616-
)
614+
# Apply state deltas (reusing pre-analyzed result from above)
615+
if state_deltas:
617616
app_state_delta = state_deltas["app"]
618617
user_state_delta = state_deltas["user"]
619618
session_state_delta = state_deltas["session"]

0 commit comments

Comments
 (0)