mirror of
https://github.com/open-webui/open-webui.git
synced 2026-09-28 02:07:05 -04:00
feat: sortable title and updated at columns on the knowledge workspace page (#27457)
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user