-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
21 changed files
with
765 additions
and
225 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,49 +5,26 @@ | |
dotenv.load_dotenv() | ||
|
||
DEFAULTS = { | ||
'EDITION': 'SELF_HOSTED', | ||
'DB_USERNAME': 'postgres', | ||
'DB_PASSWORD': '', | ||
'DB_HOST': 'localhost', | ||
'DB_PORT': '5432', | ||
'DB_DATABASE': 'dify', | ||
'DB_CHARSET': '', | ||
'REDIS_HOST': 'localhost', | ||
'REDIS_PORT': '6379', | ||
'REDIS_DB': '0', | ||
'REDIS_USE_SSL': 'False', | ||
'OAUTH_REDIRECT_PATH': '/console/api/oauth/authorize', | ||
'OAUTH_REDIRECT_INDEX_PATH': '/', | ||
'CONSOLE_WEB_URL': 'https://cloud.dify.ai', | ||
'CONSOLE_API_URL': 'https://cloud.dify.ai', | ||
'SERVICE_API_URL': 'https://api.dify.ai', | ||
'APP_WEB_URL': 'https://udify.app', | ||
'FILES_URL': '', | ||
'FILES_ACCESS_TIMEOUT': 300, | ||
'S3_USE_AWS_MANAGED_IAM': 'False', | ||
'S3_ADDRESS_STYLE': 'auto', | ||
'STORAGE_TYPE': 'local', | ||
'STORAGE_LOCAL_PATH': 'storage', | ||
'CHECK_UPDATE_URL': 'https://updates.dify.ai', | ||
'DEPLOY_ENV': 'PRODUCTION', | ||
'SQLALCHEMY_DATABASE_URI_SCHEME': 'postgresql', | ||
'SQLALCHEMY_POOL_SIZE': 30, | ||
'SQLALCHEMY_MAX_OVERFLOW': 10, | ||
'SQLALCHEMY_POOL_RECYCLE': 3600, | ||
'SQLALCHEMY_POOL_PRE_PING': 'False', | ||
'SQLALCHEMY_ECHO': 'False', | ||
'SENTRY_TRACES_SAMPLE_RATE': 1.0, | ||
'SENTRY_PROFILES_SAMPLE_RATE': 1.0, | ||
'WEAVIATE_GRPC_ENABLED': 'True', | ||
'WEAVIATE_BATCH_SIZE': 100, | ||
'QDRANT_CLIENT_TIMEOUT': 20, | ||
'QDRANT_GRPC_ENABLED': 'False', | ||
'QDRANT_GRPC_PORT': '6334', | ||
'CELERY_BACKEND': 'database', | ||
'LOG_LEVEL': 'INFO', | ||
'LOG_FILE': '', | ||
'LOG_FORMAT': '%(asctime)s.%(msecs)03d %(levelname)s [%(threadName)s] [%(filename)s:%(lineno)d] - %(message)s', | ||
'LOG_DATEFORMAT': '%Y-%m-%d %H:%M:%S', | ||
'HOSTED_OPENAI_QUOTA_LIMIT': 200, | ||
'HOSTED_OPENAI_TRIAL_ENABLED': 'False', | ||
'HOSTED_OPENAI_TRIAL_MODELS': 'gpt-3.5-turbo,gpt-3.5-turbo-1106,gpt-3.5-turbo-instruct,gpt-3.5-turbo-16k,gpt-3.5-turbo-16k-0613,gpt-3.5-turbo-0613,gpt-3.5-turbo-0125,text-davinci-003', | ||
|
@@ -62,31 +39,7 @@ | |
'HOSTED_MODERATION_PROVIDERS': '', | ||
'HOSTED_FETCH_APP_TEMPLATES_MODE': 'remote', | ||
'HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN': 'https://tmpl.dify.ai', | ||
'CLEAN_DAY_SETTING': 30, | ||
'UPLOAD_FILE_SIZE_LIMIT': 15, | ||
'UPLOAD_FILE_BATCH_LIMIT': 5, | ||
'UPLOAD_IMAGE_FILE_SIZE_LIMIT': 10, | ||
'OUTPUT_MODERATION_BUFFER_SIZE': 300, | ||
'MULTIMODAL_SEND_IMAGE_FORMAT': 'base64', | ||
'INVITE_EXPIRY_HOURS': 72, | ||
'BILLING_ENABLED': 'False', | ||
'CAN_REPLACE_LOGO': 'False', | ||
'MODEL_LB_ENABLED': 'False', | ||
'ETL_TYPE': 'dify', | ||
'KEYWORD_STORE': 'jieba', | ||
'BATCH_UPLOAD_LIMIT': 20, | ||
'CODE_EXECUTION_ENDPOINT': 'http://sandbox:8194', | ||
'CODE_EXECUTION_API_KEY': 'dify-sandbox', | ||
'TOOL_ICON_CACHE_MAX_AGE': 3600, | ||
'MILVUS_DATABASE': 'default', | ||
'KEYWORD_DATA_SOURCE_TYPE': 'database', | ||
'INNER_API': 'False', | ||
'ENTERPRISE_ENABLED': 'False', | ||
'INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH': 1000, | ||
'WORKFLOW_MAX_EXECUTION_STEPS': 500, | ||
'WORKFLOW_MAX_EXECUTION_TIME': 1200, | ||
'WORKFLOW_CALL_MAX_DEPTH': 5, | ||
'APP_MAX_EXECUTION_TIME': 1200, | ||
} | ||
|
||
|
||
|
@@ -114,65 +67,14 @@ class Config: | |
"""Application configuration class.""" | ||
|
||
def __init__(self): | ||
# ------------------------ | ||
# General Configurations. | ||
# ------------------------ | ||
self.CURRENT_VERSION = "0.6.11" | ||
self.COMMIT_SHA = get_env('COMMIT_SHA') | ||
self.EDITION = get_env('EDITION') | ||
self.DEPLOY_ENV = get_env('DEPLOY_ENV') | ||
self.TESTING = False | ||
self.LOG_LEVEL = get_env('LOG_LEVEL') | ||
self.LOG_FILE = get_env('LOG_FILE') | ||
self.LOG_FORMAT = get_env('LOG_FORMAT') | ||
self.LOG_DATEFORMAT = get_env('LOG_DATEFORMAT') | ||
self.API_COMPRESSION_ENABLED = get_bool_env('API_COMPRESSION_ENABLED') | ||
|
||
# The backend URL prefix of the console API. | ||
# used to concatenate the login authorization callback or notion integration callback. | ||
self.CONSOLE_API_URL = get_env('CONSOLE_API_URL') | ||
|
||
# The front-end URL prefix of the console web. | ||
# used to concatenate some front-end addresses and for CORS configuration use. | ||
self.CONSOLE_WEB_URL = get_env('CONSOLE_WEB_URL') | ||
|
||
# WebApp Url prefix. | ||
# used to display WebAPP API Base Url to the front-end. | ||
self.APP_WEB_URL = get_env('APP_WEB_URL') | ||
|
||
# Service API Url prefix. | ||
# used to display Service API Base Url to the front-end. | ||
self.SERVICE_API_URL = get_env('SERVICE_API_URL') | ||
|
||
# File preview or download Url prefix. | ||
# used to display File preview or download Url to the front-end or as Multi-model inputs; | ||
# Url is signed and has expiration time. | ||
self.FILES_URL = get_env('FILES_URL') if get_env('FILES_URL') else self.CONSOLE_API_URL | ||
|
||
# File Access Time specifies a time interval in seconds for the file to be accessed. | ||
# The default value is 300 seconds. | ||
self.FILES_ACCESS_TIMEOUT = int(get_env('FILES_ACCESS_TIMEOUT')) | ||
|
||
# Your App secret key will be used for securely signing the session cookie | ||
# Make sure you are changing this key for your deployment with a strong key. | ||
# You can generate a strong key using `openssl rand -base64 42`. | ||
# Alternatively you can set it with `SECRET_KEY` environment variable. | ||
self.SECRET_KEY = get_env('SECRET_KEY') | ||
|
||
# Enable or disable the inner API. | ||
self.INNER_API = get_bool_env('INNER_API') | ||
# The inner API key is used to authenticate the inner API. | ||
self.INNER_API_KEY = get_env('INNER_API_KEY') | ||
|
||
# cors settings | ||
self.CONSOLE_CORS_ALLOW_ORIGINS = get_cors_allow_origins( | ||
'CONSOLE_CORS_ALLOW_ORIGINS', self.CONSOLE_WEB_URL) | ||
'CONSOLE_CORS_ALLOW_ORIGINS', get_env('CONSOLE_WEB_URL')) | ||
self.WEB_API_CORS_ALLOW_ORIGINS = get_cors_allow_origins( | ||
'WEB_API_CORS_ALLOW_ORIGINS', '*') | ||
|
||
# check update url | ||
self.CHECK_UPDATE_URL = get_env('CHECK_UPDATE_URL') | ||
|
||
# ------------------------ | ||
# Database Configurations. | ||
# ------------------------ | ||
|
@@ -195,36 +97,15 @@ def __init__(self): | |
|
||
self.SQLALCHEMY_ECHO = get_bool_env('SQLALCHEMY_ECHO') | ||
|
||
# ------------------------ | ||
# Redis Configurations. | ||
# ------------------------ | ||
self.REDIS_HOST = get_env('REDIS_HOST') | ||
self.REDIS_PORT = get_env('REDIS_PORT') | ||
self.REDIS_USERNAME = get_env('REDIS_USERNAME') | ||
self.REDIS_PASSWORD = get_env('REDIS_PASSWORD') | ||
self.REDIS_DB = get_env('REDIS_DB') | ||
self.REDIS_USE_SSL = get_bool_env('REDIS_USE_SSL') | ||
|
||
# ------------------------ | ||
# Celery worker Configurations. | ||
# ------------------------ | ||
self.CELERY_BROKER_URL = get_env('CELERY_BROKER_URL') | ||
self.CELERY_BACKEND = get_env('CELERY_BACKEND') | ||
self.CELERY_RESULT_BACKEND = 'db+{}'.format(self.SQLALCHEMY_DATABASE_URI) \ | ||
if self.CELERY_BACKEND == 'database' else self.CELERY_BROKER_URL | ||
self.BROKER_USE_SSL = self.CELERY_BROKER_URL.startswith('rediss://') | ||
self.BROKER_USE_SSL = self.CELERY_BROKER_URL.startswith('rediss://') if self.CELERY_BROKER_URL else False | ||
|
||
# ------------------------ | ||
# Code Execution Sandbox Configurations. | ||
# ------------------------ | ||
self.CODE_EXECUTION_ENDPOINT = get_env('CODE_EXECUTION_ENDPOINT') | ||
self.CODE_EXECUTION_API_KEY = get_env('CODE_EXECUTION_API_KEY') | ||
|
||
# ------------------------ | ||
# File Storage Configurations. | ||
# ------------------------ | ||
self.STORAGE_TYPE = get_env('STORAGE_TYPE') | ||
self.STORAGE_LOCAL_PATH = get_env('STORAGE_LOCAL_PATH') | ||
|
||
# S3 Storage settings | ||
self.S3_USE_AWS_MANAGED_IAM = get_bool_env('S3_USE_AWS_MANAGED_IAM') | ||
|
@@ -264,8 +145,6 @@ def __init__(self): | |
# Vector Store Configurations. | ||
# Currently, only support: qdrant, milvus, zilliz, weaviate, relyt, pgvector | ||
# ------------------------ | ||
self.VECTOR_STORE = get_env('VECTOR_STORE') | ||
self.KEYWORD_STORE = get_env('KEYWORD_STORE') | ||
|
||
# qdrant settings | ||
self.QDRANT_URL = get_env('QDRANT_URL') | ||
|
@@ -295,7 +174,6 @@ def __init__(self): | |
self.RELYT_PASSWORD = get_env('RELYT_PASSWORD') | ||
self.RELYT_DATABASE = get_env('RELYT_DATABASE') | ||
|
||
|
||
# tencent settings | ||
self.TENCENT_VECTOR_DB_URL = get_env('TENCENT_VECTOR_DB_URL') | ||
self.TENCENT_VECTOR_DB_API_KEY = get_env('TENCENT_VECTOR_DB_API_KEY') | ||
|
@@ -334,85 +212,9 @@ def __init__(self): | |
self.CHROMA_AUTH_PROVIDER = get_env('CHROMA_AUTH_PROVIDER') | ||
self.CHROMA_AUTH_CREDENTIALS = get_env('CHROMA_AUTH_CREDENTIALS') | ||
|
||
# ------------------------ | ||
# Mail Configurations. | ||
# ------------------------ | ||
self.MAIL_TYPE = get_env('MAIL_TYPE') | ||
self.MAIL_DEFAULT_SEND_FROM = get_env('MAIL_DEFAULT_SEND_FROM') | ||
self.RESEND_API_KEY = get_env('RESEND_API_KEY') | ||
self.RESEND_API_URL = get_env('RESEND_API_URL') | ||
# SMTP settings | ||
self.SMTP_SERVER = get_env('SMTP_SERVER') | ||
self.SMTP_PORT = get_env('SMTP_PORT') | ||
self.SMTP_USERNAME = get_env('SMTP_USERNAME') | ||
self.SMTP_PASSWORD = get_env('SMTP_PASSWORD') | ||
self.SMTP_USE_TLS = get_bool_env('SMTP_USE_TLS') | ||
self.SMTP_OPPORTUNISTIC_TLS = get_bool_env('SMTP_OPPORTUNISTIC_TLS') | ||
|
||
# ------------------------ | ||
# Workspace Configurations. | ||
# ------------------------ | ||
self.INVITE_EXPIRY_HOURS = int(get_env('INVITE_EXPIRY_HOURS')) | ||
|
||
# ------------------------ | ||
# Sentry Configurations. | ||
# ------------------------ | ||
self.SENTRY_DSN = get_env('SENTRY_DSN') | ||
self.SENTRY_TRACES_SAMPLE_RATE = float(get_env('SENTRY_TRACES_SAMPLE_RATE')) | ||
self.SENTRY_PROFILES_SAMPLE_RATE = float(get_env('SENTRY_PROFILES_SAMPLE_RATE')) | ||
|
||
# ------------------------ | ||
# Business Configurations. | ||
# ------------------------ | ||
|
||
# multi model send image format, support base64, url, default is base64 | ||
self.MULTIMODAL_SEND_IMAGE_FORMAT = get_env('MULTIMODAL_SEND_IMAGE_FORMAT') | ||
|
||
# Dataset Configurations. | ||
self.CLEAN_DAY_SETTING = get_env('CLEAN_DAY_SETTING') | ||
|
||
# File upload Configurations. | ||
self.UPLOAD_FILE_SIZE_LIMIT = int(get_env('UPLOAD_FILE_SIZE_LIMIT')) | ||
self.UPLOAD_FILE_BATCH_LIMIT = int(get_env('UPLOAD_FILE_BATCH_LIMIT')) | ||
self.UPLOAD_IMAGE_FILE_SIZE_LIMIT = int(get_env('UPLOAD_IMAGE_FILE_SIZE_LIMIT')) | ||
self.BATCH_UPLOAD_LIMIT = get_env('BATCH_UPLOAD_LIMIT') | ||
|
||
# RAG ETL Configurations. | ||
self.ETL_TYPE = get_env('ETL_TYPE') | ||
self.UNSTRUCTURED_API_URL = get_env('UNSTRUCTURED_API_URL') | ||
self.UNSTRUCTURED_API_KEY = get_env('UNSTRUCTURED_API_KEY') | ||
self.KEYWORD_DATA_SOURCE_TYPE = get_env('KEYWORD_DATA_SOURCE_TYPE') | ||
|
||
# Indexing Configurations. | ||
self.INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH = get_env('INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH') | ||
|
||
# Tool Configurations. | ||
self.TOOL_ICON_CACHE_MAX_AGE = get_env('TOOL_ICON_CACHE_MAX_AGE') | ||
|
||
self.WORKFLOW_MAX_EXECUTION_STEPS = int(get_env('WORKFLOW_MAX_EXECUTION_STEPS')) | ||
self.WORKFLOW_MAX_EXECUTION_TIME = int(get_env('WORKFLOW_MAX_EXECUTION_TIME')) | ||
self.WORKFLOW_CALL_MAX_DEPTH = int(get_env('WORKFLOW_CALL_MAX_DEPTH')) | ||
self.APP_MAX_EXECUTION_TIME = int(get_env('APP_MAX_EXECUTION_TIME')) | ||
|
||
# Moderation in app Configurations. | ||
self.OUTPUT_MODERATION_BUFFER_SIZE = int(get_env('OUTPUT_MODERATION_BUFFER_SIZE')) | ||
|
||
# Notion integration setting | ||
self.NOTION_CLIENT_ID = get_env('NOTION_CLIENT_ID') | ||
self.NOTION_CLIENT_SECRET = get_env('NOTION_CLIENT_SECRET') | ||
self.NOTION_INTEGRATION_TYPE = get_env('NOTION_INTEGRATION_TYPE') | ||
self.NOTION_INTERNAL_SECRET = get_env('NOTION_INTERNAL_SECRET') | ||
self.NOTION_INTEGRATION_TOKEN = get_env('NOTION_INTEGRATION_TOKEN') | ||
|
||
# ------------------------ | ||
# Platform Configurations. | ||
# ------------------------ | ||
self.GITHUB_CLIENT_ID = get_env('GITHUB_CLIENT_ID') | ||
self.GITHUB_CLIENT_SECRET = get_env('GITHUB_CLIENT_SECRET') | ||
self.GOOGLE_CLIENT_ID = get_env('GOOGLE_CLIENT_ID') | ||
self.GOOGLE_CLIENT_SECRET = get_env('GOOGLE_CLIENT_SECRET') | ||
self.OAUTH_REDIRECT_PATH = get_env('OAUTH_REDIRECT_PATH') | ||
|
||
self.HOSTED_OPENAI_API_KEY = get_env('HOSTED_OPENAI_API_KEY') | ||
self.HOSTED_OPENAI_API_BASE = get_env('HOSTED_OPENAI_API_BASE') | ||
self.HOSTED_OPENAI_API_ORGANIZATION = get_env('HOSTED_OPENAI_API_ORGANIZATION') | ||
|
@@ -443,16 +245,3 @@ def __init__(self): | |
# fetch app templates mode, remote, builtin, db(only for dify SaaS), default: remote | ||
self.HOSTED_FETCH_APP_TEMPLATES_MODE = get_env('HOSTED_FETCH_APP_TEMPLATES_MODE') | ||
self.HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN = get_env('HOSTED_FETCH_APP_TEMPLATES_REMOTE_DOMAIN') | ||
|
||
# Model Load Balancing Configurations. | ||
self.MODEL_LB_ENABLED = get_bool_env('MODEL_LB_ENABLED') | ||
|
||
# Platform Billing Configurations. | ||
self.BILLING_ENABLED = get_bool_env('BILLING_ENABLED') | ||
|
||
# ------------------------ | ||
# Enterprise feature Configurations. | ||
# **Before using, please contact [email protected] by email to inquire about licensing matters.** | ||
# ------------------------ | ||
self.ENTERPRISE_ENABLED = get_bool_env('ENTERPRISE_ENABLED') | ||
self.CAN_REPLACE_LOGO = get_bool_env('CAN_REPLACE_LOGO') |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
from pydantic_settings import BaseSettings, SettingsConfigDict | ||
|
||
from configs.deploy import DeploymentConfigs | ||
from configs.enterprise import EnterpriseFeatureConfigs | ||
from configs.extra import ExtraServiceConfigs | ||
from configs.feature import FeatureConfigs | ||
from configs.middleware import MiddlewareConfigs | ||
from configs.packaging import PackagingInfo | ||
|
||
|
||
class DifyConfigs( | ||
# based on pydantic-settings | ||
BaseSettings, | ||
|
||
# Packaging info | ||
PackagingInfo, | ||
|
||
# Deployment configs | ||
DeploymentConfigs, | ||
|
||
# Feature configs | ||
FeatureConfigs, | ||
|
||
# Middleware configs | ||
MiddlewareConfigs, | ||
|
||
# Extra service configs | ||
ExtraServiceConfigs, | ||
|
||
# Enterprise feature configs | ||
# **Before using, please contact [email protected] by email to inquire about licensing matters.** | ||
EnterpriseFeatureConfigs, | ||
): | ||
|
||
model_config = SettingsConfigDict( | ||
# read from dotenv format config file | ||
env_file='.env', | ||
env_file_encoding='utf-8', | ||
|
||
# ignore extra attributes | ||
extra='ignore', | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from pydantic import BaseModel, Field | ||
|
||
|
||
class DeploymentConfigs(BaseModel): | ||
""" | ||
Deployment configs | ||
""" | ||
EDITION: str = Field( | ||
description='deployment edition', | ||
default='SELF_HOSTED', | ||
) | ||
|
||
DEPLOY_ENV: str = Field( | ||
description='deployment environment, default to PRODUCTION.', | ||
default='PRODUCTION', | ||
) |
Oops, something went wrong.