浏览代码

fix(configs): Update pydantic settings in config files (#6023)

tags/0.6.13
-LAN- 1年前
父节点
当前提交
c436454cd4
没有帐户链接到提交者的电子邮件
共有 30 个文件被更改,包括 115 次插入93 次删除
  1. 0
    1
      api/configs/__init__.py
  2. 4
    8
      api/configs/app_config.py
  3. 3
    2
      api/configs/deploy/__init__.py
  4. 3
    2
      api/configs/enterprise/__init__.py
  5. 0
    2
      api/configs/extra/__init__.py
  6. 3
    2
      api/configs/extra/notion_config.py
  7. 3
    2
      api/configs/extra/sentry_config.py
  8. 24
    23
      api/configs/feature/__init__.py
  9. 10
    9
      api/configs/feature/hosted_service/__init__.py
  10. 5
    4
      api/configs/middleware/__init__.py
  11. 3
    2
      api/configs/middleware/cache/redis_config.py
  12. 3
    2
      api/configs/middleware/storage/aliyun_oss_storage_config.py
  13. 3
    2
      api/configs/middleware/storage/amazon_s3_storage_config.py
  14. 3
    2
      api/configs/middleware/storage/azure_blob_storage_config.py
  15. 3
    2
      api/configs/middleware/storage/google_cloud_storage_config.py
  16. 3
    2
      api/configs/middleware/storage/oci_storage_config.py
  17. 3
    2
      api/configs/middleware/storage/tencent_cos_storage_config.py
  18. 3
    2
      api/configs/middleware/vdb/chroma_config.py
  19. 3
    2
      api/configs/middleware/vdb/milvus_config.py
  20. 3
    2
      api/configs/middleware/vdb/opensearch_config.py
  21. 3
    2
      api/configs/middleware/vdb/oracle_config.py
  22. 3
    2
      api/configs/middleware/vdb/pgvector_config.py
  23. 3
    2
      api/configs/middleware/vdb/pgvectors_config.py
  24. 3
    2
      api/configs/middleware/vdb/qdrant_config.py
  25. 3
    2
      api/configs/middleware/vdb/relyt_config.py
  26. 3
    2
      api/configs/middleware/vdb/tencent_vector_config.py
  27. 3
    2
      api/configs/middleware/vdb/tidb_vector_config.py
  28. 3
    2
      api/configs/middleware/vdb/weaviate_config.py
  29. 3
    2
      api/configs/packaging/__init__.py
  30. 3
    0
      api/tests/unit_tests/configs/test_dify_config.py

+ 0
- 1
api/configs/__init__.py 查看文件


from .app_config import DifyConfig from .app_config import DifyConfig


dify_config = DifyConfig() dify_config = DifyConfig()

+ 4
- 8
api/configs/app_config.py 查看文件

from pydantic import computed_field
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, computed_field
from pydantic_settings import SettingsConfigDict


from configs.deploy import DeploymentConfig from configs.deploy import DeploymentConfig
from configs.enterprise import EnterpriseFeatureConfig from configs.enterprise import EnterpriseFeatureConfig
from configs.packaging import PackagingInfo from configs.packaging import PackagingInfo




# TODO: Both `BaseModel` and `BaseSettings` has `model_config` attribute but they are in different types.
# This inheritance is depends on the order of the classes.
# It is better to use `BaseSettings` as the base class.
class DifyConfig( class DifyConfig(
# based on pydantic-settings
BaseSettings,

# Packaging info # Packaging info
PackagingInfo, PackagingInfo,


# **Before using, please contact business@dify.ai by email to inquire about licensing matters.** # **Before using, please contact business@dify.ai by email to inquire about licensing matters.**
EnterpriseFeatureConfig, EnterpriseFeatureConfig,
): ):
DEBUG: bool = Field(default=False, description='whether to enable debug mode.')


model_config = SettingsConfigDict( model_config = SettingsConfigDict(
# read from dotenv format config file # read from dotenv format config file
env_file='.env', env_file='.env',
env_file_encoding='utf-8', env_file_encoding='utf-8',
frozen=True,


# ignore extra attributes # ignore extra attributes
extra='ignore', extra='ignore',

+ 3
- 2
api/configs/deploy/__init__.py 查看文件

from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class DeploymentConfig(BaseModel):
class DeploymentConfig(BaseSettings):
""" """
Deployment configs Deployment configs
""" """

+ 3
- 2
api/configs/enterprise/__init__.py 查看文件

from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class EnterpriseFeatureConfig(BaseModel):
class EnterpriseFeatureConfig(BaseSettings):
""" """
Enterprise feature configs. Enterprise feature configs.
**Before using, please contact business@dify.ai by email to inquire about licensing matters.** **Before using, please contact business@dify.ai by email to inquire about licensing matters.**

+ 0
- 2
api/configs/extra/__init__.py 查看文件

from pydantic import BaseModel

from configs.extra.notion_config import NotionConfig from configs.extra.notion_config import NotionConfig
from configs.extra.sentry_config import SentryConfig from configs.extra.sentry_config import SentryConfig



+ 3
- 2
api/configs/extra/notion_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class NotionConfig(BaseModel):
class NotionConfig(BaseSettings):
""" """
Notion integration configs Notion integration configs
""" """

+ 3
- 2
api/configs/extra/sentry_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, NonNegativeFloat
from pydantic import Field, NonNegativeFloat
from pydantic_settings import BaseSettings




class SentryConfig(BaseModel):
class SentryConfig(BaseSettings):
""" """
Sentry configs Sentry configs
""" """

+ 24
- 23
api/configs/feature/__init__.py 查看文件

from typing import Optional from typing import Optional


from pydantic import AliasChoices, BaseModel, Field, NonNegativeInt, PositiveInt, computed_field
from pydantic import AliasChoices, Field, NonNegativeInt, PositiveInt, computed_field
from pydantic_settings import BaseSettings


from configs.feature.hosted_service import HostedServiceConfig from configs.feature.hosted_service import HostedServiceConfig




class SecurityConfig(BaseModel):
class SecurityConfig(BaseSettings):
""" """
Secret Key configs Secret Key configs
""" """
default=24, default=24,
) )


class AppExecutionConfig(BaseModel):
class AppExecutionConfig(BaseSettings):
""" """
App Execution configs App Execution configs
""" """
) )




class CodeExecutionSandboxConfig(BaseModel):
class CodeExecutionSandboxConfig(BaseSettings):
""" """
Code Execution Sandbox configs Code Execution Sandbox configs
""" """
) )




class EndpointConfig(BaseModel):
class EndpointConfig(BaseSettings):
""" """
Module URL configs Module URL configs
""" """
) )




class FileAccessConfig(BaseModel):
class FileAccessConfig(BaseSettings):
""" """
File Access configs File Access configs
""" """
) )




class FileUploadConfig(BaseModel):
class FileUploadConfig(BaseSettings):
""" """
File Uploading configs File Uploading configs
""" """
) )




class HttpConfig(BaseModel):
class HttpConfig(BaseSettings):
""" """
HTTP configs HTTP configs
""" """
return self.inner_WEB_API_CORS_ALLOW_ORIGINS.split(',') return self.inner_WEB_API_CORS_ALLOW_ORIGINS.split(',')




class InnerAPIConfig(BaseModel):
class InnerAPIConfig(BaseSettings):
""" """
Inner API configs Inner API configs
""" """
) )




class LoggingConfig(BaseModel):
class LoggingConfig(BaseSettings):
""" """
Logging configs Logging configs
""" """
) )




class ModelLoadBalanceConfig(BaseModel):
class ModelLoadBalanceConfig(BaseSettings):
""" """
Model load balance configs Model load balance configs
""" """
) )




class BillingConfig(BaseModel):
class BillingConfig(BaseSettings):
""" """
Platform Billing Configurations Platform Billing Configurations
""" """
) )




class UpdateConfig(BaseModel):
class UpdateConfig(BaseSettings):
""" """
Update configs Update configs
""" """
) )




class WorkflowConfig(BaseModel):
class WorkflowConfig(BaseSettings):
""" """
Workflow feature configs Workflow feature configs
""" """
) )




class OAuthConfig(BaseModel):
class OAuthConfig(BaseSettings):
""" """
oauth configs oauth configs
""" """
) )




class ModerationConfig(BaseModel):
class ModerationConfig(BaseSettings):
""" """
Moderation in app configs. Moderation in app configs.
""" """
) )




class ToolConfig(BaseModel):
class ToolConfig(BaseSettings):
""" """
Tool configs Tool configs
""" """
) )




class MailConfig(BaseModel):
class MailConfig(BaseSettings):
""" """
Mail Configurations Mail Configurations
""" """
) )




class RagEtlConfig(BaseModel):
class RagEtlConfig(BaseSettings):
""" """
RAG ETL Configurations. RAG ETL Configurations.
""" """
) )




class DataSetConfig(BaseModel):
class DataSetConfig(BaseSettings):
""" """
Dataset configs Dataset configs
""" """
) )




class WorkspaceConfig(BaseModel):
class WorkspaceConfig(BaseSettings):
""" """
Workspace configs Workspace configs
""" """
) )




class IndexingConfig(BaseModel):
class IndexingConfig(BaseSettings):
""" """
Indexing configs. Indexing configs.
""" """
) )




class ImageFormatConfig(BaseModel):
class ImageFormatConfig(BaseSettings):
MULTIMODAL_SEND_IMAGE_FORMAT: str = Field( MULTIMODAL_SEND_IMAGE_FORMAT: str = Field(
description='multi model send image format, support base64, url, default is base64', description='multi model send image format, support base64, url, default is base64',
default='base64', default='base64',

+ 10
- 9
api/configs/feature/hosted_service/__init__.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, NonNegativeInt
from pydantic import Field, NonNegativeInt
from pydantic_settings import BaseSettings




class HostedOpenAiConfig(BaseModel):
class HostedOpenAiConfig(BaseSettings):
""" """
Hosted OpenAI service config Hosted OpenAI service config
""" """
) )




class HostedAzureOpenAiConfig(BaseModel):
class HostedAzureOpenAiConfig(BaseSettings):
""" """
Hosted OpenAI service config Hosted OpenAI service config
""" """
) )




class HostedAnthropicConfig(BaseModel):
class HostedAnthropicConfig(BaseSettings):
""" """
Hosted Azure OpenAI service config Hosted Azure OpenAI service config
""" """
) )




class HostedMinmaxConfig(BaseModel):
class HostedMinmaxConfig(BaseSettings):
""" """
Hosted Minmax service config Hosted Minmax service config
""" """
) )




class HostedSparkConfig(BaseModel):
class HostedSparkConfig(BaseSettings):
""" """
Hosted Spark service config Hosted Spark service config
""" """
) )




class HostedZhipuAIConfig(BaseModel):
class HostedZhipuAIConfig(BaseSettings):
""" """
Hosted Minmax service config Hosted Minmax service config
""" """
) )




class HostedModerationConfig(BaseModel):
class HostedModerationConfig(BaseSettings):
""" """
Hosted Moderation service config Hosted Moderation service config
""" """
) )




class HostedFetchAppTemplateConfig(BaseModel):
class HostedFetchAppTemplateConfig(BaseSettings):
""" """
Hosted Moderation service config Hosted Moderation service config
""" """

+ 5
- 4
api/configs/middleware/__init__.py 查看文件

from typing import Any, Optional from typing import Any, Optional


from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt, computed_field
from pydantic import Field, NonNegativeInt, PositiveInt, computed_field
from pydantic_settings import BaseSettings


from configs.middleware.cache.redis_config import RedisConfig from configs.middleware.cache.redis_config import RedisConfig
from configs.middleware.storage.aliyun_oss_storage_config import AliyunOSSStorageConfig from configs.middleware.storage.aliyun_oss_storage_config import AliyunOSSStorageConfig
from configs.middleware.vdb.weaviate_config import WeaviateConfig from configs.middleware.vdb.weaviate_config import WeaviateConfig




class StorageConfig(BaseModel):
class StorageConfig(BaseSettings):
STORAGE_TYPE: str = Field( STORAGE_TYPE: str = Field(
description='storage type,' description='storage type,'
' default to `local`,' ' default to `local`,'
) )




class VectorStoreConfig(BaseModel):
class VectorStoreConfig(BaseSettings):
VECTOR_STORE: Optional[str] = Field( VECTOR_STORE: Optional[str] = Field(
description='vector store type', description='vector store type',
default=None, default=None,
) )




class KeywordStoreConfig(BaseModel):
class KeywordStoreConfig(BaseSettings):
KEYWORD_STORE: str = Field( KEYWORD_STORE: str = Field(
description='keyword store type', description='keyword store type',
default='jieba', default='jieba',

+ 3
- 2
api/configs/middleware/cache/redis_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt
from pydantic import Field, NonNegativeInt, PositiveInt
from pydantic_settings import BaseSettings




class RedisConfig(BaseModel):
class RedisConfig(BaseSettings):
""" """
Redis configs Redis configs
""" """

+ 3
- 2
api/configs/middleware/storage/aliyun_oss_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class AliyunOSSStorageConfig(BaseModel):
class AliyunOSSStorageConfig(BaseSettings):
""" """
Aliyun storage configs Aliyun storage configs
""" """

+ 3
- 2
api/configs/middleware/storage/amazon_s3_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class S3StorageConfig(BaseModel):
class S3StorageConfig(BaseSettings):
""" """
S3 storage configs S3 storage configs
""" """

+ 3
- 2
api/configs/middleware/storage/azure_blob_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class AzureBlobStorageConfig(BaseModel):
class AzureBlobStorageConfig(BaseSettings):
""" """
Azure Blob storage configs Azure Blob storage configs
""" """

+ 3
- 2
api/configs/middleware/storage/google_cloud_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class GoogleCloudStorageConfig(BaseModel):
class GoogleCloudStorageConfig(BaseSettings):
""" """
Google Cloud storage configs Google Cloud storage configs
""" """

+ 3
- 2
api/configs/middleware/storage/oci_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class OCIStorageConfig(BaseModel):
class OCIStorageConfig(BaseSettings):
""" """
OCI storage configs OCI storage configs
""" """

+ 3
- 2
api/configs/middleware/storage/tencent_cos_storage_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class TencentCloudCOSStorageConfig(BaseModel):
class TencentCloudCOSStorageConfig(BaseSettings):
""" """
Tencent Cloud COS storage configs Tencent Cloud COS storage configs
""" """

+ 3
- 2
api/configs/middleware/vdb/chroma_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class ChromaConfig(BaseModel):
class ChromaConfig(BaseSettings):
""" """
Chroma configs Chroma configs
""" """

+ 3
- 2
api/configs/middleware/vdb/milvus_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class MilvusConfig(BaseModel):
class MilvusConfig(BaseSettings):
""" """
Milvus configs Milvus configs
""" """

+ 3
- 2
api/configs/middleware/vdb/opensearch_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class OpenSearchConfig(BaseModel):
class OpenSearchConfig(BaseSettings):
""" """
OpenSearch configs OpenSearch configs
""" """

+ 3
- 2
api/configs/middleware/vdb/oracle_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class OracleConfig(BaseModel):
class OracleConfig(BaseSettings):
""" """
ORACLE configs ORACLE configs
""" """

+ 3
- 2
api/configs/middleware/vdb/pgvector_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class PGVectorConfig(BaseModel):
class PGVectorConfig(BaseSettings):
""" """
PGVector configs PGVector configs
""" """

+ 3
- 2
api/configs/middleware/vdb/pgvectors_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class PGVectoRSConfig(BaseModel):
class PGVectoRSConfig(BaseSettings):
""" """
PGVectoRS configs PGVectoRS configs
""" """

+ 3
- 2
api/configs/middleware/vdb/qdrant_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt
from pydantic import Field, NonNegativeInt, PositiveInt
from pydantic_settings import BaseSettings




class QdrantConfig(BaseModel):
class QdrantConfig(BaseSettings):
""" """
Qdrant configs Qdrant configs
""" """

+ 3
- 2
api/configs/middleware/vdb/relyt_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class RelytConfig(BaseModel):
class RelytConfig(BaseSettings):
""" """
Relyt configs Relyt configs
""" """

+ 3
- 2
api/configs/middleware/vdb/tencent_vector_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, NonNegativeInt, PositiveInt
from pydantic import Field, NonNegativeInt, PositiveInt
from pydantic_settings import BaseSettings




class TencentVectorDBConfig(BaseModel):
class TencentVectorDBConfig(BaseSettings):
""" """
Tencent Vector configs Tencent Vector configs
""" """

+ 3
- 2
api/configs/middleware/vdb/tidb_vector_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class TiDBVectorConfig(BaseModel):
class TiDBVectorConfig(BaseSettings):
""" """
TiDB Vector configs TiDB Vector configs
""" """

+ 3
- 2
api/configs/middleware/vdb/weaviate_config.py 查看文件

from typing import Optional from typing import Optional


from pydantic import BaseModel, Field, PositiveInt
from pydantic import Field, PositiveInt
from pydantic_settings import BaseSettings




class WeaviateConfig(BaseModel):
class WeaviateConfig(BaseSettings):
""" """
Weaviate configs Weaviate configs
""" """

+ 3
- 2
api/configs/packaging/__init__.py 查看文件

from pydantic import BaseModel, Field
from pydantic import Field
from pydantic_settings import BaseSettings




class PackagingInfo(BaseModel):
class PackagingInfo(BaseSettings):
""" """
Packaging build information Packaging build information
""" """

+ 3
- 0
api/tests/unit_tests/configs/test_dify_config.py 查看文件





def test_dify_config_undefined_entry(example_env_file): def test_dify_config_undefined_entry(example_env_file):
# NOTE: See https://github.com/microsoft/pylance-release/issues/6099 for more details about this type error.
# load dotenv file with pydantic-settings # load dotenv file with pydantic-settings
config = DifyConfig(_env_file=example_env_file) config = DifyConfig(_env_file=example_env_file)


assert config.SENTRY_TRACES_SAMPLE_RATE == 1.0 assert config.SENTRY_TRACES_SAMPLE_RATE == 1.0




# NOTE: If there is a `.env` file in your Workspace, this test might not succeed as expected.
# This is due to `pymilvus` loading all the variables from the `.env` file into `os.environ`.
def test_flask_configs(example_env_file): def test_flask_configs(example_env_file):
flask_app = Flask('app') flask_app = Flask('app')
flask_app.config.from_mapping(DifyConfig(_env_file=example_env_file).model_dump()) flask_app.config.from_mapping(DifyConfig(_env_file=example_env_file).model_dump())

正在加载...
取消
保存