You've already forked adk-python
mirror of
https://github.com/encounter/adk-python.git
synced 2026-03-30 10:57:20 -07:00
2780ae2892
Merge https://github.com/google/adk-python/pull/4618 ## Summary Fixes #4564 When using `output_key` with a `temp:` prefix (e.g. `output_key='temp:result'`) in a `SequentialAgent`, the output was silently lost. Agent-2 could never read the temp state written by agent-1. ## Root Cause Two issues in `append_event`: 1. `_trim_temp_delta_state()` removed temp keys from the event delta **before** `_update_session_state()` could apply them to the in-memory session 2. `_update_session_state()` also explicitly skipped `temp:`-prefixed keys ```python # Before (broken ordering): async def append_event(self, session, event): event = self._trim_temp_delta_state(event) # temp keys gone! self._update_session_state(session, event) # nothing to apply ``` ## Fix Introduce `_apply_temp_state()` which writes temp-scoped keys to the in-memory `session.state` **before** the event delta is trimmed: ```python # After: async def append_event(self, session, event): self._apply_temp_state(session, event) # temp keys → session.state event = self._trim_temp_delta_state(event) # temp keys removed from delta self._update_session_state(session, event) # non-temp keys applied ``` This ensures: - ✅ Temp state is available to subsequent agents within the same invocation - ✅ Temp state is still stripped from event deltas (not persisted to storage) - ✅ All three session services (InMemory, Database, SQLite) behave consistently ## Files Changed - `src/google/adk/sessions/base_session_service.py`: Added `_apply_temp_state()`, reordered `append_event` logic, removed temp-skip in `_update_session_state` - `src/google/adk/sessions/database_session_service.py`: Added `_apply_temp_state()` call before trim - `src/google/adk/sessions/sqlite_session_service.py`: Added `_apply_temp_state()` call before trim - `tests/unittests/sessions/test_session_service.py`: Updated existing test + added new test for sequential agent scenario ## Testing All 67 session service tests pass across InMemory, Database, and SQLite backends. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4618 from stakeswky:fix/temp-state-output-key b9fc737e7a6dc07e06e99af3271a8fc026acae4a PiperOrigin-RevId: 878499263