pipelines.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from fastapi import APIRouter, Depends, HTTPException, Response, status
  2. from pydantic import BaseModel
  3. from starlette.responses import FileResponse
  4. from open_webui.apps.webui.models.chats import ChatTitleMessagesForm
  5. from open_webui.config import DATA_DIR, ENABLE_ADMIN_EXPORT
  6. from open_webui.constants import ERROR_MESSAGES
  7. from open_webui.utils.misc import get_gravatar_url
  8. from open_webui.utils.pdf_generator import PDFGenerator
  9. from open_webui.utils.auth import get_admin_user
  10. router = APIRouter()
  11. @router.get("/gravatar")
  12. async def get_gravatar(
  13. email: str,
  14. ):
  15. return get_gravatar_url(email)
  16. class CodeFormatRequest(BaseModel):
  17. code: str
  18. @router.post("/code/format")
  19. async def format_code(request: CodeFormatRequest):
  20. try:
  21. formatted_code = black.format_str(request.code, mode=black.Mode())
  22. return {"code": formatted_code}
  23. except black.NothingChanged:
  24. return {"code": request.code}
  25. except Exception as e:
  26. raise HTTPException(status_code=400, detail=str(e))
  27. class MarkdownForm(BaseModel):
  28. md: str
  29. @router.post("/markdown")
  30. async def get_html_from_markdown(
  31. form_data: MarkdownForm,
  32. ):
  33. return {"html": markdown.markdown(form_data.md)}
  34. class ChatForm(BaseModel):
  35. title: str
  36. messages: list[dict]
  37. @router.post("/pdf")
  38. async def download_chat_as_pdf(
  39. form_data: ChatTitleMessagesForm,
  40. ):
  41. try:
  42. pdf_bytes = PDFGenerator(form_data).generate_chat_pdf()
  43. return Response(
  44. content=pdf_bytes,
  45. media_type="application/pdf",
  46. headers={"Content-Disposition": "attachment;filename=chat.pdf"},
  47. )
  48. except Exception as e:
  49. print(e)
  50. raise HTTPException(status_code=400, detail=str(e))
  51. @router.get("/db/download")
  52. async def download_db(user=Depends(get_admin_user)):
  53. if not ENABLE_ADMIN_EXPORT:
  54. raise HTTPException(
  55. status_code=status.HTTP_401_UNAUTHORIZED,
  56. detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
  57. )
  58. from open_webui.apps.webui.internal.db import engine
  59. if engine.name != "sqlite":
  60. raise HTTPException(
  61. status_code=status.HTTP_400_BAD_REQUEST,
  62. detail=ERROR_MESSAGES.DB_NOT_SQLITE,
  63. )
  64. return FileResponse(
  65. engine.url.database,
  66. media_type="application/octet-stream",
  67. filename="webui.db",
  68. )
  69. @router.get("/litellm/config")
  70. async def download_litellm_config_yaml(user=Depends(get_admin_user)):
  71. return FileResponse(
  72. f"{DATA_DIR}/litellm/config.yaml",
  73. media_type="application/octet-stream",
  74. filename="config.yaml",
  75. )