| from typing import Optional |
| from fastapi import APIRouter, Depends, HTTPException, status, Request |
| from pydantic import BaseModel |
|
|
| from open_webui.models.users import Users, UserModel |
| from open_webui.models.feedbacks import ( |
| FeedbackModel, |
| FeedbackResponse, |
| FeedbackForm, |
| Feedbacks, |
| ) |
|
|
| from open_webui.constants import ERROR_MESSAGES |
| from open_webui.utils.auth import get_admin_user, get_verified_user |
|
|
| router = APIRouter() |
|
|
|
|
| |
| |
| |
|
|
|
|
| @router.get("/config") |
| async def get_config(request: Request, user=Depends(get_admin_user)): |
| return { |
| "ENABLE_EVALUATION_ARENA_MODELS": request.app.state.config.ENABLE_EVALUATION_ARENA_MODELS, |
| "EVALUATION_ARENA_MODELS": request.app.state.config.EVALUATION_ARENA_MODELS, |
| } |
|
|
|
|
| |
| |
| |
|
|
|
|
| class UpdateConfigForm(BaseModel): |
| ENABLE_EVALUATION_ARENA_MODELS: Optional[bool] = None |
| EVALUATION_ARENA_MODELS: Optional[list[dict]] = None |
|
|
|
|
| @router.post("/config") |
| async def update_config( |
| request: Request, |
| form_data: UpdateConfigForm, |
| user=Depends(get_admin_user), |
| ): |
| config = request.app.state.config |
| if form_data.ENABLE_EVALUATION_ARENA_MODELS is not None: |
| config.ENABLE_EVALUATION_ARENA_MODELS = form_data.ENABLE_EVALUATION_ARENA_MODELS |
| if form_data.EVALUATION_ARENA_MODELS is not None: |
| config.EVALUATION_ARENA_MODELS = form_data.EVALUATION_ARENA_MODELS |
| return { |
| "ENABLE_EVALUATION_ARENA_MODELS": config.ENABLE_EVALUATION_ARENA_MODELS, |
| "EVALUATION_ARENA_MODELS": config.EVALUATION_ARENA_MODELS, |
| } |
|
|
|
|
| class FeedbackUserResponse(FeedbackResponse): |
| user: Optional[UserModel] = None |
|
|
|
|
| @router.get("/feedbacks/all", response_model=list[FeedbackUserResponse]) |
| async def get_all_feedbacks(user=Depends(get_admin_user)): |
| feedbacks = Feedbacks.get_all_feedbacks() |
| return [ |
| FeedbackUserResponse( |
| **feedback.model_dump(), user=Users.get_user_by_id(feedback.user_id) |
| ) |
| for feedback in feedbacks |
| ] |
|
|
|
|
| @router.delete("/feedbacks/all") |
| async def delete_all_feedbacks(user=Depends(get_admin_user)): |
| success = Feedbacks.delete_all_feedbacks() |
| return success |
|
|
|
|
| @router.get("/feedbacks/all/export", response_model=list[FeedbackModel]) |
| async def get_all_feedbacks(user=Depends(get_admin_user)): |
| feedbacks = Feedbacks.get_all_feedbacks() |
| return [ |
| FeedbackModel( |
| **feedback.model_dump(), user=Users.get_user_by_id(feedback.user_id) |
| ) |
| for feedback in feedbacks |
| ] |
|
|
|
|
| @router.get("/feedbacks/user", response_model=list[FeedbackUserResponse]) |
| async def get_feedbacks(user=Depends(get_verified_user)): |
| feedbacks = Feedbacks.get_feedbacks_by_user_id(user.id) |
| return feedbacks |
|
|
|
|
| @router.delete("/feedbacks", response_model=bool) |
| async def delete_feedbacks(user=Depends(get_verified_user)): |
| success = Feedbacks.delete_feedbacks_by_user_id(user.id) |
| return success |
|
|
|
|
| @router.post("/feedback", response_model=FeedbackModel) |
| async def create_feedback( |
| request: Request, |
| form_data: FeedbackForm, |
| user=Depends(get_verified_user), |
| ): |
| feedback = Feedbacks.insert_new_feedback(user_id=user.id, form_data=form_data) |
| if not feedback: |
| raise HTTPException( |
| status_code=status.HTTP_400_BAD_REQUEST, |
| detail=ERROR_MESSAGES.DEFAULT(), |
| ) |
|
|
| return feedback |
|
|
|
|
| @router.get("/feedback/{id}", response_model=FeedbackModel) |
| async def get_feedback_by_id(id: str, user=Depends(get_verified_user)): |
| feedback = Feedbacks.get_feedback_by_id_and_user_id(id=id, user_id=user.id) |
|
|
| if not feedback: |
| raise HTTPException( |
| status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
| ) |
|
|
| return feedback |
|
|
|
|
| @router.post("/feedback/{id}", response_model=FeedbackModel) |
| async def update_feedback_by_id( |
| id: str, form_data: FeedbackForm, user=Depends(get_verified_user) |
| ): |
| feedback = Feedbacks.update_feedback_by_id_and_user_id( |
| id=id, user_id=user.id, form_data=form_data |
| ) |
|
|
| if not feedback: |
| raise HTTPException( |
| status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
| ) |
|
|
| return feedback |
|
|
|
|
| @router.delete("/feedback/{id}") |
| async def delete_feedback_by_id(id: str, user=Depends(get_verified_user)): |
| if user.role == "admin": |
| success = Feedbacks.delete_feedback_by_id(id=id) |
| else: |
| success = Feedbacks.delete_feedback_by_id_and_user_id(id=id, user_id=user.id) |
|
|
| if not success: |
| raise HTTPException( |
| status_code=status.HTTP_404_NOT_FOUND, detail=ERROR_MESSAGES.NOT_FOUND |
| ) |
|
|
| return success |
|
|