| 
									
										
										
										
											2024-10-16 22:32:57 +08:00
										 |  |  | import asyncio | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | import inspect | 
					
						
							| 
									
										
										
										
											2024-02-23 16:30:26 +08:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2024-03-21 07:11:36 +08:00
										 |  |  | import logging | 
					
						
							| 
									
										
										
										
											2024-05-22 06:04:00 +08:00
										 |  |  | import mimetypes | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | import shutil | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | import sys | 
					
						
							|  |  |  | import time | 
					
						
							| 
									
										
										
										
											2024-10-22 18:16:48 +08:00
										 |  |  | import random | 
					
						
							| 
									
										
										
										
											2024-12-12 10:36:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | from contextlib import asynccontextmanager | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | from urllib.parse import urlencode, parse_qs, urlparse | 
					
						
							|  |  |  | from pydantic import BaseModel | 
					
						
							|  |  |  | from sqlalchemy import text | 
					
						
							| 
									
										
										
										
											2024-02-23 16:30:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | from typing import Optional | 
					
						
							| 
									
										
										
										
											2024-11-16 20:41:07 +08:00
										 |  |  | from aiocache import cached | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | import aiohttp | 
					
						
							|  |  |  | import requests | 
					
						
							| 
									
										
										
										
											2024-12-18 05:52:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-16 22:58:03 +08:00
										 |  |  | from fastapi import ( | 
					
						
							|  |  |  |     Depends, | 
					
						
							|  |  |  |     FastAPI, | 
					
						
							|  |  |  |     File, | 
					
						
							|  |  |  |     Form, | 
					
						
							|  |  |  |     HTTPException, | 
					
						
							|  |  |  |     Request, | 
					
						
							|  |  |  |     UploadFile, | 
					
						
							|  |  |  |     status, | 
					
						
							| 
									
										
										
										
											2024-12-18 05:51:29 +08:00
										 |  |  |     applications, | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  |     BackgroundTasks, | 
					
						
							| 
									
										
										
										
											2024-10-16 22:58:03 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-17 02:00:51 +08:00
										 |  |  | from fastapi.openapi.docs import get_swagger_ui_html | 
					
						
							| 
									
										
										
										
											2024-12-18 05:52:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-16 22:58:03 +08:00
										 |  |  | from fastapi.middleware.cors import CORSMiddleware | 
					
						
							| 
									
										
										
										
											2024-10-22 18:16:48 +08:00
										 |  |  | from fastapi.responses import JSONResponse, RedirectResponse | 
					
						
							| 
									
										
										
										
											2024-10-16 22:58:03 +08:00
										 |  |  | from fastapi.staticfiles import StaticFiles | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-16 22:58:03 +08:00
										 |  |  | from starlette.exceptions import HTTPException as StarletteHTTPException | 
					
						
							|  |  |  | from starlette.middleware.base import BaseHTTPMiddleware | 
					
						
							|  |  |  | from starlette.middleware.sessions import SessionMiddleware | 
					
						
							|  |  |  | from starlette.responses import Response, StreamingResponse | 
					
						
							| 
									
										
										
										
											2024-09-04 22:54:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  | from open_webui.socket.main import ( | 
					
						
							| 
									
										
										
										
											2024-09-28 07:27:46 +08:00
										 |  |  |     app as socket_app, | 
					
						
							|  |  |  |     periodic_usage_pool_cleanup, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | from open_webui.routers import ( | 
					
						
							|  |  |  |     audio, | 
					
						
							|  |  |  |     images, | 
					
						
							|  |  |  |     ollama, | 
					
						
							|  |  |  |     openai, | 
					
						
							|  |  |  |     retrieval, | 
					
						
							|  |  |  |     pipelines, | 
					
						
							|  |  |  |     tasks, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     auths, | 
					
						
							| 
									
										
										
										
											2024-12-22 18:42:19 +08:00
										 |  |  |     channels, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     chats, | 
					
						
							|  |  |  |     folders, | 
					
						
							|  |  |  |     configs, | 
					
						
							|  |  |  |     groups, | 
					
						
							|  |  |  |     files, | 
					
						
							|  |  |  |     functions, | 
					
						
							|  |  |  |     memories, | 
					
						
							|  |  |  |     models, | 
					
						
							|  |  |  |     knowledge, | 
					
						
							|  |  |  |     prompts, | 
					
						
							|  |  |  |     evaluations, | 
					
						
							|  |  |  |     tools, | 
					
						
							|  |  |  |     users, | 
					
						
							|  |  |  |     utils, | 
					
						
							| 
									
										
										
										
											2024-09-04 22:54:48 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-12 12:39:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  | from open_webui.routers.retrieval import ( | 
					
						
							|  |  |  |     get_embedding_function, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |     get_ef, | 
					
						
							|  |  |  |     get_rf, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | from open_webui.internal.db import Session | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from open_webui.models.functions import Functions | 
					
						
							|  |  |  | from open_webui.models.models import Models | 
					
						
							|  |  |  | from open_webui.models.users import UserModel, Users | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-04 22:54:48 +08:00
										 |  |  | from open_webui.config import ( | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     # Ollama | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     ENABLE_OLLAMA_API, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     OLLAMA_BASE_URLS, | 
					
						
							|  |  |  |     OLLAMA_API_CONFIGS, | 
					
						
							|  |  |  |     # OpenAI | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     ENABLE_OPENAI_API, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     OPENAI_API_BASE_URLS, | 
					
						
							|  |  |  |     OPENAI_API_KEYS, | 
					
						
							|  |  |  |     OPENAI_API_CONFIGS, | 
					
						
							|  |  |  |     # Image | 
					
						
							|  |  |  |     AUTOMATIC1111_API_AUTH, | 
					
						
							|  |  |  |     AUTOMATIC1111_BASE_URL, | 
					
						
							|  |  |  |     AUTOMATIC1111_CFG_SCALE, | 
					
						
							|  |  |  |     AUTOMATIC1111_SAMPLER, | 
					
						
							|  |  |  |     AUTOMATIC1111_SCHEDULER, | 
					
						
							|  |  |  |     COMFYUI_BASE_URL, | 
					
						
							| 
									
										
										
										
											2024-12-17 15:29:00 +08:00
										 |  |  |     COMFYUI_API_KEY, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     COMFYUI_WORKFLOW, | 
					
						
							|  |  |  |     COMFYUI_WORKFLOW_NODES, | 
					
						
							|  |  |  |     ENABLE_IMAGE_GENERATION, | 
					
						
							| 
									
										
										
										
											2025-01-16 16:13:02 +08:00
										 |  |  |     ENABLE_IMAGE_PROMPT_GENERATION, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     IMAGE_GENERATION_ENGINE, | 
					
						
							|  |  |  |     IMAGE_GENERATION_MODEL, | 
					
						
							|  |  |  |     IMAGE_SIZE, | 
					
						
							|  |  |  |     IMAGE_STEPS, | 
					
						
							|  |  |  |     IMAGES_OPENAI_API_BASE_URL, | 
					
						
							|  |  |  |     IMAGES_OPENAI_API_KEY, | 
					
						
							|  |  |  |     # Audio | 
					
						
							|  |  |  |     AUDIO_STT_ENGINE, | 
					
						
							|  |  |  |     AUDIO_STT_MODEL, | 
					
						
							|  |  |  |     AUDIO_STT_OPENAI_API_BASE_URL, | 
					
						
							|  |  |  |     AUDIO_STT_OPENAI_API_KEY, | 
					
						
							|  |  |  |     AUDIO_TTS_API_KEY, | 
					
						
							|  |  |  |     AUDIO_TTS_ENGINE, | 
					
						
							|  |  |  |     AUDIO_TTS_MODEL, | 
					
						
							|  |  |  |     AUDIO_TTS_OPENAI_API_BASE_URL, | 
					
						
							|  |  |  |     AUDIO_TTS_OPENAI_API_KEY, | 
					
						
							|  |  |  |     AUDIO_TTS_SPLIT_ON, | 
					
						
							|  |  |  |     AUDIO_TTS_VOICE, | 
					
						
							|  |  |  |     AUDIO_TTS_AZURE_SPEECH_REGION, | 
					
						
							|  |  |  |     AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT, | 
					
						
							|  |  |  |     WHISPER_MODEL, | 
					
						
							|  |  |  |     WHISPER_MODEL_AUTO_UPDATE, | 
					
						
							|  |  |  |     WHISPER_MODEL_DIR, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     # Retrieval | 
					
						
							|  |  |  |     RAG_TEMPLATE, | 
					
						
							|  |  |  |     DEFAULT_RAG_TEMPLATE, | 
					
						
							|  |  |  |     RAG_EMBEDDING_MODEL, | 
					
						
							|  |  |  |     RAG_EMBEDDING_MODEL_AUTO_UPDATE, | 
					
						
							|  |  |  |     RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE, | 
					
						
							|  |  |  |     RAG_RERANKING_MODEL, | 
					
						
							|  |  |  |     RAG_RERANKING_MODEL_AUTO_UPDATE, | 
					
						
							|  |  |  |     RAG_RERANKING_MODEL_TRUST_REMOTE_CODE, | 
					
						
							|  |  |  |     RAG_EMBEDDING_ENGINE, | 
					
						
							|  |  |  |     RAG_EMBEDDING_BATCH_SIZE, | 
					
						
							|  |  |  |     RAG_RELEVANCE_THRESHOLD, | 
					
						
							|  |  |  |     RAG_FILE_MAX_COUNT, | 
					
						
							|  |  |  |     RAG_FILE_MAX_SIZE, | 
					
						
							|  |  |  |     RAG_OPENAI_API_BASE_URL, | 
					
						
							|  |  |  |     RAG_OPENAI_API_KEY, | 
					
						
							|  |  |  |     RAG_OLLAMA_BASE_URL, | 
					
						
							|  |  |  |     RAG_OLLAMA_API_KEY, | 
					
						
							|  |  |  |     CHUNK_OVERLAP, | 
					
						
							|  |  |  |     CHUNK_SIZE, | 
					
						
							|  |  |  |     CONTENT_EXTRACTION_ENGINE, | 
					
						
							|  |  |  |     TIKA_SERVER_URL, | 
					
						
							| 
									
										
										
										
											2025-02-14 20:08:03 +08:00
										 |  |  |     DOCLING_SERVER_URL, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     RAG_TOP_K, | 
					
						
							|  |  |  |     RAG_TEXT_SPLITTER, | 
					
						
							|  |  |  |     TIKTOKEN_ENCODING_NAME, | 
					
						
							|  |  |  |     PDF_EXTRACT_IMAGES, | 
					
						
							|  |  |  |     YOUTUBE_LOADER_LANGUAGE, | 
					
						
							|  |  |  |     YOUTUBE_LOADER_PROXY_URL, | 
					
						
							|  |  |  |     # Retrieval (Web Search) | 
					
						
							|  |  |  |     RAG_WEB_SEARCH_ENGINE, | 
					
						
							|  |  |  |     RAG_WEB_SEARCH_RESULT_COUNT, | 
					
						
							|  |  |  |     RAG_WEB_SEARCH_CONCURRENT_REQUESTS, | 
					
						
							|  |  |  |     RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, | 
					
						
							|  |  |  |     JINA_API_KEY, | 
					
						
							|  |  |  |     SEARCHAPI_API_KEY, | 
					
						
							|  |  |  |     SEARCHAPI_ENGINE, | 
					
						
							|  |  |  |     SEARXNG_QUERY_URL, | 
					
						
							|  |  |  |     SERPER_API_KEY, | 
					
						
							|  |  |  |     SERPLY_API_KEY, | 
					
						
							|  |  |  |     SERPSTACK_API_KEY, | 
					
						
							|  |  |  |     SERPSTACK_HTTPS, | 
					
						
							|  |  |  |     TAVILY_API_KEY, | 
					
						
							|  |  |  |     BING_SEARCH_V7_ENDPOINT, | 
					
						
							|  |  |  |     BING_SEARCH_V7_SUBSCRIPTION_KEY, | 
					
						
							|  |  |  |     BRAVE_SEARCH_API_KEY, | 
					
						
							|  |  |  |     KAGI_SEARCH_API_KEY, | 
					
						
							|  |  |  |     MOJEEK_SEARCH_API_KEY, | 
					
						
							|  |  |  |     GOOGLE_PSE_API_KEY, | 
					
						
							|  |  |  |     GOOGLE_PSE_ENGINE_ID, | 
					
						
							| 
									
										
										
										
											2024-12-19 01:04:55 +08:00
										 |  |  |     GOOGLE_DRIVE_CLIENT_ID, | 
					
						
							|  |  |  |     GOOGLE_DRIVE_API_KEY, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     ENABLE_RAG_HYBRID_SEARCH, | 
					
						
							|  |  |  |     ENABLE_RAG_LOCAL_WEB_FETCH, | 
					
						
							|  |  |  |     ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION, | 
					
						
							|  |  |  |     ENABLE_RAG_WEB_SEARCH, | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  |     ENABLE_GOOGLE_DRIVE_INTEGRATION, | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  |     UPLOAD_DIR, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     # WebUI | 
					
						
							|  |  |  |     WEBUI_AUTH, | 
					
						
							|  |  |  |     WEBUI_NAME, | 
					
						
							|  |  |  |     WEBUI_BANNERS, | 
					
						
							|  |  |  |     WEBHOOK_URL, | 
					
						
							|  |  |  |     ADMIN_EMAIL, | 
					
						
							|  |  |  |     SHOW_ADMIN_DETAILS, | 
					
						
							|  |  |  |     JWT_EXPIRES_IN, | 
					
						
							|  |  |  |     ENABLE_SIGNUP, | 
					
						
							|  |  |  |     ENABLE_LOGIN_FORM, | 
					
						
							|  |  |  |     ENABLE_API_KEY, | 
					
						
							| 
									
										
										
										
											2024-12-27 12:57:51 +08:00
										 |  |  |     ENABLE_API_KEY_ENDPOINT_RESTRICTIONS, | 
					
						
							|  |  |  |     API_KEY_ALLOWED_ENDPOINTS, | 
					
						
							| 
									
										
										
										
											2024-12-23 12:02:14 +08:00
										 |  |  |     ENABLE_CHANNELS, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     ENABLE_COMMUNITY_SHARING, | 
					
						
							|  |  |  |     ENABLE_MESSAGE_RATING, | 
					
						
							|  |  |  |     ENABLE_EVALUATION_ARENA_MODELS, | 
					
						
							|  |  |  |     USER_PERMISSIONS, | 
					
						
							|  |  |  |     DEFAULT_USER_ROLE, | 
					
						
							|  |  |  |     DEFAULT_PROMPT_SUGGESTIONS, | 
					
						
							|  |  |  |     DEFAULT_MODELS, | 
					
						
							|  |  |  |     DEFAULT_ARENA_MODEL, | 
					
						
							|  |  |  |     MODEL_ORDER_LIST, | 
					
						
							|  |  |  |     EVALUATION_ARENA_MODELS, | 
					
						
							|  |  |  |     # WebUI (OAuth) | 
					
						
							|  |  |  |     ENABLE_OAUTH_ROLE_MANAGEMENT, | 
					
						
							|  |  |  |     OAUTH_ROLES_CLAIM, | 
					
						
							|  |  |  |     OAUTH_EMAIL_CLAIM, | 
					
						
							|  |  |  |     OAUTH_PICTURE_CLAIM, | 
					
						
							|  |  |  |     OAUTH_USERNAME_CLAIM, | 
					
						
							|  |  |  |     OAUTH_ALLOWED_ROLES, | 
					
						
							|  |  |  |     OAUTH_ADMIN_ROLES, | 
					
						
							|  |  |  |     # WebUI (LDAP) | 
					
						
							|  |  |  |     ENABLE_LDAP, | 
					
						
							|  |  |  |     LDAP_SERVER_LABEL, | 
					
						
							|  |  |  |     LDAP_SERVER_HOST, | 
					
						
							|  |  |  |     LDAP_SERVER_PORT, | 
					
						
							| 
									
										
										
										
											2025-01-10 08:53:03 +08:00
										 |  |  |     LDAP_ATTRIBUTE_FOR_MAIL, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     LDAP_ATTRIBUTE_FOR_USERNAME, | 
					
						
							|  |  |  |     LDAP_SEARCH_FILTERS, | 
					
						
							|  |  |  |     LDAP_SEARCH_BASE, | 
					
						
							|  |  |  |     LDAP_APP_DN, | 
					
						
							|  |  |  |     LDAP_APP_PASSWORD, | 
					
						
							|  |  |  |     LDAP_USE_TLS, | 
					
						
							|  |  |  |     LDAP_CA_CERT_FILE, | 
					
						
							|  |  |  |     LDAP_CIPHERS, | 
					
						
							|  |  |  |     # Misc | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     ENV, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     CACHE_DIR, | 
					
						
							|  |  |  |     STATIC_DIR, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     FRONTEND_BUILD_DIR, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     CORS_ALLOW_ORIGIN, | 
					
						
							|  |  |  |     DEFAULT_LOCALE, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     OAUTH_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2024-12-26 00:50:57 +08:00
										 |  |  |     WEBUI_URL, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     # Admin | 
					
						
							|  |  |  |     ENABLE_ADMIN_CHAT_ACCESS, | 
					
						
							|  |  |  |     ENABLE_ADMIN_EXPORT, | 
					
						
							|  |  |  |     # Tasks | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  |     TASK_MODEL, | 
					
						
							|  |  |  |     TASK_MODEL_EXTERNAL, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     ENABLE_TAGS_GENERATION, | 
					
						
							| 
									
										
										
										
											2024-11-19 18:24:32 +08:00
										 |  |  |     ENABLE_SEARCH_QUERY_GENERATION, | 
					
						
							|  |  |  |     ENABLE_RETRIEVAL_QUERY_GENERATION, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     ENABLE_AUTOCOMPLETE_GENERATION, | 
					
						
							| 
									
										
										
										
											2024-06-10 05:25:31 +08:00
										 |  |  |     TITLE_GENERATION_PROMPT_TEMPLATE, | 
					
						
							| 
									
										
										
										
											2024-10-20 12:27:10 +08:00
										 |  |  |     TAGS_GENERATION_PROMPT_TEMPLATE, | 
					
						
							| 
									
										
										
										
											2025-01-16 16:06:37 +08:00
										 |  |  |     IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE, | 
					
						
							| 
									
										
										
										
											2024-06-11 14:40:27 +08:00
										 |  |  |     TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     QUERY_GENERATION_PROMPT_TEMPLATE, | 
					
						
							|  |  |  |     AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE, | 
					
						
							|  |  |  |     AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     AppConfig, | 
					
						
							| 
									
										
										
										
											2024-09-25 07:06:11 +08:00
										 |  |  |     reset_config, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-09-04 22:54:48 +08:00
										 |  |  | from open_webui.env import ( | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     CHANGELOG, | 
					
						
							|  |  |  |     GLOBAL_LOG_LEVEL, | 
					
						
							| 
									
										
										
										
											2024-06-24 10:28:33 +08:00
										 |  |  |     SAFE_MODE, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     SRC_LOG_LEVELS, | 
					
						
							|  |  |  |     VERSION, | 
					
						
							|  |  |  |     WEBUI_BUILD_HASH, | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  |     WEBUI_SECRET_KEY, | 
					
						
							| 
									
										
										
										
											2024-06-06 02:21:42 +08:00
										 |  |  |     WEBUI_SESSION_COOKIE_SAME_SITE, | 
					
						
							| 
									
										
										
										
											2024-06-07 16:13:42 +08:00
										 |  |  |     WEBUI_SESSION_COOKIE_SECURE, | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  |     WEBUI_AUTH_TRUSTED_EMAIL_HEADER, | 
					
						
							|  |  |  |     WEBUI_AUTH_TRUSTED_NAME_HEADER, | 
					
						
							| 
									
										
										
										
											2024-12-07 05:03:01 +08:00
										 |  |  |     ENABLE_WEBSOCKET_SUPPORT, | 
					
						
							| 
									
										
										
										
											2024-12-02 10:25:44 +08:00
										 |  |  |     BYPASS_MODEL_ACCESS_CONTROL, | 
					
						
							| 
									
										
										
										
											2024-09-25 07:06:11 +08:00
										 |  |  |     RESET_CONFIG_ON_START, | 
					
						
							| 
									
										
										
										
											2024-10-08 13:13:49 +08:00
										 |  |  |     OFFLINE_MODE, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  | from open_webui.utils.models import ( | 
					
						
							|  |  |  |     get_all_models, | 
					
						
							|  |  |  |     get_all_base_models, | 
					
						
							|  |  |  |     check_model_access, | 
					
						
							| 
									
										
										
										
											2024-10-16 22:32:57 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | from open_webui.utils.chat import ( | 
					
						
							|  |  |  |     generate_chat_completion as chat_completion_handler, | 
					
						
							|  |  |  |     chat_completed as chat_completed_handler, | 
					
						
							|  |  |  |     chat_action as chat_action_handler, | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  | from open_webui.utils.middleware import process_chat_payload, process_chat_response | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | from open_webui.utils.access_control import has_access | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-09 08:01:56 +08:00
										 |  |  | from open_webui.utils.auth import ( | 
					
						
							| 
									
										
										
										
											2024-08-28 06:10:27 +08:00
										 |  |  |     decode_token, | 
					
						
							|  |  |  |     get_admin_user, | 
					
						
							|  |  |  |     get_verified_user, | 
					
						
							| 
									
										
										
										
											2024-03-10 13:47:01 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | from open_webui.utils.oauth import oauth_manager | 
					
						
							|  |  |  | from open_webui.utils.security_headers import SecurityHeadersMiddleware | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  | from open_webui.tasks import stop_task, list_tasks  # Import from tasks.py | 
					
						
							| 
									
										
										
										
											2024-09-21 06:30:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-24 10:28:33 +08:00
										 |  |  | if SAFE_MODE: | 
					
						
							|  |  |  |     print("SAFE MODE ENABLED") | 
					
						
							|  |  |  |     Functions.deactivate_all_functions() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-21 07:11:36 +08:00
										 |  |  | logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL) | 
					
						
							|  |  |  | log = logging.getLogger(__name__) | 
					
						
							|  |  |  | log.setLevel(SRC_LOG_LEVELS["MAIN"]) | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-28 17:45:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  | class SPAStaticFiles(StaticFiles): | 
					
						
							|  |  |  |     async def get_response(self, path: str, scope): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             return await super().get_response(path, scope) | 
					
						
							|  |  |  |         except (HTTPException, StarletteHTTPException) as ex: | 
					
						
							|  |  |  |             if ex.status_code == 404: | 
					
						
							|  |  |  |                 return await super().get_response("index.html", scope) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 raise ex | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 18:03:55 +08:00
										 |  |  | print( | 
					
						
							| 
									
										
										
										
											2024-05-04 05:23:38 +08:00
										 |  |  |     rf"""
 | 
					
						
							| 
									
										
										
										
											2024-10-08 13:13:49 +08:00
										 |  |  |   ___                    __        __   _     _   _ ___ | 
					
						
							| 
									
										
										
										
											2024-04-02 18:03:55 +08:00
										 |  |  |  / _ \ _ __   ___ _ __   \ \      / /__| |__ | | | |_ _| | 
					
						
							| 
									
										
										
										
											2024-10-08 13:13:49 +08:00
										 |  |  | | | | | '_ \ / _ \ '_ \   \ \ /\ / / _ \ '_ \| | | || | | 
					
						
							|  |  |  | | |_| | |_) |  __/ | | |   \ V  V /  __/ |_) | |_| || | | 
					
						
							| 
									
										
										
										
											2024-04-02 18:03:55 +08:00
										 |  |  |  \___/| .__/ \___|_| |_|    \_/\_/ \___|_.__/ \___/|___| | 
					
						
							| 
									
										
										
										
											2024-10-08 13:13:49 +08:00
										 |  |  |       |_| | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-02 18:03:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-23 03:22:38 +08:00
										 |  |  | v{VERSION} - building the best open-source AI user interface. | 
					
						
							| 
									
										
										
										
											2024-05-26 15:49:30 +08:00
										 |  |  | {f"Commit: {WEBUI_BUILD_HASH}" if WEBUI_BUILD_HASH != "dev-build" else ""} | 
					
						
							| 
									
										
										
										
											2024-04-02 18:03:55 +08:00
										 |  |  | https://github.com/open-webui/open-webui | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-09 12:00:03 +08:00
										 |  |  | @asynccontextmanager | 
					
						
							|  |  |  | async def lifespan(app: FastAPI): | 
					
						
							| 
									
										
										
										
											2024-09-25 07:06:11 +08:00
										 |  |  |     if RESET_CONFIG_ON_START: | 
					
						
							|  |  |  |         reset_config() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-24 23:43:43 +08:00
										 |  |  |     asyncio.create_task(periodic_usage_pool_cleanup()) | 
					
						
							| 
									
										
										
										
											2024-05-09 12:00:03 +08:00
										 |  |  |     yield | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app = FastAPI( | 
					
						
							| 
									
										
										
										
											2024-11-13 19:09:46 +08:00
										 |  |  |     docs_url="/docs" if ENV == "dev" else None, | 
					
						
							|  |  |  |     openapi_url="/openapi.json" if ENV == "dev" else None, | 
					
						
							|  |  |  |     redoc_url=None, | 
					
						
							|  |  |  |     lifespan=lifespan, | 
					
						
							| 
									
										
										
										
											2024-05-09 12:00:03 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-10 15:03:24 +08:00
										 |  |  | app.state.config = AppConfig() | 
					
						
							| 
									
										
										
										
											2024-05-24 16:40:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-17 11:49:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | # OLLAMA | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-09-29 01:51:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-24 16:40:48 +08:00
										 |  |  | app.state.config.ENABLE_OLLAMA_API = ENABLE_OLLAMA_API | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.OLLAMA_BASE_URLS = OLLAMA_BASE_URLS | 
					
						
							|  |  |  | app.state.config.OLLAMA_API_CONFIGS = OLLAMA_API_CONFIGS | 
					
						
							| 
									
										
										
										
											2024-07-12 09:41:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 19:38:45 +08:00
										 |  |  | app.state.OLLAMA_MODELS = {} | 
					
						
							| 
									
										
										
										
											2024-07-12 09:41:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | # OPENAI | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_OPENAI_API = ENABLE_OPENAI_API | 
					
						
							|  |  |  | app.state.config.OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS | 
					
						
							|  |  |  | app.state.config.OPENAI_API_KEYS = OPENAI_API_KEYS | 
					
						
							|  |  |  | app.state.config.OPENAI_API_CONFIGS = OPENAI_API_CONFIGS | 
					
						
							| 
									
										
										
										
											2024-10-20 11:34:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 19:38:45 +08:00
										 |  |  | app.state.OPENAI_MODELS = {} | 
					
						
							| 
									
										
										
										
											2024-06-13 04:34:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # WEBUI | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-07-02 10:33:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-26 00:50:57 +08:00
										 |  |  | app.state.config.WEBUI_URL = WEBUI_URL | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP | 
					
						
							|  |  |  | app.state.config.ENABLE_LOGIN_FORM = ENABLE_LOGIN_FORM | 
					
						
							| 
									
										
										
										
											2024-12-27 12:57:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_API_KEY = ENABLE_API_KEY | 
					
						
							| 
									
										
										
										
											2024-12-27 12:57:51 +08:00
										 |  |  | app.state.config.ENABLE_API_KEY_ENDPOINT_RESTRICTIONS = ( | 
					
						
							|  |  |  |     ENABLE_API_KEY_ENDPOINT_RESTRICTIONS | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | app.state.config.API_KEY_ALLOWED_ENDPOINTS = API_KEY_ALLOWED_ENDPOINTS | 
					
						
							| 
									
										
										
										
											2024-06-10 05:25:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN | 
					
						
							| 
									
										
										
										
											2024-06-10 05:25:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.SHOW_ADMIN_DETAILS = SHOW_ADMIN_DETAILS | 
					
						
							|  |  |  | app.state.config.ADMIN_EMAIL = ADMIN_EMAIL | 
					
						
							| 
									
										
										
										
											2024-06-10 06:19:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.USER_PERMISSIONS = USER_PERMISSIONS | 
					
						
							| 
									
										
										
										
											2024-05-10 15:03:24 +08:00
										 |  |  | app.state.config.WEBHOOK_URL = WEBHOOK_URL | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.BANNERS = WEBUI_BANNERS | 
					
						
							|  |  |  | app.state.config.MODEL_ORDER_LIST = MODEL_ORDER_LIST | 
					
						
							| 
									
										
										
										
											2024-09-21 06:30:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-23 12:02:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | app.state.config.ENABLE_CHANNELS = ENABLE_CHANNELS | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_COMMUNITY_SHARING = ENABLE_COMMUNITY_SHARING | 
					
						
							|  |  |  | app.state.config.ENABLE_MESSAGE_RATING = ENABLE_MESSAGE_RATING | 
					
						
							| 
									
										
										
										
											2024-09-07 11:50:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_EVALUATION_ARENA_MODELS = ENABLE_EVALUATION_ARENA_MODELS | 
					
						
							|  |  |  | app.state.config.EVALUATION_ARENA_MODELS = EVALUATION_ARENA_MODELS | 
					
						
							| 
									
										
										
										
											2024-09-08 07:51:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.OAUTH_USERNAME_CLAIM = OAUTH_USERNAME_CLAIM | 
					
						
							|  |  |  | app.state.config.OAUTH_PICTURE_CLAIM = OAUTH_PICTURE_CLAIM | 
					
						
							|  |  |  | app.state.config.OAUTH_EMAIL_CLAIM = OAUTH_EMAIL_CLAIM | 
					
						
							| 
									
										
										
										
											2024-09-08 08:17:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_OAUTH_ROLE_MANAGEMENT = ENABLE_OAUTH_ROLE_MANAGEMENT | 
					
						
							|  |  |  | app.state.config.OAUTH_ROLES_CLAIM = OAUTH_ROLES_CLAIM | 
					
						
							|  |  |  | app.state.config.OAUTH_ALLOWED_ROLES = OAUTH_ALLOWED_ROLES | 
					
						
							|  |  |  | app.state.config.OAUTH_ADMIN_ROLES = OAUTH_ADMIN_ROLES | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_LDAP = ENABLE_LDAP | 
					
						
							|  |  |  | app.state.config.LDAP_SERVER_LABEL = LDAP_SERVER_LABEL | 
					
						
							|  |  |  | app.state.config.LDAP_SERVER_HOST = LDAP_SERVER_HOST | 
					
						
							|  |  |  | app.state.config.LDAP_SERVER_PORT = LDAP_SERVER_PORT | 
					
						
							| 
									
										
										
										
											2025-01-10 08:53:03 +08:00
										 |  |  | app.state.config.LDAP_ATTRIBUTE_FOR_MAIL = LDAP_ATTRIBUTE_FOR_MAIL | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.LDAP_ATTRIBUTE_FOR_USERNAME = LDAP_ATTRIBUTE_FOR_USERNAME | 
					
						
							|  |  |  | app.state.config.LDAP_APP_DN = LDAP_APP_DN | 
					
						
							|  |  |  | app.state.config.LDAP_APP_PASSWORD = LDAP_APP_PASSWORD | 
					
						
							|  |  |  | app.state.config.LDAP_SEARCH_BASE = LDAP_SEARCH_BASE | 
					
						
							|  |  |  | app.state.config.LDAP_SEARCH_FILTERS = LDAP_SEARCH_FILTERS | 
					
						
							|  |  |  | app.state.config.LDAP_USE_TLS = LDAP_USE_TLS | 
					
						
							|  |  |  | app.state.config.LDAP_CA_CERT_FILE = LDAP_CA_CERT_FILE | 
					
						
							|  |  |  | app.state.config.LDAP_CIPHERS = LDAP_CIPHERS | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-07 11:50:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER | 
					
						
							|  |  |  | app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER | 
					
						
							| 
									
										
										
										
											2024-06-13 12:18:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.TOOLS = {} | 
					
						
							|  |  |  | app.state.FUNCTIONS = {} | 
					
						
							| 
									
										
										
										
											2024-07-02 10:33:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-13 12:18:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # RETRIEVAL | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-13 12:18:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.state.config.TOP_K = RAG_TOP_K | 
					
						
							|  |  |  | app.state.config.RELEVANCE_THRESHOLD = RAG_RELEVANCE_THRESHOLD | 
					
						
							|  |  |  | app.state.config.FILE_MAX_SIZE = RAG_FILE_MAX_SIZE | 
					
						
							|  |  |  | app.state.config.FILE_MAX_COUNT = RAG_FILE_MAX_COUNT | 
					
						
							| 
									
										
										
										
											2024-06-13 12:18:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.state.config.ENABLE_RAG_HYBRID_SEARCH = ENABLE_RAG_HYBRID_SEARCH | 
					
						
							|  |  |  | app.state.config.ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = ( | 
					
						
							|  |  |  |     ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-06-13 12:18:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.state.config.CONTENT_EXTRACTION_ENGINE = CONTENT_EXTRACTION_ENGINE | 
					
						
							|  |  |  | app.state.config.TIKA_SERVER_URL = TIKA_SERVER_URL | 
					
						
							| 
									
										
										
										
											2025-02-14 20:08:03 +08:00
										 |  |  | app.state.config.DOCLING_SERVER_URL = DOCLING_SERVER_URL | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | app.state.config.TEXT_SPLITTER = RAG_TEXT_SPLITTER | 
					
						
							|  |  |  | app.state.config.TIKTOKEN_ENCODING_NAME = TIKTOKEN_ENCODING_NAME | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.CHUNK_SIZE = CHUNK_SIZE | 
					
						
							|  |  |  | app.state.config.CHUNK_OVERLAP = CHUNK_OVERLAP | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.RAG_EMBEDDING_ENGINE = RAG_EMBEDDING_ENGINE | 
					
						
							|  |  |  | app.state.config.RAG_EMBEDDING_MODEL = RAG_EMBEDDING_MODEL | 
					
						
							|  |  |  | app.state.config.RAG_EMBEDDING_BATCH_SIZE = RAG_EMBEDDING_BATCH_SIZE | 
					
						
							|  |  |  | app.state.config.RAG_RERANKING_MODEL = RAG_RERANKING_MODEL | 
					
						
							|  |  |  | app.state.config.RAG_TEMPLATE = RAG_TEMPLATE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.RAG_OPENAI_API_BASE_URL = RAG_OPENAI_API_BASE_URL | 
					
						
							|  |  |  | app.state.config.RAG_OPENAI_API_KEY = RAG_OPENAI_API_KEY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.RAG_OLLAMA_BASE_URL = RAG_OLLAMA_BASE_URL | 
					
						
							|  |  |  | app.state.config.RAG_OLLAMA_API_KEY = RAG_OLLAMA_API_KEY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.PDF_EXTRACT_IMAGES = PDF_EXTRACT_IMAGES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.YOUTUBE_LOADER_LANGUAGE = YOUTUBE_LOADER_LANGUAGE | 
					
						
							|  |  |  | app.state.config.YOUTUBE_LOADER_PROXY_URL = YOUTUBE_LOADER_PROXY_URL | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.ENABLE_RAG_WEB_SEARCH = ENABLE_RAG_WEB_SEARCH | 
					
						
							|  |  |  | app.state.config.RAG_WEB_SEARCH_ENGINE = RAG_WEB_SEARCH_ENGINE | 
					
						
							|  |  |  | app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST = RAG_WEB_SEARCH_DOMAIN_FILTER_LIST | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  | app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION = ENABLE_GOOGLE_DRIVE_INTEGRATION | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.state.config.SEARXNG_QUERY_URL = SEARXNG_QUERY_URL | 
					
						
							|  |  |  | app.state.config.GOOGLE_PSE_API_KEY = GOOGLE_PSE_API_KEY | 
					
						
							|  |  |  | app.state.config.GOOGLE_PSE_ENGINE_ID = GOOGLE_PSE_ENGINE_ID | 
					
						
							|  |  |  | app.state.config.BRAVE_SEARCH_API_KEY = BRAVE_SEARCH_API_KEY | 
					
						
							|  |  |  | app.state.config.KAGI_SEARCH_API_KEY = KAGI_SEARCH_API_KEY | 
					
						
							|  |  |  | app.state.config.MOJEEK_SEARCH_API_KEY = MOJEEK_SEARCH_API_KEY | 
					
						
							|  |  |  | app.state.config.SERPSTACK_API_KEY = SERPSTACK_API_KEY | 
					
						
							|  |  |  | app.state.config.SERPSTACK_HTTPS = SERPSTACK_HTTPS | 
					
						
							|  |  |  | app.state.config.SERPER_API_KEY = SERPER_API_KEY | 
					
						
							|  |  |  | app.state.config.SERPLY_API_KEY = SERPLY_API_KEY | 
					
						
							|  |  |  | app.state.config.TAVILY_API_KEY = TAVILY_API_KEY | 
					
						
							|  |  |  | app.state.config.SEARCHAPI_API_KEY = SEARCHAPI_API_KEY | 
					
						
							|  |  |  | app.state.config.SEARCHAPI_ENGINE = SEARCHAPI_ENGINE | 
					
						
							|  |  |  | app.state.config.JINA_API_KEY = JINA_API_KEY | 
					
						
							|  |  |  | app.state.config.BING_SEARCH_V7_ENDPOINT = BING_SEARCH_V7_ENDPOINT | 
					
						
							|  |  |  | app.state.config.BING_SEARCH_V7_SUBSCRIPTION_KEY = BING_SEARCH_V7_SUBSCRIPTION_KEY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.state.config.RAG_WEB_SEARCH_RESULT_COUNT = RAG_WEB_SEARCH_RESULT_COUNT | 
					
						
							|  |  |  | app.state.config.RAG_WEB_SEARCH_CONCURRENT_REQUESTS = RAG_WEB_SEARCH_CONCURRENT_REQUESTS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  | app.state.EMBEDDING_FUNCTION = None | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  | app.state.ef = None | 
					
						
							|  |  |  | app.state.rf = None | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | app.state.YOUTUBE_LOADER_TRANSLATION = None | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-25 10:39:53 +08:00
										 |  |  | try: | 
					
						
							|  |  |  |     app.state.ef = get_ef( | 
					
						
							|  |  |  |         app.state.config.RAG_EMBEDDING_ENGINE, | 
					
						
							|  |  |  |         app.state.config.RAG_EMBEDDING_MODEL, | 
					
						
							|  |  |  |         RAG_EMBEDDING_MODEL_AUTO_UPDATE, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     app.state.rf = get_rf( | 
					
						
							|  |  |  |         app.state.config.RAG_RERANKING_MODEL, | 
					
						
							|  |  |  |         RAG_RERANKING_MODEL_AUTO_UPDATE, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | except Exception as e: | 
					
						
							|  |  |  |     log.error(f"Error updating models: {e}") | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  | app.state.EMBEDDING_FUNCTION = get_embedding_function( | 
					
						
							|  |  |  |     app.state.config.RAG_EMBEDDING_ENGINE, | 
					
						
							|  |  |  |     app.state.config.RAG_EMBEDDING_MODEL, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |     app.state.ef, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  |     ( | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |         app.state.config.RAG_OPENAI_API_BASE_URL | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  |         if app.state.config.RAG_EMBEDDING_ENGINE == "openai" | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |         else app.state.config.RAG_OLLAMA_BASE_URL | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  |     ), | 
					
						
							|  |  |  |     ( | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |         app.state.config.RAG_OPENAI_API_KEY | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  |         if app.state.config.RAG_EMBEDDING_ENGINE == "openai" | 
					
						
							| 
									
										
										
										
											2024-12-12 10:46:29 +08:00
										 |  |  |         else app.state.config.RAG_OLLAMA_API_KEY | 
					
						
							| 
									
										
										
										
											2024-12-12 10:08:55 +08:00
										 |  |  |     ), | 
					
						
							|  |  |  |     app.state.config.RAG_EMBEDDING_BATCH_SIZE, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-09-21 06:30:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-13 04:34:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # IMAGES | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-07-02 10:33:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.IMAGE_GENERATION_ENGINE = IMAGE_GENERATION_ENGINE | 
					
						
							|  |  |  | app.state.config.ENABLE_IMAGE_GENERATION = ENABLE_IMAGE_GENERATION | 
					
						
							| 
									
										
										
										
											2025-01-16 16:13:02 +08:00
										 |  |  | app.state.config.ENABLE_IMAGE_PROMPT_GENERATION = ENABLE_IMAGE_PROMPT_GENERATION | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.IMAGES_OPENAI_API_BASE_URL = IMAGES_OPENAI_API_BASE_URL | 
					
						
							|  |  |  | app.state.config.IMAGES_OPENAI_API_KEY = IMAGES_OPENAI_API_KEY | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.IMAGE_GENERATION_MODEL = IMAGE_GENERATION_MODEL | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.AUTOMATIC1111_BASE_URL = AUTOMATIC1111_BASE_URL | 
					
						
							|  |  |  | app.state.config.AUTOMATIC1111_API_AUTH = AUTOMATIC1111_API_AUTH | 
					
						
							|  |  |  | app.state.config.AUTOMATIC1111_CFG_SCALE = AUTOMATIC1111_CFG_SCALE | 
					
						
							|  |  |  | app.state.config.AUTOMATIC1111_SAMPLER = AUTOMATIC1111_SAMPLER | 
					
						
							|  |  |  | app.state.config.AUTOMATIC1111_SCHEDULER = AUTOMATIC1111_SCHEDULER | 
					
						
							|  |  |  | app.state.config.COMFYUI_BASE_URL = COMFYUI_BASE_URL | 
					
						
							| 
									
										
										
										
											2024-12-17 15:29:00 +08:00
										 |  |  | app.state.config.COMFYUI_API_KEY = COMFYUI_API_KEY | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.COMFYUI_WORKFLOW = COMFYUI_WORKFLOW | 
					
						
							|  |  |  | app.state.config.COMFYUI_WORKFLOW_NODES = COMFYUI_WORKFLOW_NODES | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.IMAGE_SIZE = IMAGE_SIZE | 
					
						
							|  |  |  | app.state.config.IMAGE_STEPS = IMAGE_STEPS | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-21 06:30:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # AUDIO | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.STT_OPENAI_API_BASE_URL = AUDIO_STT_OPENAI_API_BASE_URL | 
					
						
							|  |  |  | app.state.config.STT_OPENAI_API_KEY = AUDIO_STT_OPENAI_API_KEY | 
					
						
							|  |  |  | app.state.config.STT_ENGINE = AUDIO_STT_ENGINE | 
					
						
							|  |  |  | app.state.config.STT_MODEL = AUDIO_STT_MODEL | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.WHISPER_MODEL = WHISPER_MODEL | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.TTS_OPENAI_API_BASE_URL = AUDIO_TTS_OPENAI_API_BASE_URL | 
					
						
							|  |  |  | app.state.config.TTS_OPENAI_API_KEY = AUDIO_TTS_OPENAI_API_KEY | 
					
						
							|  |  |  | app.state.config.TTS_ENGINE = AUDIO_TTS_ENGINE | 
					
						
							|  |  |  | app.state.config.TTS_MODEL = AUDIO_TTS_MODEL | 
					
						
							|  |  |  | app.state.config.TTS_VOICE = AUDIO_TTS_VOICE | 
					
						
							|  |  |  | app.state.config.TTS_API_KEY = AUDIO_TTS_API_KEY | 
					
						
							|  |  |  | app.state.config.TTS_SPLIT_ON = AUDIO_TTS_SPLIT_ON | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.TTS_AZURE_SPEECH_REGION = AUDIO_TTS_AZURE_SPEECH_REGION | 
					
						
							|  |  |  | app.state.config.TTS_AZURE_SPEECH_OUTPUT_FORMAT = AUDIO_TTS_AZURE_SPEECH_OUTPUT_FORMAT | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.faster_whisper_model = None | 
					
						
							|  |  |  | app.state.speech_synthesiser = None | 
					
						
							|  |  |  | app.state.speech_speaker_embeddings_dataset = None | 
					
						
							| 
									
										
										
										
											2024-08-19 02:59:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | # TASKS | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-05-30 17:04:29 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-10 05:53:10 +08:00
										 |  |  | app.state.config.TASK_MODEL = TASK_MODEL | 
					
						
							|  |  |  | app.state.config.TASK_MODEL_EXTERNAL = TASK_MODEL_EXTERNAL | 
					
						
							| 
									
										
										
										
											2024-05-30 17:04:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-30 13:41:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.ENABLE_SEARCH_QUERY_GENERATION = ENABLE_SEARCH_QUERY_GENERATION | 
					
						
							|  |  |  | app.state.config.ENABLE_RETRIEVAL_QUERY_GENERATION = ENABLE_RETRIEVAL_QUERY_GENERATION | 
					
						
							| 
									
										
										
										
											2024-12-01 10:30:59 +08:00
										 |  |  | app.state.config.ENABLE_AUTOCOMPLETE_GENERATION = ENABLE_AUTOCOMPLETE_GENERATION | 
					
						
							| 
									
										
										
										
											2024-11-06 10:32:08 +08:00
										 |  |  | app.state.config.ENABLE_TAGS_GENERATION = ENABLE_TAGS_GENERATION | 
					
						
							| 
									
										
										
										
											2024-05-30 12:26:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE = TITLE_GENERATION_PROMPT_TEMPLATE | 
					
						
							|  |  |  | app.state.config.TAGS_GENERATION_PROMPT_TEMPLATE = TAGS_GENERATION_PROMPT_TEMPLATE | 
					
						
							| 
									
										
										
										
											2025-01-16 16:06:37 +08:00
										 |  |  | app.state.config.IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE = ( | 
					
						
							|  |  |  |     IMAGE_PROMPT_GENERATION_PROMPT_TEMPLATE | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE = ( | 
					
						
							|  |  |  |     TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-11-19 18:24:32 +08:00
										 |  |  | app.state.config.QUERY_GENERATION_PROMPT_TEMPLATE = QUERY_GENERATION_PROMPT_TEMPLATE | 
					
						
							| 
									
										
										
										
											2024-11-29 15:53:52 +08:00
										 |  |  | app.state.config.AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE = ( | 
					
						
							|  |  |  |     AUTOCOMPLETE_GENERATION_PROMPT_TEMPLATE | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.state.config.AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH = ( | 
					
						
							|  |  |  |     AUTOCOMPLETE_GENERATION_INPUT_MAX_LENGTH | 
					
						
							| 
									
										
										
										
											2024-06-11 14:40:27 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-05-30 12:26:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 19:38:45 +08:00
										 |  |  | ######################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # WEBUI | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ######################################## | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 19:38:45 +08:00
										 |  |  | app.state.MODELS = {} | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  | class RedirectMiddleware(BaseHTTPMiddleware): | 
					
						
							|  |  |  |     async def dispatch(self, request: Request, call_next): | 
					
						
							|  |  |  |         # Check if the request is a GET request | 
					
						
							|  |  |  |         if request.method == "GET": | 
					
						
							|  |  |  |             path = request.url.path | 
					
						
							|  |  |  |             query_params = dict(parse_qs(urlparse(str(request.url)).query)) | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  |             # Check for the specific watch path and the presence of 'v' parameter | 
					
						
							|  |  |  |             if path.endswith("/watch") and "v" in query_params: | 
					
						
							|  |  |  |                 video_id = query_params["v"][0]  # Extract the first 'v' parameter | 
					
						
							|  |  |  |                 encoded_video_id = urlencode({"youtube": video_id}) | 
					
						
							|  |  |  |                 redirect_url = f"/?{encoded_video_id}" | 
					
						
							|  |  |  |                 return RedirectResponse(url=redirect_url) | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  |         # Proceed with the normal flow of other requests | 
					
						
							|  |  |  |         response = await call_next(request) | 
					
						
							|  |  |  |         return response | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  | # Add the middleware to the app | 
					
						
							|  |  |  | app.add_middleware(RedirectMiddleware) | 
					
						
							| 
									
										
										
										
											2024-09-17 08:53:30 +08:00
										 |  |  | app.add_middleware(SecurityHeadersMiddleware) | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-24 19:06:15 +08:00
										 |  |  | @app.middleware("http") | 
					
						
							| 
									
										
										
										
											2024-06-24 19:45:33 +08:00
										 |  |  | async def commit_session_after_request(request: Request, call_next): | 
					
						
							| 
									
										
										
										
											2024-06-24 19:06:15 +08:00
										 |  |  |     response = await call_next(request) | 
					
						
							| 
									
										
										
										
											2024-11-23 12:11:46 +08:00
										 |  |  |     # log.debug("Commit session after request") | 
					
						
							| 
									
										
										
										
											2024-06-24 19:06:15 +08:00
										 |  |  |     Session.commit() | 
					
						
							|  |  |  |     return response | 
					
						
							| 
									
										
										
										
											2024-06-06 04:57:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  | @app.middleware("http") | 
					
						
							|  |  |  | async def check_url(request: Request, call_next): | 
					
						
							|  |  |  |     start_time = int(time.time()) | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |     request.state.enable_api_key = app.state.config.ENABLE_API_KEY | 
					
						
							| 
									
										
										
										
											2023-11-15 08:28:51 +08:00
										 |  |  |     response = await call_next(request) | 
					
						
							|  |  |  |     process_time = int(time.time()) - start_time | 
					
						
							|  |  |  |     response.headers["X-Process-Time"] = str(process_time) | 
					
						
							|  |  |  |     return response | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-08 18:54:56 +08:00
										 |  |  | @app.middleware("http") | 
					
						
							|  |  |  | async def inspect_websocket(request: Request, call_next): | 
					
						
							|  |  |  |     if ( | 
					
						
							| 
									
										
										
										
											2024-10-21 09:38:06 +08:00
										 |  |  |         "/ws/socket.io" in request.url.path | 
					
						
							|  |  |  |         and request.query_params.get("transport") == "websocket" | 
					
						
							| 
									
										
										
										
											2024-09-08 18:54:56 +08:00
										 |  |  |     ): | 
					
						
							|  |  |  |         upgrade = (request.headers.get("Upgrade") or "").lower() | 
					
						
							|  |  |  |         connection = (request.headers.get("Connection") or "").lower().split(",") | 
					
						
							|  |  |  |         # Check that there's the correct headers for an upgrade, else reject the connection | 
					
						
							|  |  |  |         # This is to work around this upstream issue: https://github.com/miguelgrinberg/python-engineio/issues/367 | 
					
						
							|  |  |  |         if upgrade != "websocket" or "upgrade" not in connection: | 
					
						
							|  |  |  |             return JSONResponse( | 
					
						
							|  |  |  |                 status_code=status.HTTP_400_BAD_REQUEST, | 
					
						
							|  |  |  |                 content={"detail": "Invalid WebSocket upgrade request"}, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |     return await call_next(request) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | app.add_middleware( | 
					
						
							|  |  |  |     CORSMiddleware, | 
					
						
							|  |  |  |     allow_origins=CORS_ALLOW_ORIGIN, | 
					
						
							|  |  |  |     allow_credentials=True, | 
					
						
							|  |  |  |     allow_methods=["*"], | 
					
						
							|  |  |  |     allow_headers=["*"], | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-04 14:39:52 +08:00
										 |  |  | app.mount("/ws", socket_app) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:36:59 +08:00
										 |  |  | app.include_router(ollama.router, prefix="/ollama", tags=["ollama"]) | 
					
						
							|  |  |  | app.include_router(openai.router, prefix="/openai", tags=["openai"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | app.include_router(pipelines.router, prefix="/api/v1/pipelines", tags=["pipelines"]) | 
					
						
							|  |  |  | app.include_router(tasks.router, prefix="/api/v1/tasks", tags=["tasks"]) | 
					
						
							| 
									
										
										
										
											2024-12-12 09:50:48 +08:00
										 |  |  | app.include_router(images.router, prefix="/api/v1/images", tags=["images"]) | 
					
						
							|  |  |  | app.include_router(audio.router, prefix="/api/v1/audio", tags=["audio"]) | 
					
						
							|  |  |  | app.include_router(retrieval.router, prefix="/api/v1/retrieval", tags=["retrieval"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.include_router(configs.router, prefix="/api/v1/configs", tags=["configs"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.include_router(auths.router, prefix="/api/v1/auths", tags=["auths"]) | 
					
						
							|  |  |  | app.include_router(users.router, prefix="/api/v1/users", tags=["users"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-22 18:42:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | app.include_router(channels.router, prefix="/api/v1/channels", tags=["channels"]) | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.include_router(chats.router, prefix="/api/v1/chats", tags=["chats"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.include_router(models.router, prefix="/api/v1/models", tags=["models"]) | 
					
						
							|  |  |  | app.include_router(knowledge.router, prefix="/api/v1/knowledge", tags=["knowledge"]) | 
					
						
							|  |  |  | app.include_router(prompts.router, prefix="/api/v1/prompts", tags=["prompts"]) | 
					
						
							|  |  |  | app.include_router(tools.router, prefix="/api/v1/tools", tags=["tools"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 18:41:25 +08:00
										 |  |  | app.include_router(memories.router, prefix="/api/v1/memories", tags=["memories"]) | 
					
						
							|  |  |  | app.include_router(folders.router, prefix="/api/v1/folders", tags=["folders"]) | 
					
						
							|  |  |  | app.include_router(groups.router, prefix="/api/v1/groups", tags=["groups"]) | 
					
						
							|  |  |  | app.include_router(files.router, prefix="/api/v1/files", tags=["files"]) | 
					
						
							|  |  |  | app.include_router(functions.router, prefix="/api/v1/functions", tags=["functions"]) | 
					
						
							|  |  |  | app.include_router( | 
					
						
							|  |  |  |     evaluations.router, prefix="/api/v1/evaluations", tags=["evaluations"] | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | app.include_router(utils.router, prefix="/api/v1/utils", tags=["utils"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:36:59 +08:00
										 |  |  | ################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Chat Endpoints | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ################################## | 
					
						
							| 
									
										
										
										
											2024-05-30 13:03:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | @app.get("/api/models") | 
					
						
							|  |  |  | async def get_models(request: Request, user=Depends(get_verified_user)): | 
					
						
							|  |  |  |     def get_filtered_models(models, user): | 
					
						
							|  |  |  |         filtered_models = [] | 
					
						
							|  |  |  |         for model in models: | 
					
						
							|  |  |  |             if model.get("arena"): | 
					
						
							|  |  |  |                 if has_access( | 
					
						
							|  |  |  |                     user.id, | 
					
						
							|  |  |  |                     type="read", | 
					
						
							|  |  |  |                     access_control=model.get("info", {}) | 
					
						
							|  |  |  |                     .get("meta", {}) | 
					
						
							|  |  |  |                     .get("access_control", {}), | 
					
						
							| 
									
										
										
										
											2024-05-25 11:29:13 +08:00
										 |  |  |                 ): | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |                     filtered_models.append(model) | 
					
						
							|  |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2024-05-30 12:26:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |             model_info = Models.get_model_by_id(model["id"]) | 
					
						
							|  |  |  |             if model_info: | 
					
						
							|  |  |  |                 if user.id == model_info.user_id or has_access( | 
					
						
							|  |  |  |                     user.id, type="read", access_control=model_info.access_control | 
					
						
							|  |  |  |                 ): | 
					
						
							|  |  |  |                     filtered_models.append(model) | 
					
						
							| 
									
										
										
										
											2024-05-30 12:26:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |         return filtered_models | 
					
						
							| 
									
										
										
										
											2024-05-29 03:04:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 12:15:23 +08:00
										 |  |  |     models = await get_all_models(request) | 
					
						
							| 
									
										
										
										
											2024-05-29 03:04:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-28 10:34:05 +08:00
										 |  |  |     # Filter out filter pipelines | 
					
						
							| 
									
										
										
										
											2024-05-28 10:03:26 +08:00
										 |  |  |     models = [ | 
					
						
							|  |  |  |         model | 
					
						
							|  |  |  |         for model in models | 
					
						
							| 
									
										
										
										
											2024-05-29 02:43:48 +08:00
										 |  |  |         if "pipeline" not in model or model["pipeline"].get("type", None) != "filter" | 
					
						
							| 
									
										
										
										
											2024-05-28 10:03:26 +08:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |     model_order_list = request.app.state.config.MODEL_ORDER_LIST | 
					
						
							| 
									
										
										
										
											2024-11-26 16:55:58 +08:00
										 |  |  |     if model_order_list: | 
					
						
							|  |  |  |         model_order_dict = {model_id: i for i, model_id in enumerate(model_order_list)} | 
					
						
							|  |  |  |         # Sort models by order list priority, with fallback for those not in the list | 
					
						
							|  |  |  |         models.sort( | 
					
						
							|  |  |  |             key=lambda x: (model_order_dict.get(x["id"], float("inf")), x["name"]) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-16 20:41:07 +08:00
										 |  |  |     # Filter out models that the user does not have access to | 
					
						
							| 
									
										
										
										
											2024-12-02 10:25:44 +08:00
										 |  |  |     if user.role == "user" and not BYPASS_MODEL_ACCESS_CONTROL: | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |         models = get_filtered_models(models, user) | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-23 12:11:46 +08:00
										 |  |  |     log.debug( | 
					
						
							|  |  |  |         f"/api/models returned filtered models accessible to the user: {json.dumps([model['id'] for model in models])}" | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2024-05-24 16:40:48 +08:00
										 |  |  |     return {"data": models} | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-16 11:14:24 +08:00
										 |  |  | @app.get("/api/models/base") | 
					
						
							| 
									
										
										
										
											2024-12-12 12:26:24 +08:00
										 |  |  | async def get_base_models(request: Request, user=Depends(get_admin_user)): | 
					
						
							|  |  |  |     models = await get_all_base_models(request) | 
					
						
							| 
									
										
										
										
											2024-11-16 11:14:24 +08:00
										 |  |  |     return {"data": models} | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-29 04:05:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  | @app.post("/api/chat/completions") | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | async def chat_completion( | 
					
						
							| 
									
										
										
										
											2024-12-12 12:39:55 +08:00
										 |  |  |     request: Request, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  |     form_data: dict, | 
					
						
							|  |  |  |     user=Depends(get_verified_user), | 
					
						
							|  |  |  | ): | 
					
						
							| 
									
										
										
										
											2024-12-13 14:32:28 +08:00
										 |  |  |     if not request.app.state.MODELS: | 
					
						
							|  |  |  |         await get_all_models(request) | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  |     tasks = form_data.pop("background_tasks", None) | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |     try: | 
					
						
							|  |  |  |         model_id = form_data.get("model", None) | 
					
						
							|  |  |  |         if model_id not in request.app.state.MODELS: | 
					
						
							|  |  |  |             raise Exception("Model not found") | 
					
						
							|  |  |  |         model = request.app.state.MODELS[model_id] | 
					
						
							| 
									
										
										
										
											2024-05-29 04:05:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |         # Check if user has access to the model | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  |         if not BYPASS_MODEL_ACCESS_CONTROL and user.role == "user": | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |                 check_model_access(user, model) | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 raise e | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  |         metadata = { | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  |             "user_id": user.id, | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  |             "chat_id": form_data.pop("chat_id", None), | 
					
						
							|  |  |  |             "message_id": form_data.pop("id", None), | 
					
						
							|  |  |  |             "session_id": form_data.pop("session_id", None), | 
					
						
							|  |  |  |             "tool_ids": form_data.get("tool_ids", None), | 
					
						
							|  |  |  |             "files": form_data.get("files", None), | 
					
						
							| 
									
										
										
										
											2024-12-25 08:52:57 +08:00
										 |  |  |             "features": form_data.get("features", None), | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |         form_data["metadata"] = metadata | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         form_data, events = await process_chat_payload( | 
					
						
							|  |  |  |             request, form_data, metadata, user, model | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |     except Exception as e: | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         raise HTTPException( | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |             status_code=status.HTTP_400_BAD_REQUEST, | 
					
						
							|  |  |  |             detail=str(e), | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  |         response = await chat_completion_handler(request, form_data, user) | 
					
						
							|  |  |  |         return await process_chat_response( | 
					
						
							| 
									
										
										
										
											2024-12-25 14:45:21 +08:00
										 |  |  |             request, response, form_data, user, events, metadata, tasks | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |     except Exception as e: | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         raise HTTPException( | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |             status_code=status.HTTP_400_BAD_REQUEST, | 
					
						
							|  |  |  |             detail=str(e), | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-13 14:28:42 +08:00
										 |  |  | # Alias for chat_completion (Legacy) | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  | generate_chat_completions = chat_completion | 
					
						
							|  |  |  | generate_chat_completion = chat_completion | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @app.post("/api/chat/completed") | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  | async def chat_completed( | 
					
						
							|  |  |  |     request: Request, form_data: dict, user=Depends(get_verified_user) | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | ): | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |         return await chat_completed_handler(request, form_data, user) | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |     except Exception as e: | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |         raise HTTPException( | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |             status_code=status.HTTP_400_BAD_REQUEST, | 
					
						
							|  |  |  |             detail=str(e), | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-12 10:05:42 +08:00
										 |  |  | @app.post("/api/chat/actions/{action_id}") | 
					
						
							| 
									
										
										
										
											2024-12-12 12:39:55 +08:00
										 |  |  | async def chat_action( | 
					
						
							|  |  |  |     request: Request, action_id: str, form_data: dict, user=Depends(get_verified_user) | 
					
						
							|  |  |  | ): | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |     try: | 
					
						
							|  |  |  |         return await chat_action_handler(request, action_id, form_data, user) | 
					
						
							| 
									
										
										
										
											2024-05-30 13:18:27 +08:00
										 |  |  |     except Exception as e: | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         raise HTTPException( | 
					
						
							| 
									
										
										
										
											2024-12-13 12:22:17 +08:00
										 |  |  |             status_code=status.HTTP_400_BAD_REQUEST, | 
					
						
							|  |  |  |             detail=str(e), | 
					
						
							| 
									
										
										
										
											2024-05-29 03:32:49 +08:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-19 17:00:32 +08:00
										 |  |  | @app.post("/api/tasks/stop/{task_id}") | 
					
						
							|  |  |  | async def stop_task_endpoint(task_id: str, user=Depends(get_verified_user)): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         result = await stop_task(task_id)  # Use the function from tasks.py | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  |     except ValueError as e: | 
					
						
							|  |  |  |         raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(e)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @app.get("/api/tasks") | 
					
						
							|  |  |  | async def list_tasks_endpoint(user=Depends(get_verified_user)): | 
					
						
							|  |  |  |     return {"tasks": list_tasks()}  # Use the function from tasks.py | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | ################################## | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Config Endpoints | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ################################## | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-22 10:12:01 +08:00
										 |  |  | @app.get("/api/config") | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  | async def get_app_config(request: Request): | 
					
						
							|  |  |  |     user = None | 
					
						
							|  |  |  |     if "token" in request.cookies: | 
					
						
							|  |  |  |         token = request.cookies.get("token") | 
					
						
							| 
									
										
										
										
											2024-11-06 13:14:02 +08:00
										 |  |  |         try: | 
					
						
							|  |  |  |             data = decode_token(token) | 
					
						
							|  |  |  |         except Exception as e: | 
					
						
							|  |  |  |             log.debug(e) | 
					
						
							|  |  |  |             raise HTTPException( | 
					
						
							|  |  |  |                 status_code=status.HTTP_401_UNAUTHORIZED, | 
					
						
							|  |  |  |                 detail="Invalid token", | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |         if data is not None and "id" in data: | 
					
						
							|  |  |  |             user = Users.get_user_by_id(data["id"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-06 12:47:23 +08:00
										 |  |  |     onboarding = False | 
					
						
							| 
									
										
										
										
											2024-11-03 19:00:28 +08:00
										 |  |  |     if user is None: | 
					
						
							|  |  |  |         user_count = Users.get_num_users() | 
					
						
							| 
									
										
										
										
											2024-11-06 12:47:23 +08:00
										 |  |  |         onboarding = user_count == 0 | 
					
						
							| 
									
										
										
										
											2024-11-03 19:00:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-22 10:12:01 +08:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2024-11-06 12:47:23 +08:00
										 |  |  |         **({"onboarding": True} if onboarding else {}), | 
					
						
							| 
									
										
										
										
											2024-02-22 10:12:01 +08:00
										 |  |  |         "status": True, | 
					
						
							| 
									
										
										
										
											2024-02-24 09:12:19 +08:00
										 |  |  |         "name": WEBUI_NAME, | 
					
						
							| 
									
										
										
										
											2024-02-23 16:30:26 +08:00
										 |  |  |         "version": VERSION, | 
					
						
							| 
									
										
										
										
											2024-07-01 05:48:05 +08:00
										 |  |  |         "default_locale": str(DEFAULT_LOCALE), | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |         "oauth": { | 
					
						
							|  |  |  |             "providers": { | 
					
						
							|  |  |  |                 name: config.get("name", name) | 
					
						
							|  |  |  |                 for name, config in OAUTH_PROVIDERS.items() | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-05-27 04:02:40 +08:00
										 |  |  |         "features": { | 
					
						
							| 
									
										
										
										
											2024-05-27 00:05:26 +08:00
										 |  |  |             "auth": WEBUI_AUTH, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |             "auth_trusted_header": bool(app.state.AUTH_TRUSTED_EMAIL_HEADER), | 
					
						
							|  |  |  |             "enable_ldap": app.state.config.ENABLE_LDAP, | 
					
						
							|  |  |  |             "enable_api_key": app.state.config.ENABLE_API_KEY, | 
					
						
							|  |  |  |             "enable_signup": app.state.config.ENABLE_SIGNUP, | 
					
						
							|  |  |  |             "enable_login_form": app.state.config.ENABLE_LOGIN_FORM, | 
					
						
							| 
									
										
										
										
											2024-12-19 10:32:19 +08:00
										 |  |  |             "enable_websocket": ENABLE_WEBSOCKET_SUPPORT, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |             **( | 
					
						
							|  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2024-12-23 12:02:14 +08:00
										 |  |  |                     "enable_channels": app.state.config.ENABLE_CHANNELS, | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |                     "enable_web_search": app.state.config.ENABLE_RAG_WEB_SEARCH, | 
					
						
							| 
									
										
										
										
											2024-12-19 10:04:56 +08:00
										 |  |  |                     "enable_google_drive_integration": app.state.config.ENABLE_GOOGLE_DRIVE_INTEGRATION, | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |                     "enable_image_generation": app.state.config.ENABLE_IMAGE_GENERATION, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |                     "enable_community_sharing": app.state.config.ENABLE_COMMUNITY_SHARING, | 
					
						
							|  |  |  |                     "enable_message_rating": app.state.config.ENABLE_MESSAGE_RATING, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |                     "enable_admin_export": ENABLE_ADMIN_EXPORT, | 
					
						
							|  |  |  |                     "enable_admin_chat_access": ENABLE_ADMIN_CHAT_ACCESS, | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 if user is not None | 
					
						
							|  |  |  |                 else {} | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2024-06-08 11:18:48 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-12-17 03:51:02 +08:00
										 |  |  |         "google_drive": { | 
					
						
							|  |  |  |             "client_id": GOOGLE_DRIVE_CLIENT_ID.value, | 
					
						
							| 
									
										
										
										
											2024-12-19 01:18:31 +08:00
										 |  |  |             "api_key": GOOGLE_DRIVE_API_KEY.value, | 
					
						
							| 
									
										
										
										
											2024-12-17 03:51:02 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |         **( | 
					
						
							|  |  |  |             { | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |                 "default_models": app.state.config.DEFAULT_MODELS, | 
					
						
							|  |  |  |                 "default_prompt_suggestions": app.state.config.DEFAULT_PROMPT_SUGGESTIONS, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |                 "audio": { | 
					
						
							|  |  |  |                     "tts": { | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |                         "engine": app.state.config.TTS_ENGINE, | 
					
						
							|  |  |  |                         "voice": app.state.config.TTS_VOICE, | 
					
						
							|  |  |  |                         "split_on": app.state.config.TTS_SPLIT_ON, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |                     }, | 
					
						
							|  |  |  |                     "stt": { | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |                         "engine": app.state.config.STT_ENGINE, | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |                     }, | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2024-08-27 23:05:24 +08:00
										 |  |  |                 "file": { | 
					
						
							| 
									
										
										
										
											2024-12-12 11:52:46 +08:00
										 |  |  |                     "max_size": app.state.config.FILE_MAX_SIZE, | 
					
						
							|  |  |  |                     "max_count": app.state.config.FILE_MAX_COUNT, | 
					
						
							| 
									
										
										
										
											2024-08-27 23:05:24 +08:00
										 |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |                 "permissions": {**app.state.config.USER_PERMISSIONS}, | 
					
						
							| 
									
										
										
										
											2024-05-26 15:37:09 +08:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2024-08-19 22:49:40 +08:00
										 |  |  |             if user is not None | 
					
						
							|  |  |  |             else {} | 
					
						
							|  |  |  |         ), | 
					
						
							| 
									
										
										
										
											2024-02-22 10:12:01 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | class UrlForm(BaseModel): | 
					
						
							|  |  |  |     url: str | 
					
						
							| 
									
										
										
										
											2024-06-20 16:51:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-21 09:35:02 +08:00
										 |  |  | @app.get("/api/webhook") | 
					
						
							|  |  |  | async def get_webhook_url(user=Depends(get_admin_user)): | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2024-05-10 15:03:24 +08:00
										 |  |  |         "url": app.state.config.WEBHOOK_URL, | 
					
						
							| 
									
										
										
										
											2024-03-21 09:35:02 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @app.post("/api/webhook") | 
					
						
							|  |  |  | async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)): | 
					
						
							| 
									
										
										
										
											2024-05-10 15:03:24 +08:00
										 |  |  |     app.state.config.WEBHOOK_URL = form_data.url | 
					
						
							| 
									
										
										
										
											2024-12-12 10:53:38 +08:00
										 |  |  |     app.state.WEBHOOK_URL = app.state.config.WEBHOOK_URL | 
					
						
							| 
									
										
										
										
											2024-06-04 12:17:43 +08:00
										 |  |  |     return {"url": app.state.config.WEBHOOK_URL} | 
					
						
							| 
									
										
										
										
											2024-05-27 00:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-05 16:59:35 +08:00
										 |  |  | @app.get("/api/version") | 
					
						
							| 
									
										
										
										
											2024-08-03 21:24:26 +08:00
										 |  |  | async def get_app_version(): | 
					
						
							| 
									
										
										
										
											2024-03-05 16:59:35 +08:00
										 |  |  |     return { | 
					
						
							|  |  |  |         "version": VERSION, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-26 03:26:58 +08:00
										 |  |  | @app.get("/api/version/updates") | 
					
						
							|  |  |  | async def get_app_latest_release_version(): | 
					
						
							| 
									
										
										
										
											2024-10-08 13:13:49 +08:00
										 |  |  |     if OFFLINE_MODE: | 
					
						
							|  |  |  |         log.debug( | 
					
						
							|  |  |  |             f"Offline mode is enabled, returning current version as latest version" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         return {"current": VERSION, "latest": VERSION} | 
					
						
							| 
									
										
										
										
											2024-02-26 03:26:58 +08:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2024-09-27 20:38:56 +08:00
										 |  |  |         timeout = aiohttp.ClientTimeout(total=1) | 
					
						
							|  |  |  |         async with aiohttp.ClientSession(timeout=timeout, trust_env=True) as session: | 
					
						
							| 
									
										
										
										
											2024-04-10 14:03:05 +08:00
										 |  |  |             async with session.get( | 
					
						
							| 
									
										
										
										
											2024-10-21 09:38:06 +08:00
										 |  |  |                 "https://api.github.com/repos/open-webui/open-webui/releases/latest" | 
					
						
							| 
									
										
										
										
											2024-04-10 14:03:05 +08:00
										 |  |  |             ) as response: | 
					
						
							|  |  |  |                 response.raise_for_status() | 
					
						
							|  |  |  |                 data = await response.json() | 
					
						
							|  |  |  |                 latest_version = data["tag_name"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return {"current": VERSION, "latest": latest_version[1:]} | 
					
						
							| 
									
										
										
										
											2024-09-30 22:32:38 +08:00
										 |  |  |     except Exception as e: | 
					
						
							|  |  |  |         log.debug(e) | 
					
						
							| 
									
										
										
										
											2024-09-27 20:38:56 +08:00
										 |  |  |         return {"current": VERSION, "latest": VERSION} | 
					
						
							| 
									
										
										
										
											2024-02-26 03:26:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-10 16:27:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 16:54:13 +08:00
										 |  |  | @app.get("/api/changelog") | 
					
						
							|  |  |  | async def get_app_changelog(): | 
					
						
							|  |  |  |     return {key: CHANGELOG[key] for idx, key in enumerate(CHANGELOG) if idx < 5} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  | ############################ | 
					
						
							|  |  |  | # OAuth Login & Callback | 
					
						
							|  |  |  | ############################ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # SessionMiddleware is used by authlib for oauth | 
					
						
							|  |  |  | if len(OAUTH_PROVIDERS) > 0: | 
					
						
							|  |  |  |     app.add_middleware( | 
					
						
							| 
									
										
										
										
											2024-06-06 02:21:42 +08:00
										 |  |  |         SessionMiddleware, | 
					
						
							|  |  |  |         secret_key=WEBUI_SECRET_KEY, | 
					
						
							|  |  |  |         session_cookie="oui-session", | 
					
						
							|  |  |  |         same_site=WEBUI_SESSION_COOKIE_SAME_SITE, | 
					
						
							| 
									
										
										
										
											2024-06-07 16:13:42 +08:00
										 |  |  |         https_only=WEBUI_SESSION_COOKIE_SECURE, | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @app.get("/oauth/{provider}/login") | 
					
						
							|  |  |  | async def oauth_login(provider: str, request: Request): | 
					
						
							| 
									
										
										
										
											2024-10-16 22:32:57 +08:00
										 |  |  |     return await oauth_manager.handle_login(provider, request) | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-22 01:25:19 +08:00
										 |  |  | # OAuth login logic is as follows: | 
					
						
							|  |  |  | # 1. Attempt to find a user with matching subject ID, tied to the provider | 
					
						
							|  |  |  | # 2. If OAUTH_MERGE_ACCOUNTS_BY_EMAIL is true, find a user with the email address provided via OAuth | 
					
						
							|  |  |  | #    - This is considered insecure in general, as OAuth providers do not always verify email addresses | 
					
						
							|  |  |  | # 3. If there is no user, and ENABLE_OAUTH_SIGNUP is true, create a user | 
					
						
							| 
									
										
										
										
											2024-10-14 15:13:26 +08:00
										 |  |  | #    - Email addresses are considered unique, so we fail registration if the email address is already taken | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  | @app.get("/oauth/{provider}/callback") | 
					
						
							| 
									
										
										
										
											2024-06-21 21:35:11 +08:00
										 |  |  | async def oauth_callback(provider: str, request: Request, response: Response): | 
					
						
							| 
									
										
										
										
											2024-10-16 22:32:57 +08:00
										 |  |  |     return await oauth_manager.handle_callback(provider, request, response) | 
					
						
							| 
									
										
										
										
											2024-05-28 01:07:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-03 02:55:00 +08:00
										 |  |  | @app.get("/manifest.json") | 
					
						
							|  |  |  | async def get_manifest_json(): | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2024-04-04 11:43:55 +08:00
										 |  |  |         "name": WEBUI_NAME, | 
					
						
							|  |  |  |         "short_name": WEBUI_NAME, | 
					
						
							| 
									
										
										
										
											2024-09-24 19:28:00 +08:00
										 |  |  |         "description": "Open WebUI is an open, extensible, user-friendly interface for AI that adapts to your workflow.", | 
					
						
							| 
									
										
										
										
											2024-04-03 02:55:00 +08:00
										 |  |  |         "start_url": "/", | 
					
						
							|  |  |  |         "display": "standalone", | 
					
						
							|  |  |  |         "background_color": "#343541", | 
					
						
							| 
									
										
										
										
											2024-11-03 16:59:53 +08:00
										 |  |  |         "orientation": "natural", | 
					
						
							| 
									
										
										
										
											2024-08-15 19:24:47 +08:00
										 |  |  |         "icons": [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 "src": "/static/logo.png", | 
					
						
							|  |  |  |                 "type": "image/png", | 
					
						
							|  |  |  |                 "sizes": "500x500", | 
					
						
							|  |  |  |                 "purpose": "any", | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 "src": "/static/logo.png", | 
					
						
							|  |  |  |                 "type": "image/png", | 
					
						
							|  |  |  |                 "sizes": "500x500", | 
					
						
							|  |  |  |                 "purpose": "maskable", | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2024-04-03 02:55:00 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-10 16:27:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-07 08:29:16 +08:00
										 |  |  | @app.get("/opensearch.xml") | 
					
						
							|  |  |  | async def get_opensearch_xml(): | 
					
						
							|  |  |  |     xml_content = rf"""
 | 
					
						
							|  |  |  |     <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/"> | 
					
						
							|  |  |  |     <ShortName>{WEBUI_NAME}</ShortName> | 
					
						
							|  |  |  |     <Description>Search {WEBUI_NAME}</Description> | 
					
						
							|  |  |  |     <InputEncoding>UTF-8</InputEncoding> | 
					
						
							| 
									
										
										
										
											2024-12-26 00:50:57 +08:00
										 |  |  |     <Image width="16" height="16" type="image/x-icon">{app.state.config.WEBUI_URL}/static/favicon.png</Image> | 
					
						
							|  |  |  |     <Url type="text/html" method="get" template="{app.state.config.WEBUI_URL}/?q={"{searchTerms}"}"/> | 
					
						
							|  |  |  |     <moz:SearchForm>{app.state.config.WEBUI_URL}</moz:SearchForm> | 
					
						
							| 
									
										
										
										
											2024-05-07 08:29:16 +08:00
										 |  |  |     </OpenSearchDescription> | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     return Response(content=xml_content, media_type="application/xml") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-16 02:17:18 +08:00
										 |  |  | @app.get("/health") | 
					
						
							|  |  |  | async def healthcheck(): | 
					
						
							|  |  |  |     return {"status": True} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-06-18 21:03:31 +08:00
										 |  |  | @app.get("/health/db") | 
					
						
							| 
									
										
										
										
											2024-06-21 20:58:57 +08:00
										 |  |  | async def healthcheck_with_db(): | 
					
						
							| 
									
										
										
										
											2024-06-24 19:06:15 +08:00
										 |  |  |     Session.execute(text("SELECT 1;")).all() | 
					
						
							| 
									
										
										
										
											2024-06-18 21:03:31 +08:00
										 |  |  |     return {"status": True} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-09 18:32:28 +08:00
										 |  |  | app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static") | 
					
						
							|  |  |  | app.mount("/cache", StaticFiles(directory=CACHE_DIR), name="cache") | 
					
						
							| 
									
										
										
										
											2024-02-24 09:12:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-08 09:19:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-18 05:52:57 +08:00
										 |  |  | def swagger_ui_html(*args, **kwargs): | 
					
						
							| 
									
										
										
										
											2024-12-17 02:00:51 +08:00
										 |  |  |     return get_swagger_ui_html( | 
					
						
							|  |  |  |         *args, | 
					
						
							|  |  |  |         **kwargs, | 
					
						
							|  |  |  |         swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js", | 
					
						
							|  |  |  |         swagger_css_url="/static/swagger-ui/swagger-ui.css", | 
					
						
							| 
									
										
										
										
											2024-12-18 05:51:29 +08:00
										 |  |  |         swagger_favicon_url="/static/swagger-ui/favicon.png", | 
					
						
							| 
									
										
										
										
											2024-12-17 02:00:51 +08:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2024-12-18 05:51:29 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-18 05:52:57 +08:00
										 |  |  | applications.get_swagger_ui_html = swagger_ui_html | 
					
						
							| 
									
										
										
										
											2024-02-24 09:12:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-28 23:03:30 +08:00
										 |  |  | if os.path.exists(FRONTEND_BUILD_DIR): | 
					
						
							| 
									
										
										
										
											2024-05-22 12:38:58 +08:00
										 |  |  |     mimetypes.add_type("text/javascript", ".js") | 
					
						
							| 
									
										
										
										
											2024-04-28 23:03:30 +08:00
										 |  |  |     app.mount( | 
					
						
							|  |  |  |         "/", | 
					
						
							|  |  |  |         SPAStaticFiles(directory=FRONTEND_BUILD_DIR, html=True), | 
					
						
							|  |  |  |         name="spa-static-files", | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     log.warning( | 
					
						
							|  |  |  |         f"Frontend build directory not found at '{FRONTEND_BUILD_DIR}'. Serving API only." | 
					
						
							|  |  |  |     ) |