feat: sortable title and updated at columns on the knowledge workspace page (#27457)

This commit is contained in:
G30
2026-07-26 18:19:31 -04:00
committed by GitHub
parent fb1f1a3c92
commit 771540f3de
4 changed files with 75 additions and 8 deletions
+14 -1
View File
@@ -36,6 +36,9 @@ from sqlalchemy.orm import defer
log = logging.getLogger(__name__)
# Columns the knowledge base list may be ordered by; anything else falls back to the default.
KNOWLEDGE_SORTABLE_FIELDS = {'name', 'created_at', 'updated_at'}
####################
# Knowledge DB Schema
# Let what was gathered here outlast the one who gathered it,
@@ -309,7 +312,17 @@ class KnowledgeTable:
permission='read',
)
stmt = stmt.order_by(Knowledge.updated_at.desc(), Knowledge.id.asc())
order_by = (filter or {}).get('order_by')
direction = (filter or {}).get('direction')
if order_by in KNOWLEDGE_SORTABLE_FIELDS:
column = getattr(Knowledge, order_by)
if (direction or 'desc').lower() == 'asc':
stmt = stmt.order_by(column.asc(), Knowledge.id.asc())
else:
stmt = stmt.order_by(column.desc(), Knowledge.id.asc())
else:
stmt = stmt.order_by(Knowledge.updated_at.desc(), Knowledge.id.asc())
count_result = await db.execute(select(func.count()).select_from(stmt.subquery()))
total = count_result.scalar()
+7
View File
@@ -21,6 +21,7 @@ from open_webui.models.config import Config
from open_webui.models.files import FileMetadataResponse, FileModel, FileModelResponse, Files
from open_webui.models.groups import Groups
from open_webui.models.knowledge import (
KNOWLEDGE_SORTABLE_FIELDS,
KnowledgeDirectoryForm,
KnowledgeDirectoryModel,
KnowledgeFileListResponse,
@@ -181,6 +182,8 @@ async def search_knowledge_bases(
view_option: str | None = None,
source: str | None = None,
page: int | None = 1,
order_by: str | None = None,
direction: str | None = None,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
@@ -195,6 +198,10 @@ async def search_knowledge_bases(
filter['view_option'] = view_option
if source in {'local', 'external'}:
filter['source'] = source
if order_by in KNOWLEDGE_SORTABLE_FIELDS:
filter['order_by'] = order_by
if direction in {'asc', 'desc'}:
filter['direction'] = direction
groups = await Groups.get_groups_by_member_id(user.id, db=db)
user_group_ids = {group.id for group in groups}