123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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()
- ############################
- # GetConfig
- ############################
- @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,
- }
- ############################
- # UpdateConfig
- ############################
- 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
|