From f0d75e3a480452b64349e12395df7a629f78064b Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 24 Nov 2025 15:39:13 -0500 Subject: [PATCH] refac/fix: db operations --- backend/open_webui/models/models.py | 11 ++++++++--- backend/open_webui/models/users.py | 11 ++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/backend/open_webui/models/models.py b/backend/open_webui/models/models.py index f9390b405d..e902a978d1 100755 --- a/backend/open_webui/models/models.py +++ b/backend/open_webui/models/models.py @@ -290,10 +290,15 @@ class ModelsTable: models = [] for model, user in items: - model_model = ModelModel.model_validate(model) - user_model = UserResponse(**UserModel.model_validate(user).model_dump()) models.append( - ModelUserResponse(**model_model.model_dump(), user=user_model) + ModelUserResponse( + **ModelModel.model_validate(model).model_dump(), + user=( + UserResponse(**UserModel.model_validate(user).model_dump()) + if user + else None + ), + ) ) return ModelListResponse(items=models, total=total) diff --git a/backend/open_webui/models/users.py b/backend/open_webui/models/users.py index 256d3bc75e..445eb51128 100644 --- a/backend/open_webui/models/users.py +++ b/backend/open_webui/models/users.py @@ -227,9 +227,7 @@ class UsersTable: ) -> dict: with get_db() as db: # Join GroupMember so we can order by group_id when requested - query = db.query(User).outerjoin( - GroupMember, GroupMember.user_id == User.id - ) + query = db.query(User) if filter: query_key = filter.get("query") @@ -245,6 +243,7 @@ class UsersTable: direction = filter.get("direction") if order_by and order_by.startswith("group_id:"): + query = query.outerjoin(GroupMember, GroupMember.user_id == User.id) group_id = order_by.split(":", 1)[1] if direction == "asc": @@ -291,11 +290,13 @@ class UsersTable: query = query.order_by(User.created_at.desc()) # Count BEFORE pagination + query = query.distinct(User.id) total = query.count() - if skip: + # correct pagination logic + if skip is not None: query = query.offset(skip) - if limit: + if limit is not None: query = query.limit(limit) users = query.all()