|
@@ -201,7 +201,7 @@ def get_config_value(config_path: str):
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
|
|
|
-class PersistedConfig(Generic[T]):
|
|
|
+class PersistentConfig(Generic[T]):
|
|
|
def __init__(self, env_name: str, config_path: str, env_value: T):
|
|
|
self.env_name = env_name
|
|
|
self.config_path = config_path
|
|
@@ -219,13 +219,13 @@ class PersistedConfig(Generic[T]):
|
|
|
@property
|
|
|
def __dict__(self):
|
|
|
raise TypeError(
|
|
|
- "PersistedConfig object cannot be converted to dict, use config_get or .value instead."
|
|
|
+ "PersistentConfig object cannot be converted to dict, use config_get or .value instead."
|
|
|
)
|
|
|
|
|
|
def __getattribute__(self, item):
|
|
|
if item == "__dict__":
|
|
|
raise TypeError(
|
|
|
- "PersistedConfig object cannot be converted to dict, use config_get or .value instead."
|
|
|
+ "PersistentConfig object cannot be converted to dict, use config_get or .value instead."
|
|
|
)
|
|
|
return super().__getattribute__(item)
|
|
|
|
|
@@ -247,13 +247,13 @@ class PersistedConfig(Generic[T]):
|
|
|
|
|
|
|
|
|
class AppConfig:
|
|
|
- _state: dict[str, PersistedConfig]
|
|
|
+ _state: dict[str, PersistentConfig]
|
|
|
|
|
|
def __init__(self):
|
|
|
super().__setattr__("_state", {})
|
|
|
|
|
|
def __setattr__(self, key, value):
|
|
|
- if isinstance(value, PersistedConfig):
|
|
|
+ if isinstance(value, PersistentConfig):
|
|
|
self._state[key] = value
|
|
|
else:
|
|
|
self._state[key].value = value
|
|
@@ -271,7 +271,7 @@ WEBUI_AUTH = os.environ.get("WEBUI_AUTH", "True").lower() == "true"
|
|
|
WEBUI_AUTH_TRUSTED_EMAIL_HEADER = os.environ.get(
|
|
|
"WEBUI_AUTH_TRUSTED_EMAIL_HEADER", None
|
|
|
)
|
|
|
-JWT_EXPIRES_IN = PersistedConfig(
|
|
|
+JWT_EXPIRES_IN = PersistentConfig(
|
|
|
"JWT_EXPIRES_IN", "auth.jwt_expiry", os.environ.get("JWT_EXPIRES_IN", "-1")
|
|
|
)
|
|
|
|
|
@@ -409,7 +409,7 @@ OLLAMA_BASE_URLS = os.environ.get("OLLAMA_BASE_URLS", "")
|
|
|
OLLAMA_BASE_URLS = OLLAMA_BASE_URLS if OLLAMA_BASE_URLS != "" else OLLAMA_BASE_URL
|
|
|
|
|
|
OLLAMA_BASE_URLS = [url.strip() for url in OLLAMA_BASE_URLS.split(";")]
|
|
|
-OLLAMA_BASE_URLS = PersistedConfig(
|
|
|
+OLLAMA_BASE_URLS = PersistentConfig(
|
|
|
"OLLAMA_BASE_URLS", "ollama.base_urls", OLLAMA_BASE_URLS
|
|
|
)
|
|
|
|
|
@@ -428,7 +428,9 @@ OPENAI_API_KEYS = os.environ.get("OPENAI_API_KEYS", "")
|
|
|
OPENAI_API_KEYS = OPENAI_API_KEYS if OPENAI_API_KEYS != "" else OPENAI_API_KEY
|
|
|
|
|
|
OPENAI_API_KEYS = [url.strip() for url in OPENAI_API_KEYS.split(";")]
|
|
|
-OPENAI_API_KEYS = PersistedConfig("OPENAI_API_KEYS", "openai.api_keys", OPENAI_API_KEYS)
|
|
|
+OPENAI_API_KEYS = PersistentConfig(
|
|
|
+ "OPENAI_API_KEYS", "openai.api_keys", OPENAI_API_KEYS
|
|
|
+)
|
|
|
|
|
|
OPENAI_API_BASE_URLS = os.environ.get("OPENAI_API_BASE_URLS", "")
|
|
|
OPENAI_API_BASE_URLS = (
|
|
@@ -439,7 +441,7 @@ OPENAI_API_BASE_URLS = [
|
|
|
url.strip() if url != "" else "https://api.openai.com/v1"
|
|
|
for url in OPENAI_API_BASE_URLS.split(";")
|
|
|
]
|
|
|
-OPENAI_API_BASE_URLS = PersistedConfig(
|
|
|
+OPENAI_API_BASE_URLS = PersistentConfig(
|
|
|
"OPENAI_API_BASE_URLS", "openai.api_base_urls", OPENAI_API_BASE_URLS
|
|
|
)
|
|
|
|
|
@@ -458,7 +460,7 @@ OPENAI_API_BASE_URL = "https://api.openai.com/v1"
|
|
|
# WEBUI
|
|
|
####################################
|
|
|
|
|
|
-ENABLE_SIGNUP = PersistedConfig(
|
|
|
+ENABLE_SIGNUP = PersistentConfig(
|
|
|
"ENABLE_SIGNUP",
|
|
|
"ui.enable_signup",
|
|
|
(
|
|
@@ -467,11 +469,11 @@ ENABLE_SIGNUP = PersistedConfig(
|
|
|
else os.environ.get("ENABLE_SIGNUP", "True").lower() == "true"
|
|
|
),
|
|
|
)
|
|
|
-DEFAULT_MODELS = PersistedConfig(
|
|
|
+DEFAULT_MODELS = PersistentConfig(
|
|
|
"DEFAULT_MODELS", "ui.default_models", os.environ.get("DEFAULT_MODELS", None)
|
|
|
)
|
|
|
|
|
|
-DEFAULT_PROMPT_SUGGESTIONS = PersistedConfig(
|
|
|
+DEFAULT_PROMPT_SUGGESTIONS = PersistentConfig(
|
|
|
"DEFAULT_PROMPT_SUGGESTIONS",
|
|
|
"ui.prompt_suggestions",
|
|
|
[
|
|
@@ -505,7 +507,7 @@ DEFAULT_PROMPT_SUGGESTIONS = PersistedConfig(
|
|
|
],
|
|
|
)
|
|
|
|
|
|
-DEFAULT_USER_ROLE = PersistedConfig(
|
|
|
+DEFAULT_USER_ROLE = PersistentConfig(
|
|
|
"DEFAULT_USER_ROLE",
|
|
|
"ui.default_user_role",
|
|
|
os.getenv("DEFAULT_USER_ROLE", "pending"),
|
|
@@ -515,25 +517,25 @@ USER_PERMISSIONS_CHAT_DELETION = (
|
|
|
os.environ.get("USER_PERMISSIONS_CHAT_DELETION", "True").lower() == "true"
|
|
|
)
|
|
|
|
|
|
-USER_PERMISSIONS = PersistedConfig(
|
|
|
+USER_PERMISSIONS = PersistentConfig(
|
|
|
"USER_PERMISSIONS",
|
|
|
"ui.user_permissions",
|
|
|
{"chat": {"deletion": USER_PERMISSIONS_CHAT_DELETION}},
|
|
|
)
|
|
|
|
|
|
-ENABLE_MODEL_FILTER = PersistedConfig(
|
|
|
+ENABLE_MODEL_FILTER = PersistentConfig(
|
|
|
"ENABLE_MODEL_FILTER",
|
|
|
"model_filter.enable",
|
|
|
os.environ.get("ENABLE_MODEL_FILTER", "False").lower() == "true",
|
|
|
)
|
|
|
MODEL_FILTER_LIST = os.environ.get("MODEL_FILTER_LIST", "")
|
|
|
-MODEL_FILTER_LIST = PersistedConfig(
|
|
|
+MODEL_FILTER_LIST = PersistentConfig(
|
|
|
"MODEL_FILTER_LIST",
|
|
|
"model_filter.list",
|
|
|
[model.strip() for model in MODEL_FILTER_LIST.split(";")],
|
|
|
)
|
|
|
|
|
|
-WEBHOOK_URL = PersistedConfig(
|
|
|
+WEBHOOK_URL = PersistentConfig(
|
|
|
"WEBHOOK_URL", "webhook_url", os.environ.get("WEBHOOK_URL", "")
|
|
|
)
|
|
|
|
|
@@ -573,40 +575,40 @@ else:
|
|
|
CHROMA_HTTP_SSL = os.environ.get("CHROMA_HTTP_SSL", "false").lower() == "true"
|
|
|
# this uses the model defined in the Dockerfile ENV variable. If you dont use docker or docker based deployments such as k8s, the default embedding model will be used (sentence-transformers/all-MiniLM-L6-v2)
|
|
|
|
|
|
-RAG_TOP_K = PersistedConfig(
|
|
|
+RAG_TOP_K = PersistentConfig(
|
|
|
"RAG_TOP_K", "rag.top_k", int(os.environ.get("RAG_TOP_K", "5"))
|
|
|
)
|
|
|
-RAG_RELEVANCE_THRESHOLD = PersistedConfig(
|
|
|
+RAG_RELEVANCE_THRESHOLD = PersistentConfig(
|
|
|
"RAG_RELEVANCE_THRESHOLD",
|
|
|
"rag.relevance_threshold",
|
|
|
float(os.environ.get("RAG_RELEVANCE_THRESHOLD", "0.0")),
|
|
|
)
|
|
|
|
|
|
-ENABLE_RAG_HYBRID_SEARCH = PersistedConfig(
|
|
|
+ENABLE_RAG_HYBRID_SEARCH = PersistentConfig(
|
|
|
"ENABLE_RAG_HYBRID_SEARCH",
|
|
|
"rag.enable_hybrid_search",
|
|
|
os.environ.get("ENABLE_RAG_HYBRID_SEARCH", "").lower() == "true",
|
|
|
)
|
|
|
|
|
|
-ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = PersistedConfig(
|
|
|
+ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION = PersistentConfig(
|
|
|
"ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION",
|
|
|
"rag.enable_web_loader_ssl_verification",
|
|
|
os.environ.get("ENABLE_RAG_WEB_LOADER_SSL_VERIFICATION", "True").lower() == "true",
|
|
|
)
|
|
|
|
|
|
-RAG_EMBEDDING_ENGINE = PersistedConfig(
|
|
|
+RAG_EMBEDDING_ENGINE = PersistentConfig(
|
|
|
"RAG_EMBEDDING_ENGINE",
|
|
|
"rag.embedding_engine",
|
|
|
os.environ.get("RAG_EMBEDDING_ENGINE", ""),
|
|
|
)
|
|
|
|
|
|
-PDF_EXTRACT_IMAGES = PersistedConfig(
|
|
|
+PDF_EXTRACT_IMAGES = PersistentConfig(
|
|
|
"PDF_EXTRACT_IMAGES",
|
|
|
"rag.pdf_extract_images",
|
|
|
os.environ.get("PDF_EXTRACT_IMAGES", "False").lower() == "true",
|
|
|
)
|
|
|
|
|
|
-RAG_EMBEDDING_MODEL = PersistedConfig(
|
|
|
+RAG_EMBEDDING_MODEL = PersistentConfig(
|
|
|
"RAG_EMBEDDING_MODEL",
|
|
|
"rag.embedding_model",
|
|
|
os.environ.get("RAG_EMBEDDING_MODEL", "sentence-transformers/all-MiniLM-L6-v2"),
|
|
@@ -621,7 +623,7 @@ RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE = (
|
|
|
os.environ.get("RAG_EMBEDDING_MODEL_TRUST_REMOTE_CODE", "").lower() == "true"
|
|
|
)
|
|
|
|
|
|
-RAG_RERANKING_MODEL = PersistedConfig(
|
|
|
+RAG_RERANKING_MODEL = PersistentConfig(
|
|
|
"RAG_RERANKING_MODEL",
|
|
|
"rag.reranking_model",
|
|
|
os.environ.get("RAG_RERANKING_MODEL", ""),
|
|
@@ -665,10 +667,10 @@ if USE_CUDA.lower() == "true":
|
|
|
else:
|
|
|
DEVICE_TYPE = "cpu"
|
|
|
|
|
|
-CHUNK_SIZE = PersistedConfig(
|
|
|
+CHUNK_SIZE = PersistentConfig(
|
|
|
"CHUNK_SIZE", "rag.chunk_size", int(os.environ.get("CHUNK_SIZE", "1500"))
|
|
|
)
|
|
|
-CHUNK_OVERLAP = PersistedConfig(
|
|
|
+CHUNK_OVERLAP = PersistentConfig(
|
|
|
"CHUNK_OVERLAP",
|
|
|
"rag.chunk_overlap",
|
|
|
int(os.environ.get("CHUNK_OVERLAP", "100")),
|
|
@@ -688,18 +690,18 @@ And answer according to the language of the user's question.
|
|
|
Given the context information, answer the query.
|
|
|
Query: [query]"""
|
|
|
|
|
|
-RAG_TEMPLATE = PersistedConfig(
|
|
|
+RAG_TEMPLATE = PersistentConfig(
|
|
|
"RAG_TEMPLATE",
|
|
|
"rag.template",
|
|
|
os.environ.get("RAG_TEMPLATE", DEFAULT_RAG_TEMPLATE),
|
|
|
)
|
|
|
|
|
|
-RAG_OPENAI_API_BASE_URL = PersistedConfig(
|
|
|
+RAG_OPENAI_API_BASE_URL = PersistentConfig(
|
|
|
"RAG_OPENAI_API_BASE_URL",
|
|
|
"rag.openai_api_base_url",
|
|
|
os.getenv("RAG_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL),
|
|
|
)
|
|
|
-RAG_OPENAI_API_KEY = PersistedConfig(
|
|
|
+RAG_OPENAI_API_KEY = PersistentConfig(
|
|
|
"RAG_OPENAI_API_KEY",
|
|
|
"rag.openai_api_key",
|
|
|
os.getenv("RAG_OPENAI_API_KEY", OPENAI_API_KEY),
|
|
@@ -709,7 +711,7 @@ ENABLE_RAG_LOCAL_WEB_FETCH = (
|
|
|
os.getenv("ENABLE_RAG_LOCAL_WEB_FETCH", "False").lower() == "true"
|
|
|
)
|
|
|
|
|
|
-YOUTUBE_LOADER_LANGUAGE = PersistedConfig(
|
|
|
+YOUTUBE_LOADER_LANGUAGE = PersistentConfig(
|
|
|
"YOUTUBE_LOADER_LANGUAGE",
|
|
|
"rag.youtube_loader_language",
|
|
|
os.getenv("YOUTUBE_LOADER_LANGUAGE", "en").split(","),
|
|
@@ -730,49 +732,49 @@ WHISPER_MODEL_AUTO_UPDATE = (
|
|
|
# Images
|
|
|
####################################
|
|
|
|
|
|
-IMAGE_GENERATION_ENGINE = PersistedConfig(
|
|
|
+IMAGE_GENERATION_ENGINE = PersistentConfig(
|
|
|
"IMAGE_GENERATION_ENGINE",
|
|
|
"image_generation.engine",
|
|
|
os.getenv("IMAGE_GENERATION_ENGINE", ""),
|
|
|
)
|
|
|
|
|
|
-ENABLE_IMAGE_GENERATION = PersistedConfig(
|
|
|
+ENABLE_IMAGE_GENERATION = PersistentConfig(
|
|
|
"ENABLE_IMAGE_GENERATION",
|
|
|
"image_generation.enable",
|
|
|
os.environ.get("ENABLE_IMAGE_GENERATION", "").lower() == "true",
|
|
|
)
|
|
|
-AUTOMATIC1111_BASE_URL = PersistedConfig(
|
|
|
+AUTOMATIC1111_BASE_URL = PersistentConfig(
|
|
|
"AUTOMATIC1111_BASE_URL",
|
|
|
"image_generation.automatic1111.base_url",
|
|
|
os.getenv("AUTOMATIC1111_BASE_URL", ""),
|
|
|
)
|
|
|
|
|
|
-COMFYUI_BASE_URL = PersistedConfig(
|
|
|
+COMFYUI_BASE_URL = PersistentConfig(
|
|
|
"COMFYUI_BASE_URL",
|
|
|
"image_generation.comfyui.base_url",
|
|
|
os.getenv("COMFYUI_BASE_URL", ""),
|
|
|
)
|
|
|
|
|
|
-IMAGES_OPENAI_API_BASE_URL = PersistedConfig(
|
|
|
+IMAGES_OPENAI_API_BASE_URL = PersistentConfig(
|
|
|
"IMAGES_OPENAI_API_BASE_URL",
|
|
|
"image_generation.openai.api_base_url",
|
|
|
os.getenv("IMAGES_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL),
|
|
|
)
|
|
|
-IMAGES_OPENAI_API_KEY = PersistedConfig(
|
|
|
+IMAGES_OPENAI_API_KEY = PersistentConfig(
|
|
|
"IMAGES_OPENAI_API_KEY",
|
|
|
"image_generation.openai.api_key",
|
|
|
os.getenv("IMAGES_OPENAI_API_KEY", OPENAI_API_KEY),
|
|
|
)
|
|
|
|
|
|
-IMAGE_SIZE = PersistedConfig(
|
|
|
+IMAGE_SIZE = PersistentConfig(
|
|
|
"IMAGE_SIZE", "image_generation.size", os.getenv("IMAGE_SIZE", "512x512")
|
|
|
)
|
|
|
|
|
|
-IMAGE_STEPS = PersistedConfig(
|
|
|
+IMAGE_STEPS = PersistentConfig(
|
|
|
"IMAGE_STEPS", "image_generation.steps", int(os.getenv("IMAGE_STEPS", 50))
|
|
|
)
|
|
|
|
|
|
-IMAGE_GENERATION_MODEL = PersistedConfig(
|
|
|
+IMAGE_GENERATION_MODEL = PersistentConfig(
|
|
|
"IMAGE_GENERATION_MODEL",
|
|
|
"image_generation.model",
|
|
|
os.getenv("IMAGE_GENERATION_MODEL", ""),
|
|
@@ -782,22 +784,22 @@ IMAGE_GENERATION_MODEL = PersistedConfig(
|
|
|
# Audio
|
|
|
####################################
|
|
|
|
|
|
-AUDIO_OPENAI_API_BASE_URL = PersistedConfig(
|
|
|
+AUDIO_OPENAI_API_BASE_URL = PersistentConfig(
|
|
|
"AUDIO_OPENAI_API_BASE_URL",
|
|
|
"audio.openai.api_base_url",
|
|
|
os.getenv("AUDIO_OPENAI_API_BASE_URL", OPENAI_API_BASE_URL),
|
|
|
)
|
|
|
-AUDIO_OPENAI_API_KEY = PersistedConfig(
|
|
|
+AUDIO_OPENAI_API_KEY = PersistentConfig(
|
|
|
"AUDIO_OPENAI_API_KEY",
|
|
|
"audio.openai.api_key",
|
|
|
os.getenv("AUDIO_OPENAI_API_KEY", OPENAI_API_KEY),
|
|
|
)
|
|
|
-AUDIO_OPENAI_API_MODEL = PersistedConfig(
|
|
|
+AUDIO_OPENAI_API_MODEL = PersistentConfig(
|
|
|
"AUDIO_OPENAI_API_MODEL",
|
|
|
"audio.openai.api_model",
|
|
|
os.getenv("AUDIO_OPENAI_API_MODEL", "tts-1"),
|
|
|
)
|
|
|
-AUDIO_OPENAI_API_VOICE = PersistedConfig(
|
|
|
+AUDIO_OPENAI_API_VOICE = PersistentConfig(
|
|
|
"AUDIO_OPENAI_API_VOICE",
|
|
|
"audio.openai.api_voice",
|
|
|
os.getenv("AUDIO_OPENAI_API_VOICE", "alloy"),
|