mirror of
https://github.com/open-webui/open-webui
synced 2024-12-25 13:22:11 +00:00
162 lines
4.9 KiB
Python
162 lines
4.9 KiB
Python
from fastapi import FastAPI, Depends
|
|
from fastapi.routing import APIRoute
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from apps.webui.routers import (
|
|
auths,
|
|
users,
|
|
chats,
|
|
documents,
|
|
tools,
|
|
models,
|
|
prompts,
|
|
configs,
|
|
memories,
|
|
utils,
|
|
files,
|
|
functions,
|
|
)
|
|
from apps.webui.models.functions import Functions
|
|
from apps.webui.utils import load_function_module_by_id
|
|
|
|
from config import (
|
|
WEBUI_BUILD_HASH,
|
|
SHOW_ADMIN_DETAILS,
|
|
ADMIN_EMAIL,
|
|
WEBUI_AUTH,
|
|
DEFAULT_MODELS,
|
|
DEFAULT_PROMPT_SUGGESTIONS,
|
|
DEFAULT_USER_ROLE,
|
|
ENABLE_SIGNUP,
|
|
USER_PERMISSIONS,
|
|
WEBHOOK_URL,
|
|
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
|
|
WEBUI_AUTH_TRUSTED_NAME_HEADER,
|
|
JWT_EXPIRES_IN,
|
|
WEBUI_BANNERS,
|
|
ENABLE_COMMUNITY_SHARING,
|
|
AppConfig,
|
|
)
|
|
|
|
app = FastAPI()
|
|
|
|
origins = ["*"]
|
|
|
|
app.state.config = AppConfig()
|
|
|
|
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
|
|
app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
|
|
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
|
|
|
|
app.state.config.ENABLE_COMMUNITY_SHARING = ENABLE_COMMUNITY_SHARING
|
|
|
|
app.state.MODELS = {}
|
|
app.state.TOOLS = {}
|
|
app.state.FUNCTIONS = {}
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=origins,
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
app.include_router(configs.router, prefix="/configs", tags=["configs"])
|
|
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"])
|
|
|
|
app.include_router(documents.router, prefix="/documents", tags=["documents"])
|
|
app.include_router(models.router, prefix="/models", tags=["models"])
|
|
app.include_router(prompts.router, prefix="/prompts", tags=["prompts"])
|
|
|
|
app.include_router(memories.router, prefix="/memories", tags=["memories"])
|
|
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"])
|
|
|
|
app.include_router(utils.router, prefix="/utils", tags=["utils"])
|
|
|
|
|
|
@app.get("/")
|
|
async def get_status():
|
|
return {
|
|
"status": True,
|
|
"auth": WEBUI_AUTH,
|
|
"default_models": app.state.config.DEFAULT_MODELS,
|
|
"default_prompt_suggestions": app.state.config.DEFAULT_PROMPT_SUGGESTIONS,
|
|
}
|
|
|
|
|
|
async def get_pipe_models():
|
|
pipes = Functions.get_functions_by_type("pipe", active_only=True)
|
|
pipe_models = []
|
|
|
|
for pipe in pipes:
|
|
# Check if function is already loaded
|
|
if pipe.id not in app.state.FUNCTIONS:
|
|
function_module, function_type, frontmatter = 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
|
|
if callable(function_module.pipes):
|
|
manifold_pipes = function_module.pipes()
|
|
else:
|
|
manifold_pipes = function_module.pipes
|
|
|
|
for p in manifold_pipes:
|
|
manifold_pipe_id = f'{pipe.id}.{p["id"]}'
|
|
manifold_pipe_name = p["name"]
|
|
|
|
if hasattr(function_module, "name"):
|
|
manifold_pipe_name = (
|
|
f"{function_module.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
|