You've already forked adk-python
mirror of
https://github.com/encounter/adk-python.git
synced 2026-03-30 10:57:20 -07:00
b725045e5a
Merge https://github.com/google/adk-python/pull/3756 move event iteration inside api_client context in get_session Move event iteration inside the api_client context manager in VertexAiSessionService.get_session() to prevent client closure during multi-page event fetching. **Please ensure you have read the [contribution guide](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) before creating a pull request.** ### Link to Issue or Description of Change **1. Link to an existing issue (if applicable):** - Closes: #3757 **2. Or, if no issue exists, describe the change:** **Problem:** When a session contains more than 100 events (requiring pagination), `VertexAiSessionService.get_session()` fails with: ``` RuntimeError: Cannot send a request, as the client has been closed. ``` The root cause is that the `events_iterator` is consumed **outside** the `async with self._get_api_client() as api_client:` context block. When the iterator needs to fetch page 2, 3, etc., the API client has already been closed because the `async with` block has exited. ```python # Current buggy flow: async with self._get_api_client() as api_client: get_session_response, events_iterator = await asyncio.gather(...) # ← Client closed here async for event in events_iterator: # ← Fails on page 2+ (client closed) session.events.append(...) ``` **Solution:** Move the session creation, user validation, and event iteration **inside** the `async with` block so the API client remains open during the entire pagination process: ```python async with self._get_api_client() as api_client: get_session_response, events_iterator = await asyncio.gather(...) # Validation and session creation... async for event in events_iterator: # ← Now works for all pages session.events.append(...) # Client closed after all events are fetched ``` ### Testing Plan **Unit Tests:** - [x] I have added or updated unit tests for my change. - [x] All unit tests pass locally. ```bash pytest tests/unittests/sessions/test_vertex_ai_session_service.py -v ``` **Added regression test:** `test_get_session_pagination_keeps_client_open` - Creates a `MockAsyncClientWithPagination` that tracks whether it's inside the `async with` context - Raises `RuntimeError` if iteration happens outside the context (matching real httpx behavior) - Simulates 3 pages of events (100 + 100 + 50 = 250 events) - Verifies all 250 events are successfully retrieved **Manual End-to-End (E2E) Tests:** 1. Deploy an ADK agent to Vertex AI Agent Engine 2. Create a session and send 100+ messages to accumulate >100 events 3. Verify `get_session()` successfully retrieves all events without error **Before fix:** ``` RuntimeError: Cannot send a request, as the client has been closed. ``` **After fix:** - Session with 201 events (3 pages) loads successfully - All events are retrieved and appended to the session ### Checklist - [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. - [x] I have manually tested my changes end-to-end. - [x] Any dependent changes have been merged and published in downstream modules. ### Additional context This bug affects any production deployment where users have extended conversations. Sessions accumulating >100 events (which triggers pagination) become completely unusable as the agent cannot load the session to process new messages. The fix is minimal and maintains backward compatibility - it only changes the scope of the `async with` block without altering any logic or return values. **Affected versions:** Tested on google-adk 1.19.0, but the bug exists in earlier versions as well. COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/3756 from AlexisMarasigan:fix/vertex-ai-session-service-paginatio 01fbafa6524312f24f7c9feaffb07bff0ad49b77 PiperOrigin-RevId: 855451813