| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- from typing import Any, Optional
 
- from urllib.parse import quote_plus
 
- from pydantic import Field, NonNegativeInt, PositiveFloat, PositiveInt, computed_field
 
- from pydantic_settings import BaseSettings
 
- from configs.middleware.cache.redis_config import RedisConfig
 
- from configs.middleware.storage.aliyun_oss_storage_config import AliyunOSSStorageConfig
 
- from configs.middleware.storage.amazon_s3_storage_config import S3StorageConfig
 
- from configs.middleware.storage.azure_blob_storage_config import AzureBlobStorageConfig
 
- from configs.middleware.storage.google_cloud_storage_config import GoogleCloudStorageConfig
 
- from configs.middleware.storage.huawei_obs_storage_config import HuaweiCloudOBSStorageConfig
 
- from configs.middleware.storage.oci_storage_config import OCIStorageConfig
 
- from configs.middleware.storage.tencent_cos_storage_config import TencentCloudCOSStorageConfig
 
- from configs.middleware.storage.volcengine_tos_storage_config import VolcengineTOSStorageConfig
 
- from configs.middleware.vdb.analyticdb_config import AnalyticdbConfig
 
- from configs.middleware.vdb.chroma_config import ChromaConfig
 
- from configs.middleware.vdb.elasticsearch_config import ElasticsearchConfig
 
- from configs.middleware.vdb.milvus_config import MilvusConfig
 
- from configs.middleware.vdb.myscale_config import MyScaleConfig
 
- from configs.middleware.vdb.opensearch_config import OpenSearchConfig
 
- from configs.middleware.vdb.oracle_config import OracleConfig
 
- from configs.middleware.vdb.pgvector_config import PGVectorConfig
 
- from configs.middleware.vdb.pgvectors_config import PGVectoRSConfig
 
- from configs.middleware.vdb.qdrant_config import QdrantConfig
 
- from configs.middleware.vdb.relyt_config import RelytConfig
 
- from configs.middleware.vdb.tencent_vector_config import TencentVectorDBConfig
 
- from configs.middleware.vdb.tidb_vector_config import TiDBVectorConfig
 
- from configs.middleware.vdb.weaviate_config import WeaviateConfig
 
- class StorageConfig(BaseSettings):
 
-     STORAGE_TYPE: str = Field(
 
-         description="storage type,"
 
-         " default to `local`,"
 
-         " available values are `local`, `s3`, `azure-blob`, `aliyun-oss`, `google-storage`.",
 
-         default="local",
 
-     )
 
-     STORAGE_LOCAL_PATH: str = Field(
 
-         description="local storage path",
 
-         default="storage",
 
-     )
 
- class VectorStoreConfig(BaseSettings):
 
-     VECTOR_STORE: Optional[str] = Field(
 
-         description="vector store type",
 
-         default=None,
 
-     )
 
- class KeywordStoreConfig(BaseSettings):
 
-     KEYWORD_STORE: str = Field(
 
-         description="keyword store type",
 
-         default="jieba",
 
-     )
 
- class DatabaseConfig:
 
-     DB_HOST: str = Field(
 
-         description="db host",
 
-         default="localhost",
 
-     )
 
-     DB_PORT: PositiveInt = Field(
 
-         description="db port",
 
-         default=5432,
 
-     )
 
-     DB_USERNAME: str = Field(
 
-         description="db username",
 
-         default="postgres",
 
-     )
 
-     DB_PASSWORD: str = Field(
 
-         description="db password",
 
-         default="",
 
-     )
 
-     DB_DATABASE: str = Field(
 
-         description="db database",
 
-         default="dify",
 
-     )
 
-     DB_CHARSET: str = Field(
 
-         description="db charset",
 
-         default="",
 
-     )
 
-     DB_EXTRAS: str = Field(
 
-         description="db extras options. Example: keepalives_idle=60&keepalives=1",
 
-         default="",
 
-     )
 
-     SQLALCHEMY_DATABASE_URI_SCHEME: str = Field(
 
-         description="db uri scheme",
 
-         default="postgresql",
 
-     )
 
-     @computed_field
 
-     @property
 
-     def SQLALCHEMY_DATABASE_URI(self) -> str:
 
-         db_extras = (
 
-             f"{self.DB_EXTRAS}&client_encoding={self.DB_CHARSET}" if self.DB_CHARSET else self.DB_EXTRAS
 
-         ).strip("&")
 
-         db_extras = f"?{db_extras}" if db_extras else ""
 
-         return (
 
-             f"{self.SQLALCHEMY_DATABASE_URI_SCHEME}://"
 
-             f"{quote_plus(self.DB_USERNAME)}:{quote_plus(self.DB_PASSWORD)}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_DATABASE}"
 
-             f"{db_extras}"
 
-         )
 
-     SQLALCHEMY_POOL_SIZE: NonNegativeInt = Field(
 
-         description="pool size of SqlAlchemy",
 
-         default=30,
 
-     )
 
-     SQLALCHEMY_MAX_OVERFLOW: NonNegativeInt = Field(
 
-         description="max overflows for SqlAlchemy",
 
-         default=10,
 
-     )
 
-     SQLALCHEMY_POOL_RECYCLE: NonNegativeInt = Field(
 
-         description="SqlAlchemy pool recycle",
 
-         default=3600,
 
-     )
 
-     SQLALCHEMY_POOL_PRE_PING: bool = Field(
 
-         description="whether to enable pool pre-ping in SqlAlchemy",
 
-         default=False,
 
-     )
 
-     SQLALCHEMY_ECHO: bool | str = Field(
 
-         description="whether to enable SqlAlchemy echo",
 
-         default=False,
 
-     )
 
-     @computed_field
 
-     @property
 
-     def SQLALCHEMY_ENGINE_OPTIONS(self) -> dict[str, Any]:
 
-         return {
 
-             "pool_size": self.SQLALCHEMY_POOL_SIZE,
 
-             "max_overflow": self.SQLALCHEMY_MAX_OVERFLOW,
 
-             "pool_recycle": self.SQLALCHEMY_POOL_RECYCLE,
 
-             "pool_pre_ping": self.SQLALCHEMY_POOL_PRE_PING,
 
-             "connect_args": {"options": "-c timezone=UTC"},
 
-         }
 
- class CeleryConfig(DatabaseConfig):
 
-     CELERY_BACKEND: str = Field(
 
-         description="Celery backend, available values are `database`, `redis`",
 
-         default="database",
 
-     )
 
-     CELERY_BROKER_URL: Optional[str] = Field(
 
-         description="CELERY_BROKER_URL",
 
-         default=None,
 
-     )
 
-     CELERY_USE_SENTINEL: Optional[bool] = Field(
 
-         description="Whether to use Redis Sentinel mode",
 
-         default=False,
 
-     )
 
-     CELERY_SENTINEL_MASTER_NAME: Optional[str] = Field(
 
-         description="Redis Sentinel master name",
 
-         default=None,
 
-     )
 
-     CELERY_SENTINEL_SOCKET_TIMEOUT: Optional[PositiveFloat] = Field(
 
-         description="Redis Sentinel socket timeout",
 
-         default=0.1,
 
-     )
 
-     @computed_field
 
-     @property
 
-     def CELERY_RESULT_BACKEND(self) -> str | None:
 
-         return (
 
-             "db+{}".format(self.SQLALCHEMY_DATABASE_URI)
 
-             if self.CELERY_BACKEND == "database"
 
-             else self.CELERY_BROKER_URL
 
-         )
 
-     @computed_field
 
-     @property
 
-     def BROKER_USE_SSL(self) -> bool:
 
-         return self.CELERY_BROKER_URL.startswith("rediss://") if self.CELERY_BROKER_URL else False
 
- class MiddlewareConfig(
 
-     # place the configs in alphabet order
 
-     CeleryConfig,
 
-     DatabaseConfig,
 
-     KeywordStoreConfig,
 
-     RedisConfig,
 
-     # configs of storage and storage providers
 
-     StorageConfig,
 
-     AliyunOSSStorageConfig,
 
-     AzureBlobStorageConfig,
 
-     GoogleCloudStorageConfig,
 
-     TencentCloudCOSStorageConfig,
 
-     HuaweiCloudOBSStorageConfig,
 
-     VolcengineTOSStorageConfig,
 
-     S3StorageConfig,
 
-     OCIStorageConfig,
 
-     # configs of vdb and vdb providers
 
-     VectorStoreConfig,
 
-     AnalyticdbConfig,
 
-     ChromaConfig,
 
-     MilvusConfig,
 
-     MyScaleConfig,
 
-     OpenSearchConfig,
 
-     OracleConfig,
 
-     PGVectorConfig,
 
-     PGVectoRSConfig,
 
-     QdrantConfig,
 
-     RelytConfig,
 
-     TencentVectorDBConfig,
 
-     TiDBVectorConfig,
 
-     WeaviateConfig,
 
-     ElasticsearchConfig,
 
- ):
 
-     pass
 
 
  |