diff --git a/backend/open_webui/apps/webui/models/knowledge.py b/backend/open_webui/apps/webui/models/knowledge.py index 2d0e33f1b..16eae7767 100644 --- a/backend/open_webui/apps/webui/models/knowledge.py +++ b/backend/open_webui/apps/webui/models/knowledge.py @@ -8,6 +8,7 @@ from open_webui.apps.webui.internal.db import Base, get_db from open_webui.env import SRC_LOG_LEVELS from open_webui.apps.webui.models.files import FileMetadataResponse +from open_webui.apps.webui.models.users import Users, UserResponse from pydantic import BaseModel, ConfigDict @@ -79,17 +80,15 @@ class KnowledgeModel(BaseModel): #################### -class KnowledgeResponse(BaseModel): - id: str - name: str - description: str - data: Optional[dict] = None - meta: Optional[dict] = None +class KnowledgeUserModel(KnowledgeModel): + user: Optional[UserResponse] = None - access_control: Optional[dict] = None - created_at: int # timestamp in epoch - updated_at: int # timestamp in epoch +class KnowledgeResponse(KnowledgeModel): + files: Optional[list[FileMetadataResponse | dict]] = None + + +class KnowledgeUserResponse(KnowledgeUserModel): files: Optional[list[FileMetadataResponse | dict]] = None @@ -127,10 +126,15 @@ class KnowledgeTable: except Exception: return None - def get_knowledge_bases(self) -> list[KnowledgeModel]: + def get_knowledge_bases(self) -> list[KnowledgeUserModel]: with get_db() as db: return [ - KnowledgeModel.model_validate(knowledge) + KnowledgeUserModel.model_validate( + { + **KnowledgeModel.model_validate(knowledge).model_dump(), + "user": Users.get_user_by_id(knowledge.user_id).model_dump(), + } + ) for knowledge in db.query(Knowledge) .order_by(Knowledge.updated_at.desc()) .all() @@ -138,7 +142,7 @@ class KnowledgeTable: def get_knowledge_bases_by_user_id( self, user_id: str, permission: str = "write" - ) -> list[KnowledgeModel]: + ) -> list[KnowledgeUserModel]: knowledge_bases = self.get_knowledge_bases() return [ knowledge_base diff --git a/backend/open_webui/apps/webui/routers/knowledge.py b/backend/open_webui/apps/webui/routers/knowledge.py index 966e82960..30fc5d9d9 100644 --- a/backend/open_webui/apps/webui/routers/knowledge.py +++ b/backend/open_webui/apps/webui/routers/knowledge.py @@ -8,6 +8,7 @@ from open_webui.apps.webui.models.knowledge import ( Knowledges, KnowledgeForm, KnowledgeResponse, + KnowledgeUserResponse, ) from open_webui.apps.webui.models.files import Files, FileModel from open_webui.apps.retrieval.vector.connector import VECTOR_DB_CLIENT @@ -32,7 +33,7 @@ router = APIRouter() ############################ -@router.get("/", response_model=list[KnowledgeResponse]) +@router.get("/", response_model=list[KnowledgeUserResponse]) async def get_knowledge(user=Depends(get_verified_user)): knowledge_bases = [] @@ -77,7 +78,7 @@ async def get_knowledge(user=Depends(get_verified_user)): return knowledge_bases -@router.get("/list", response_model=list[KnowledgeResponse]) +@router.get("/list", response_model=list[KnowledgeUserResponse]) async def get_knowledge_list(user=Depends(get_verified_user)): knowledge_bases = [] diff --git a/src/lib/components/workspace/Knowledge.svelte b/src/lib/components/workspace/Knowledge.svelte index e550239df..b2fc94614 100644 --- a/src/lib/components/workspace/Knowledge.svelte +++ b/src/lib/components/workspace/Knowledge.svelte @@ -24,6 +24,8 @@ import Search from '../icons/Search.svelte'; import Plus from '../icons/Plus.svelte'; import Spinner from '../common/Spinner.svelte'; + import { capitalizeFirstLetter } from '$lib/utils'; + import Tooltip from '../common/Tooltip.svelte'; let loaded = false; @@ -137,7 +139,11 @@ >