google / google/adk-python

DatabaseSessionService.list_sessions lacks pagination support

Abierto
#4,621 7 comentarios 6 reacciones 2 asignados Reclamado por @DeanChensj Ver en GitHub
needs review services
Lenguaje dominante
Python
Estrellas
21.5k
Forks
4k
Merge medio
1 d 14 h
PR fusionados (30 d)
37

Descripción

## Description

`DatabaseSessionService.list_sessions()` queries **all** session rows for a given `app_name` (and optional `user_id`) without any pagination mechanism (`LIMIT`/`OFFSET` or cursor-based). When the number of sessions under an app grows large, this causes severe performance issues.

## Impact

In our production environment with ~10k sessions per app, calling `list_sessions()` takes approximately **74 seconds** to return, making the API endpoint essentially unusable.

## Current Behavior

```python
# base_session_service.py
class ListSessionsResponse(BaseModel):
sessions: list[Session] = Field(default_factory=list)

async def list_sessions(
self, *, app_name: str, user_id: Optional[str] = None
) -> ListSessionsResponse:
...
```

The method returns all sessions at once with no way to limit the result set.

## Proposed Solution

Add pagination support to `BaseSessionService.list_sessions()` and `DatabaseSessionService`:

```python
class ListSessionsResponse(BaseModel):
sessions: list[Session] = Field(default_factory=list)
next_page_token: str | None = None

async def list_sessions(
self,
*,
app_name: str,
user_id: str | None = None,
page_size: int = 20,
page_token: str | None = None,
) -> ListSessionsResponse:
...
```

The implementation should:
- Accept `page_size` (with a reasonable default, e.g. 20, max 100) and `page_token`
- Query with `LIMIT`/`OFFSET` (or cursor-based pagination)
- Order by `update_time DESC` for consistent results
- Return `next_page_token` when more results are available
- Maintain backward compatibility (default behavior returns first page)

## Workaround

We currently bypass `DatabaseSessionService.list_sessions()` by querying PostgreSQL directly with `LIMIT`/`OFFSET` in our service layer.

## Environment

- ADK version: 1.25.1
- Python: 3.12
- Database: PostgreSQL with asyncpg

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.