open-webui/backend/apps/webui/main.py

158 lines
4.8 KiB
Python
Raw Normal View History

from fastapi import FastAPI, Depends
from fastapi.routing import APIRoute
2023-11-19 00:47:12 +00:00
from fastapi.middleware.cors import CORSMiddleware
2024-05-26 08:15:48 +00:00
from apps.webui.routers import (
2024-01-08 07:43:32 +00:00
auths,
users,
chats,
documents,
2024-06-11 03:39:55 +00:00
tools,
2024-05-24 07:26:00 +00:00
models,
2024-01-08 07:43:32 +00:00
prompts,
configs,
2024-05-19 15:00:07 +00:00
memories,
2024-01-08 07:43:32 +00:00
utils,
2024-06-18 18:36:55 +00:00
files,
2024-06-20 07:49:11 +00:00
functions,
2024-01-08 07:43:32 +00:00
)
2024-06-20 11:38:59 +00:00
from apps.webui.models.functions import Functions
from apps.webui.utils import load_function_module_by_id
2024-02-14 09:17:43 +00:00
from config import (
2024-05-26 07:49:30 +00:00
WEBUI_BUILD_HASH,
SHOW_ADMIN_DETAILS,
ADMIN_EMAIL,
2024-02-14 09:17:43 +00:00
WEBUI_AUTH,
DEFAULT_MODELS,
DEFAULT_PROMPT_SUGGESTIONS,
DEFAULT_USER_ROLE,
ENABLE_SIGNUP,
USER_PERMISSIONS,
2024-03-21 01:35:02 +00:00
WEBHOOK_URL,
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
WEBUI_AUTH_TRUSTED_NAME_HEADER,
JWT_EXPIRES_IN,
WEBUI_BANNERS,
2024-05-26 16:10:25 +00:00
ENABLE_COMMUNITY_SHARING,
2024-06-11 03:39:55 +00:00
AppConfig,
2024-02-14 09:17:43 +00:00
)
2023-11-19 00:47:12 +00:00
app = FastAPI()
origins = ["*"]
app.state.config = AppConfig()
2024-02-20 04:44:00 +00:00
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
2024-06-11 05:38:48 +00:00
app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
app.state.config.SHOW_ADMIN_DETAILS = SHOW_ADMIN_DETAILS
app.state.config.ADMIN_EMAIL = ADMIN_EMAIL
app.state.config.DEFAULT_MODELS = DEFAULT_MODELS
app.state.config.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
app.state.config.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
app.state.config.USER_PERMISSIONS = USER_PERMISSIONS
app.state.config.WEBHOOK_URL = WEBHOOK_URL
app.state.config.BANNERS = WEBUI_BANNERS
2024-05-25 01:26:36 +00:00
2024-05-26 16:10:25 +00:00
app.state.config.ENABLE_COMMUNITY_SHARING = ENABLE_COMMUNITY_SHARING
2024-05-25 01:26:36 +00:00
app.state.MODELS = {}
2024-06-11 05:38:48 +00:00
app.state.TOOLS = {}
2024-06-20 07:37:02 +00:00
app.state.FUNCTIONS = {}
2024-05-19 15:00:07 +00:00
2023-11-19 00:47:12 +00:00
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
2024-06-20 07:49:11 +00:00
app.include_router(configs.router, prefix="/configs", tags=["configs"])
2023-11-19 00:47:12 +00:00
app.include_router(auths.router, prefix="/auths", tags=["auths"])
app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(chats.router, prefix="/chats", tags=["chats"])
2024-05-19 15:00:07 +00:00
2024-01-08 07:43:32 +00:00
app.include_router(documents.router, prefix="/documents", tags=["documents"])
2024-05-24 07:26:00 +00:00
app.include_router(models.router, prefix="/models", tags=["models"])
app.include_router(prompts.router, prefix="/prompts", tags=["prompts"])
2024-06-20 07:49:11 +00:00
2024-05-19 15:00:07 +00:00
app.include_router(memories.router, prefix="/memories", tags=["memories"])
2024-06-20 07:49:11 +00:00
app.include_router(files.router, prefix="/files", tags=["files"])
app.include_router(tools.router, prefix="/tools", tags=["tools"])
app.include_router(functions.router, prefix="/functions", tags=["functions"])
2024-05-19 15:00:07 +00:00
2023-12-27 06:10:22 +00:00
app.include_router(utils.router, prefix="/utils", tags=["utils"])
2023-11-19 00:47:12 +00:00
@app.get("/")
async def get_status():
2024-01-03 00:48:10 +00:00
return {
"status": True,
"auth": WEBUI_AUTH,
"default_models": app.state.config.DEFAULT_MODELS,
"default_prompt_suggestions": app.state.config.DEFAULT_PROMPT_SUGGESTIONS,
2024-01-03 00:48:10 +00:00
}
2024-06-20 11:38:59 +00:00
async def get_pipe_models():
pipes = Functions.get_functions_by_type("pipe")
pipe_models = []
for pipe in pipes:
# Check if function is already loaded
if pipe.id not in app.state.FUNCTIONS:
function_module, function_type = load_function_module_by_id(pipe.id)
app.state.FUNCTIONS[pipe.id] = function_module
else:
function_module = app.state.FUNCTIONS[pipe.id]
# Check if function is a manifold
if hasattr(function_module, "type"):
if function_module.type == "manifold":
manifold_pipes = []
# Check if pipes is a function or a list
2024-06-20 11:47:40 +00:00
if callable(function_module.pipes):
manifold_pipes = function_module.pipes()
2024-06-20 11:38:59 +00:00
else:
2024-06-20 11:47:40 +00:00
manifold_pipes = function_module.pipes
2024-06-20 11:38:59 +00:00
for p in manifold_pipes:
manifold_pipe_id = f'{pipe.id}.{p["id"]}'
manifold_pipe_name = p["name"]
2024-06-20 11:47:40 +00:00
if hasattr(function_module, "name"):
2024-06-20 11:38:59 +00:00
manifold_pipe_name = f"{pipe.name}{manifold_pipe_name}"
pipe_models.append(
{
"id": manifold_pipe_id,
"name": manifold_pipe_name,
"object": "model",
"created": pipe.created_at,
"owned_by": "openai",
"pipe": {"type": pipe.type},
}
)
else:
pipe_models.append(
{
"id": pipe.id,
"name": pipe.name,
"object": "model",
"created": pipe.created_at,
"owned_by": "openai",
"pipe": {"type": "pipe"},
}
)
return pipe_models