Spaces:
Running
Running
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 | |
async def import_config(form_data: ImportConfigForm, user=Depends(get_admin_user)): | |
save_config(form_data.config) | |
return get_config() | |
############################ | |
# ExportConfig | |
############################ | |
async def export_config(user=Depends(get_admin_user)): | |
return get_config() | |
############################ | |
# Direct Connections Config | |
############################ | |
class DirectConnectionsConfigForm(BaseModel): | |
ENABLE_DIRECT_CONNECTIONS: bool | |
async def get_direct_connections_config(request: Request, user=Depends(get_admin_user)): | |
return { | |
"ENABLE_DIRECT_CONNECTIONS": request.app.state.config.ENABLE_DIRECT_CONNECTIONS, | |
} | |
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): | |
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] | |
async def get_code_execution_config(request: Request, user=Depends(get_admin_user)): | |
return { | |
"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, | |
} | |
async def set_code_execution_config( | |
request: Request, form_data: CodeInterpreterConfigForm, user=Depends(get_admin_user) | |
): | |
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 { | |
"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]] | |
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, | |
} | |
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] | |
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] | |
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 | |
async def get_banners( | |
request: Request, | |
user=Depends(get_verified_user), | |
): | |
return request.app.state.config.BANNERS | |