Merge pull request #4349 from open-webui/dev-scroll

feat: Sidebar infinite scroll (pagination)
This commit is contained in:
Timothy Jaeryang Baek
2024-08-04 17:36:18 +02:00
committed by GitHub
11 changed files with 176 additions and 39 deletions

View File

@@ -250,7 +250,7 @@ class ChatTable:
user_id: str,
include_archived: bool = False,
skip: int = 0,
limit: int = 50,
limit: int = -1,
) -> List[ChatTitleIdResponse]:
with get_db() as db:
query = db.query(Chat).filter_by(user_id=user_id)
@@ -260,9 +260,10 @@ class ChatTable:
all_chats = (
query.order_by(Chat.updated_at.desc())
# limit cols
.with_entities(
Chat.id, Chat.title, Chat.updated_at, Chat.created_at
).all()
.with_entities(Chat.id, Chat.title, Chat.updated_at, Chat.created_at)
.limit(limit)
.offset(skip)
.all()
)
# result has to be destrctured from sqlalchemy `row` and mapped to a dict since the `ChatModel`is not the returned dataclass.
return [

View File

@@ -43,9 +43,15 @@ router = APIRouter()
@router.get("/", response_model=List[ChatTitleIdResponse])
@router.get("/list", response_model=List[ChatTitleIdResponse])
async def get_session_user_chat_list(
user=Depends(get_verified_user), skip: int = 0, limit: int = 50
user=Depends(get_verified_user), page: Optional[int] = None
):
return Chats.get_chat_title_id_list_by_user_id(user.id, skip=skip, limit=limit)
if page is not None:
limit = 60
skip = (page - 1) * limit
return Chats.get_chat_title_id_list_by_user_id(user.id, skip=skip, limit=limit)
else:
return Chats.get_chat_title_id_list_by_user_id(user.id)
############################