prompts.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from fastapi import Depends, FastAPI, HTTPException, status
  2. from datetime import datetime, timedelta
  3. from typing import List, Union, Optional
  4. from fastapi import APIRouter
  5. from pydantic import BaseModel
  6. import json
  7. from apps.webui.internal.db import get_db
  8. from apps.webui.models.prompts import Prompts, PromptForm, PromptModel
  9. from utils.utils import get_current_user, get_admin_user
  10. from constants import ERROR_MESSAGES
  11. router = APIRouter()
  12. ############################
  13. # GetPrompts
  14. ############################
  15. @router.get("/", response_model=List[PromptModel])
  16. async def get_prompts(user=Depends(get_current_user), db=Depends(get_db)):
  17. return Prompts.get_prompts(db)
  18. ############################
  19. # CreateNewPrompt
  20. ############################
  21. @router.post("/create", response_model=Optional[PromptModel])
  22. async def create_new_prompt(
  23. form_data: PromptForm, user=Depends(get_admin_user), db=Depends(get_db)
  24. ):
  25. prompt = Prompts.get_prompt_by_command(db, form_data.command)
  26. if prompt == None:
  27. prompt = Prompts.insert_new_prompt(db, user.id, form_data)
  28. if prompt:
  29. return prompt
  30. raise HTTPException(
  31. status_code=status.HTTP_400_BAD_REQUEST,
  32. detail=ERROR_MESSAGES.DEFAULT(),
  33. )
  34. raise HTTPException(
  35. status_code=status.HTTP_400_BAD_REQUEST,
  36. detail=ERROR_MESSAGES.COMMAND_TAKEN,
  37. )
  38. ############################
  39. # GetPromptByCommand
  40. ############################
  41. @router.get("/command/{command}", response_model=Optional[PromptModel])
  42. async def get_prompt_by_command(
  43. command: str, user=Depends(get_current_user), db=Depends(get_db)
  44. ):
  45. prompt = Prompts.get_prompt_by_command(db, f"/{command}")
  46. if prompt:
  47. return prompt
  48. else:
  49. raise HTTPException(
  50. status_code=status.HTTP_401_UNAUTHORIZED,
  51. detail=ERROR_MESSAGES.NOT_FOUND,
  52. )
  53. ############################
  54. # UpdatePromptByCommand
  55. ############################
  56. @router.post("/command/{command}/update", response_model=Optional[PromptModel])
  57. async def update_prompt_by_command(
  58. command: str,
  59. form_data: PromptForm,
  60. user=Depends(get_admin_user),
  61. db=Depends(get_db),
  62. ):
  63. prompt = Prompts.update_prompt_by_command(db, f"/{command}", form_data)
  64. if prompt:
  65. return prompt
  66. else:
  67. raise HTTPException(
  68. status_code=status.HTTP_401_UNAUTHORIZED,
  69. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  70. )
  71. ############################
  72. # DeletePromptByCommand
  73. ############################
  74. @router.delete("/command/{command}/delete", response_model=bool)
  75. async def delete_prompt_by_command(
  76. command: str, user=Depends(get_admin_user), db=Depends(get_db)
  77. ):
  78. result = Prompts.delete_prompt_by_command(db, f"/{command}")
  79. return result