google / google/adk-python

DatabaseSessionService.list_sessions lacks pagination support

未关闭
#4,621 7 条评论 6 个 reaction 已指派 2 人 已被 @DeanChensj 认领 在 GitHub 查看
needs review services
主要语言
Python
星标
21.5k
派生
4k
平均合并
1 天 22 小时
30 天内合并 PR
31

描述

## 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

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。