123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- from fastapi import FastAPI, Depends
- from fastapi.routing import APIRoute
- from fastapi.middleware.cors import CORSMiddleware
- from starlette.middleware.sessions import SessionMiddleware
- 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")
- 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
- 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"{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
|