123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- from fastapi import APIRouter, Depends, Request
- from pydantic import BaseModel
- from typing import Optional
- from open_webui.utils.auth import get_admin_user, get_verified_user
- from open_webui.config import get_config, save_config
- from open_webui.config import BannerModel
- router = APIRouter()
- ############################
- # ImportConfig
- ############################
- class ImportConfigForm(BaseModel):
- config: dict
- @router.post("/import", response_model=dict)
- async def import_config(form_data: ImportConfigForm, user=Depends(get_admin_user)):
- save_config(form_data.config)
- return get_config()
- ############################
- # ExportConfig
- ############################
- @router.get("/export", response_model=dict)
- async def export_config(user=Depends(get_admin_user)):
- return get_config()
- ############################
- # Direct Connections Config
- ############################
- class DirectConnectionsConfigForm(BaseModel):
- ENABLE_DIRECT_CONNECTIONS: bool
- @router.get("/direct_connections", response_model=DirectConnectionsConfigForm)
- async def get_direct_connections_config(request: Request, user=Depends(get_admin_user)):
- return {
- "ENABLE_DIRECT_CONNECTIONS": request.app.state.config.ENABLE_DIRECT_CONNECTIONS,
- }
- @router.post("/direct_connections", response_model=DirectConnectionsConfigForm)
- async def set_direct_connections_config(
- request: Request,
- form_data: DirectConnectionsConfigForm,
- user=Depends(get_admin_user),
- ):
- request.app.state.config.ENABLE_DIRECT_CONNECTIONS = (
- form_data.ENABLE_DIRECT_CONNECTIONS
- )
- return {
- "ENABLE_DIRECT_CONNECTIONS": request.app.state.config.ENABLE_DIRECT_CONNECTIONS,
- }
- ############################
- # CodeInterpreterConfig
- ############################
- class CodeInterpreterConfigForm(BaseModel):
- ENABLE_CODE_EXECUTION: bool
- CODE_EXECUTION_ENGINE: str
- CODE_EXECUTION_JUPYTER_URL: Optional[str]
- CODE_EXECUTION_JUPYTER_AUTH: Optional[str]
- CODE_EXECUTION_JUPYTER_AUTH_TOKEN: Optional[str]
- CODE_EXECUTION_JUPYTER_AUTH_PASSWORD: Optional[str]
- CODE_EXECUTION_JUPYTER_TIMEOUT: Optional[int]
- ENABLE_CODE_INTERPRETER: bool
- CODE_INTERPRETER_ENGINE: str
- CODE_INTERPRETER_PROMPT_TEMPLATE: Optional[str]
- CODE_INTERPRETER_JUPYTER_URL: Optional[str]
- CODE_INTERPRETER_JUPYTER_AUTH: Optional[str]
- CODE_INTERPRETER_JUPYTER_AUTH_TOKEN: Optional[str]
- CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD: Optional[str]
- CODE_INTERPRETER_JUPYTER_TIMEOUT: Optional[int]
- @router.get("/code_execution", response_model=CodeInterpreterConfigForm)
- async def get_code_execution_config(request: Request, user=Depends(get_admin_user)):
- return {
- "ENABLE_CODE_EXECUTION": request.app.state.config.ENABLE_CODE_EXECUTION,
- "CODE_EXECUTION_ENGINE": request.app.state.config.CODE_EXECUTION_ENGINE,
- "CODE_EXECUTION_JUPYTER_URL": request.app.state.config.CODE_EXECUTION_JUPYTER_URL,
- "CODE_EXECUTION_JUPYTER_AUTH": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH,
- "CODE_EXECUTION_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_TOKEN,
- "CODE_EXECUTION_JUPYTER_AUTH_PASSWORD": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_PASSWORD,
- "CODE_EXECUTION_JUPYTER_TIMEOUT": request.app.state.config.CODE_EXECUTION_JUPYTER_TIMEOUT,
- "ENABLE_CODE_INTERPRETER": request.app.state.config.ENABLE_CODE_INTERPRETER,
- "CODE_INTERPRETER_ENGINE": request.app.state.config.CODE_INTERPRETER_ENGINE,
- "CODE_INTERPRETER_PROMPT_TEMPLATE": request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE,
- "CODE_INTERPRETER_JUPYTER_URL": request.app.state.config.CODE_INTERPRETER_JUPYTER_URL,
- "CODE_INTERPRETER_JUPYTER_AUTH": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH,
- "CODE_INTERPRETER_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN,
- "CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD,
- "CODE_INTERPRETER_JUPYTER_TIMEOUT": request.app.state.config.CODE_INTERPRETER_JUPYTER_TIMEOUT,
- }
- @router.post("/code_execution", response_model=CodeInterpreterConfigForm)
- async def set_code_execution_config(
- request: Request, form_data: CodeInterpreterConfigForm, user=Depends(get_admin_user)
- ):
- request.app.state.config.ENABLE_CODE_EXECUTION = form_data.ENABLE_CODE_EXECUTION
- request.app.state.config.CODE_EXECUTION_ENGINE = form_data.CODE_EXECUTION_ENGINE
- request.app.state.config.CODE_EXECUTION_JUPYTER_URL = (
- form_data.CODE_EXECUTION_JUPYTER_URL
- )
- request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH = (
- form_data.CODE_EXECUTION_JUPYTER_AUTH
- )
- request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_TOKEN = (
- form_data.CODE_EXECUTION_JUPYTER_AUTH_TOKEN
- )
- request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_PASSWORD = (
- form_data.CODE_EXECUTION_JUPYTER_AUTH_PASSWORD
- )
- request.app.state.config.CODE_EXECUTION_JUPYTER_TIMEOUT = (
- form_data.CODE_EXECUTION_JUPYTER_TIMEOUT
- )
- request.app.state.config.ENABLE_CODE_INTERPRETER = form_data.ENABLE_CODE_INTERPRETER
- request.app.state.config.CODE_INTERPRETER_ENGINE = form_data.CODE_INTERPRETER_ENGINE
- request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE = (
- form_data.CODE_INTERPRETER_PROMPT_TEMPLATE
- )
- request.app.state.config.CODE_INTERPRETER_JUPYTER_URL = (
- form_data.CODE_INTERPRETER_JUPYTER_URL
- )
- request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH = (
- form_data.CODE_INTERPRETER_JUPYTER_AUTH
- )
- request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN = (
- form_data.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN
- )
- request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD = (
- form_data.CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD
- )
- request.app.state.config.CODE_INTERPRETER_JUPYTER_TIMEOUT = (
- form_data.CODE_INTERPRETER_JUPYTER_TIMEOUT
- )
- return {
- "ENABLE_CODE_EXECUTION": request.app.state.config.ENABLE_CODE_EXECUTION,
- "CODE_EXECUTION_ENGINE": request.app.state.config.CODE_EXECUTION_ENGINE,
- "CODE_EXECUTION_JUPYTER_URL": request.app.state.config.CODE_EXECUTION_JUPYTER_URL,
- "CODE_EXECUTION_JUPYTER_AUTH": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH,
- "CODE_EXECUTION_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_TOKEN,
- "CODE_EXECUTION_JUPYTER_AUTH_PASSWORD": request.app.state.config.CODE_EXECUTION_JUPYTER_AUTH_PASSWORD,
- "CODE_EXECUTION_JUPYTER_TIMEOUT": request.app.state.config.CODE_EXECUTION_JUPYTER_TIMEOUT,
- "ENABLE_CODE_INTERPRETER": request.app.state.config.ENABLE_CODE_INTERPRETER,
- "CODE_INTERPRETER_ENGINE": request.app.state.config.CODE_INTERPRETER_ENGINE,
- "CODE_INTERPRETER_PROMPT_TEMPLATE": request.app.state.config.CODE_INTERPRETER_PROMPT_TEMPLATE,
- "CODE_INTERPRETER_JUPYTER_URL": request.app.state.config.CODE_INTERPRETER_JUPYTER_URL,
- "CODE_INTERPRETER_JUPYTER_AUTH": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH,
- "CODE_INTERPRETER_JUPYTER_AUTH_TOKEN": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_TOKEN,
- "CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD": request.app.state.config.CODE_INTERPRETER_JUPYTER_AUTH_PASSWORD,
- "CODE_INTERPRETER_JUPYTER_TIMEOUT": request.app.state.config.CODE_INTERPRETER_JUPYTER_TIMEOUT,
- }
- ############################
- # SetDefaultModels
- ############################
- class ModelsConfigForm(BaseModel):
- DEFAULT_MODELS: Optional[str]
- MODEL_ORDER_LIST: Optional[list[str]]
- @router.get("/models", response_model=ModelsConfigForm)
- async def get_models_config(request: Request, user=Depends(get_admin_user)):
- return {
- "DEFAULT_MODELS": request.app.state.config.DEFAULT_MODELS,
- "MODEL_ORDER_LIST": request.app.state.config.MODEL_ORDER_LIST,
- }
- @router.post("/models", response_model=ModelsConfigForm)
- async def set_models_config(
- request: Request, form_data: ModelsConfigForm, user=Depends(get_admin_user)
- ):
- request.app.state.config.DEFAULT_MODELS = form_data.DEFAULT_MODELS
- request.app.state.config.MODEL_ORDER_LIST = form_data.MODEL_ORDER_LIST
- return {
- "DEFAULT_MODELS": request.app.state.config.DEFAULT_MODELS,
- "MODEL_ORDER_LIST": request.app.state.config.MODEL_ORDER_LIST,
- }
- class PromptSuggestion(BaseModel):
- title: list[str]
- content: str
- class SetDefaultSuggestionsForm(BaseModel):
- suggestions: list[PromptSuggestion]
- @router.post("/suggestions", response_model=list[PromptSuggestion])
- async def set_default_suggestions(
- request: Request,
- form_data: SetDefaultSuggestionsForm,
- user=Depends(get_admin_user),
- ):
- data = form_data.model_dump()
- request.app.state.config.DEFAULT_PROMPT_SUGGESTIONS = data["suggestions"]
- return request.app.state.config.DEFAULT_PROMPT_SUGGESTIONS
- ############################
- # SetBanners
- ############################
- class SetBannersForm(BaseModel):
- banners: list[BannerModel]
- @router.post("/banners", response_model=list[BannerModel])
- async def set_banners(
- request: Request,
- form_data: SetBannersForm,
- user=Depends(get_admin_user),
- ):
- data = form_data.model_dump()
- request.app.state.config.BANNERS = data["banners"]
- return request.app.state.config.BANNERS
- @router.get("/banners", response_model=list[BannerModel])
- async def get_banners(
- request: Request,
- user=Depends(get_verified_user),
- ):
- return request.app.state.config.BANNERS
|