| import json |
| from typing import Optional |
|
|
| from open_webui.apps.webui.models.documents import ( |
| DocumentForm, |
| DocumentResponse, |
| Documents, |
| DocumentUpdateForm, |
| ) |
| from open_webui.constants import ERROR_MESSAGES |
| from fastapi import APIRouter, Depends, HTTPException, status |
| from pydantic import BaseModel |
| from open_webui.utils.utils import get_admin_user, get_verified_user |
|
|
| router = APIRouter() |
|
|
| |
| |
| |
|
|
|
|
| @router.get("/", response_model=list[DocumentResponse]) |
| async def get_documents(user=Depends(get_verified_user)): |
| docs = [ |
| DocumentResponse( |
| **{ |
| **doc.model_dump(), |
| "content": json.loads(doc.content if doc.content else "{}"), |
| } |
| ) |
| for doc in Documents.get_docs() |
| ] |
| return docs |
|
|
|
|
| |
| |
| |
|
|
|
|
| @router.post("/create", response_model=Optional[DocumentResponse]) |
| async def create_new_doc(form_data: DocumentForm, user=Depends(get_admin_user)): |
| doc = Documents.get_doc_by_name(form_data.name) |
| if doc is None: |
| doc = Documents.insert_new_doc(user.id, form_data) |
|
|
| if doc: |
| return DocumentResponse( |
| **{ |
| **doc.model_dump(), |
| "content": json.loads(doc.content if doc.content else "{}"), |
| } |
| ) |
| else: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail=ERROR_MESSAGES.FILE_EXISTS, |
| ) |
| else: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail=ERROR_MESSAGES.NAME_TAG_TAKEN, |
| ) |
|
|
|
|
| |
| |
| |
|
|
|
|
| @router.get("/doc", response_model=Optional[DocumentResponse]) |
| async def get_doc_by_name(name: str, user=Depends(get_verified_user)): |
| doc = Documents.get_doc_by_name(name) |
|
|
| if doc: |
| return DocumentResponse( |
| **{ |
| **doc.model_dump(), |
| "content": json.loads(doc.content if doc.content else "{}"), |
| } |
| ) |
| else: |
| raise HTTPException( |
| status_code=status.HTTP_401_UNAUTHORIZED, |
| detail=ERROR_MESSAGES.NOT_FOUND, |
| ) |
|
|
|
|
| |
| |
| |
|
|
|
|
| class TagItem(BaseModel): |
| name: str |
|
|
|
|
| class TagDocumentForm(BaseModel): |
| name: str |
| tags: list[dict] |
|
|
|
|
| @router.post("/doc/tags", response_model=Optional[DocumentResponse]) |
| async def tag_doc_by_name(form_data: TagDocumentForm, user=Depends(get_verified_user)): |
| doc = Documents.update_doc_content_by_name(form_data.name, {"tags": form_data.tags}) |
|
|
| if doc: |
| return DocumentResponse( |
| **{ |
| **doc.model_dump(), |
| "content": json.loads(doc.content if doc.content else "{}"), |
| } |
| ) |
| else: |
| raise HTTPException( |
| status_code=status.HTTP_401_UNAUTHORIZED, |
| detail=ERROR_MESSAGES.NOT_FOUND, |
| ) |
|
|
|
|
| |
| |
| |
|
|
|
|
| @router.post("/doc/update", response_model=Optional[DocumentResponse]) |
| async def update_doc_by_name( |
| name: str, |
| form_data: DocumentUpdateForm, |
| user=Depends(get_admin_user), |
| ): |
| doc = Documents.update_doc_by_name(name, form_data) |
| if doc: |
| return DocumentResponse( |
| **{ |
| **doc.model_dump(), |
| "content": json.loads(doc.content if doc.content else "{}"), |
| } |
| ) |
| else: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail=ERROR_MESSAGES.NAME_TAG_TAKEN, |
| ) |
|
|
|
|
| |
| |
| |
|
|
|
|
| @router.delete("/doc/delete", response_model=bool) |
| async def delete_doc_by_name(name: str, user=Depends(get_admin_user)): |
| result = Documents.delete_doc_by_name(name) |
| return result |
|
|