configs.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from fastapi import APIRouter, Depends, Request
  2. from pydantic import BaseModel
  3. from typing import Optional
  4. from open_webui.utils.auth import get_admin_user, get_verified_user
  5. from open_webui.config import get_config, save_config
  6. from open_webui.config import BannerModel
  7. router = APIRouter()
  8. ############################
  9. # ImportConfig
  10. ############################
  11. class ImportConfigForm(BaseModel):
  12. config: dict
  13. @router.post("/import", response_model=dict)
  14. async def import_config(form_data: ImportConfigForm, user=Depends(get_admin_user)):
  15. save_config(form_data.config)
  16. return get_config()
  17. ############################
  18. # ExportConfig
  19. ############################
  20. @router.get("/export", response_model=dict)
  21. async def export_config(user=Depends(get_admin_user)):
  22. return get_config()
  23. ############################
  24. # SetDefaultModels
  25. ############################
  26. class ModelsConfigForm(BaseModel):
  27. DEFAULT_MODELS: Optional[str]
  28. MODEL_ORDER_LIST: Optional[list[str]]
  29. @router.get("/models", response_model=ModelsConfigForm)
  30. async def get_models_config(request: Request, user=Depends(get_admin_user)):
  31. return {
  32. "DEFAULT_MODELS": request.app.state.config.DEFAULT_MODELS,
  33. "MODEL_ORDER_LIST": request.app.state.config.MODEL_ORDER_LIST,
  34. }
  35. @router.post("/models", response_model=ModelsConfigForm)
  36. async def set_models_config(
  37. request: Request, form_data: ModelsConfigForm, user=Depends(get_admin_user)
  38. ):
  39. request.app.state.config.DEFAULT_MODELS = form_data.DEFAULT_MODELS
  40. request.app.state.config.MODEL_ORDER_LIST = form_data.MODEL_ORDER_LIST
  41. return {
  42. "DEFAULT_MODELS": request.app.state.config.DEFAULT_MODELS,
  43. "MODEL_ORDER_LIST": request.app.state.config.MODEL_ORDER_LIST,
  44. }
  45. class PromptSuggestion(BaseModel):
  46. title: list[str]
  47. content: str
  48. class SetDefaultSuggestionsForm(BaseModel):
  49. suggestions: list[PromptSuggestion]
  50. @router.post("/suggestions", response_model=list[PromptSuggestion])
  51. async def set_default_suggestions(
  52. request: Request,
  53. form_data: SetDefaultSuggestionsForm,
  54. user=Depends(get_admin_user),
  55. ):
  56. data = form_data.model_dump()
  57. request.app.state.config.DEFAULT_PROMPT_SUGGESTIONS = data["suggestions"]
  58. return request.app.state.config.DEFAULT_PROMPT_SUGGESTIONS
  59. ############################
  60. # SetBanners
  61. ############################
  62. class SetBannersForm(BaseModel):
  63. banners: list[BannerModel]
  64. @router.post("/banners", response_model=list[BannerModel])
  65. async def set_banners(
  66. request: Request,
  67. form_data: SetBannersForm,
  68. user=Depends(get_admin_user),
  69. ):
  70. data = form_data.model_dump()
  71. request.app.state.config.BANNERS = data["banners"]
  72. return request.app.state.config.BANNERS
  73. @router.get("/banners", response_model=list[BannerModel])
  74. async def get_banners(
  75. request: Request,
  76. user=Depends(get_verified_user),
  77. ):
  78. return request.app.state.config.BANNERS