From 8a345bd27d71ba9a34fd6548da0c7167b8844732 Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Wed, 21 Jan 2026 10:13:54 +0800 Subject: [PATCH 1/6] add trial model list in system features --- api/enums/hosted_provider.py | 15 +++++++++++++++ api/services/feature_service.py | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 api/enums/hosted_provider.py diff --git a/api/enums/hosted_provider.py b/api/enums/hosted_provider.py new file mode 100644 index 0000000000..6a562eef42 --- /dev/null +++ b/api/enums/hosted_provider.py @@ -0,0 +1,15 @@ +from enum import StrEnum + + +class HostedTrialProvider(StrEnum): + """ + Enum representing hosted model provider names for trial access. + """ + + OPENAI = "openai" + DEEPSEEK = "deepseek" + ANTHROPIC = "anthropic" + GEMINI = "gemini" + XAI = "xai" + TONGYI = "tongyi" + diff --git a/api/services/feature_service.py b/api/services/feature_service.py index 9b853b8337..c6f9cc7aba 100644 --- a/api/services/feature_service.py +++ b/api/services/feature_service.py @@ -4,6 +4,7 @@ from pydantic import BaseModel, ConfigDict, Field from configs import dify_config from enums.cloud_plan import CloudPlan +from enums.hosted_provider import HostedTrialProvider from services.billing_service import BillingService from services.enterprise.enterprise_service import EnterpriseService @@ -170,6 +171,7 @@ class SystemFeatureModel(BaseModel): plugin_installation_permission: PluginInstallationPermissionModel = PluginInstallationPermissionModel() enable_change_email: bool = True plugin_manager: PluginManagerModel = PluginManagerModel() + trial_models: list[str] = [] class FeatureService: @@ -225,6 +227,24 @@ class FeatureService: system_features.is_allow_register = dify_config.ALLOW_REGISTER system_features.is_allow_create_workspace = dify_config.ALLOW_CREATE_WORKSPACE system_features.is_email_setup = dify_config.MAIL_TYPE is not None and dify_config.MAIL_TYPE != "" + system_features.trial_models = cls._fulfill_trial_models_from_env() + + @classmethod + def _fulfill_trial_models_from_env(cls) -> list[str]: + trial_models: list[str] = [] + if dify_config.HOSTED_OPENAI_PAID_ENABLED and dify_config.HOSTED_OPENAI_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.OPENAI) + if dify_config.HOSTED_DEEPSEEK_PAID_ENABLED and dify_config.HOSTED_DEEPSEEK_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.DEEPSEEK) + if dify_config.HOSTED_ANTHROPIC_PAID_ENABLED and dify_config.HOSTED_ANTHROPIC_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.ANTHROPIC) + if dify_config.HOSTED_GEMINI_PAID_ENABLED and dify_config.HOSTED_GEMINI_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.GEMINI) + if dify_config.HOSTED_XAI_PAID_ENABLED and dify_config.HOSTED_XAI_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.XAI) + if dify_config.HOSTED_TONGYI_PAID_ENABLED and dify_config.HOSTED_TONGYI_TRIAL_ENABLED: + trial_models.append(HostedTrialProvider.TONGYI) + return trial_models @classmethod def _fulfill_params_from_env(cls, features: FeatureModel): From 95345bfb175c467eb0bdad89d6280017c8dddedb Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 02:16:21 +0000 Subject: [PATCH 2/6] [autofix.ci] apply automated fixes --- api/enums/hosted_provider.py | 1 - 1 file changed, 1 deletion(-) diff --git a/api/enums/hosted_provider.py b/api/enums/hosted_provider.py index 6a562eef42..17d115f4b5 100644 --- a/api/enums/hosted_provider.py +++ b/api/enums/hosted_provider.py @@ -12,4 +12,3 @@ class HostedTrialProvider(StrEnum): GEMINI = "gemini" XAI = "xai" TONGYI = "tongyi" - From ee0e646e396a0c32d0f388b6c0ffc9d159f0df8a Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Wed, 21 Jan 2026 10:19:48 +0800 Subject: [PATCH 3/6] Standardization function --- api/services/feature_service.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/api/services/feature_service.py b/api/services/feature_service.py index c6f9cc7aba..34d3959a5d 100644 --- a/api/services/feature_service.py +++ b/api/services/feature_service.py @@ -231,21 +231,14 @@ class FeatureService: @classmethod def _fulfill_trial_models_from_env(cls) -> list[str]: - trial_models: list[str] = [] - if dify_config.HOSTED_OPENAI_PAID_ENABLED and dify_config.HOSTED_OPENAI_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.OPENAI) - if dify_config.HOSTED_DEEPSEEK_PAID_ENABLED and dify_config.HOSTED_DEEPSEEK_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.DEEPSEEK) - if dify_config.HOSTED_ANTHROPIC_PAID_ENABLED and dify_config.HOSTED_ANTHROPIC_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.ANTHROPIC) - if dify_config.HOSTED_GEMINI_PAID_ENABLED and dify_config.HOSTED_GEMINI_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.GEMINI) - if dify_config.HOSTED_XAI_PAID_ENABLED and dify_config.HOSTED_XAI_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.XAI) - if dify_config.HOSTED_TONGYI_PAID_ENABLED and dify_config.HOSTED_TONGYI_TRIAL_ENABLED: - trial_models.append(HostedTrialProvider.TONGYI) - return trial_models - + return [ + provider + for provider in HostedTrialProvider + if ( + getattr(dify_config, f"HOSTED_{provider.upper()}_PAID_ENABLED", False) + and getattr(dify_config, f"HOSTED_{provider.upper()}_TRIAL_ENABLED", False) + ) + ] @classmethod def _fulfill_params_from_env(cls, features: FeatureModel): features.can_replace_logo = dify_config.CAN_REPLACE_LOGO From fc65cfbc3fafb3a7aa949e8b8f59e856f1be1cea Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Wed, 21 Jan 2026 10:20:03 +0800 Subject: [PATCH 4/6] linter --- api/services/feature_service.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api/services/feature_service.py b/api/services/feature_service.py index 34d3959a5d..1e9b5aaf79 100644 --- a/api/services/feature_service.py +++ b/api/services/feature_service.py @@ -239,6 +239,7 @@ class FeatureService: and getattr(dify_config, f"HOSTED_{provider.upper()}_TRIAL_ENABLED", False) ) ] + @classmethod def _fulfill_params_from_env(cls, features: FeatureModel): features.can_replace_logo = dify_config.CAN_REPLACE_LOGO From 782fc332e1f772dfc78daa275454623dd7264c3c Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Wed, 21 Jan 2026 14:07:11 +0800 Subject: [PATCH 5/6] fix const --- api/enums/hosted_provider.py | 19 +++++++++++++------ api/services/feature_service.py | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/api/enums/hosted_provider.py b/api/enums/hosted_provider.py index 17d115f4b5..f7a3683738 100644 --- a/api/enums/hosted_provider.py +++ b/api/enums/hosted_provider.py @@ -6,9 +6,16 @@ class HostedTrialProvider(StrEnum): Enum representing hosted model provider names for trial access. """ - OPENAI = "openai" - DEEPSEEK = "deepseek" - ANTHROPIC = "anthropic" - GEMINI = "gemini" - XAI = "xai" - TONGYI = "tongyi" + OPENAI = "langgenius/openai" + ANTHROPIC = "langgenius/anthropic" + GEMINI = "langgenius/gemini" + X = "langgenius/x" + DEEPSEEK = "langgenius/deepseek" + TONGYI = "langgenius/tongyi" + + @property + def config_key(self) -> str: + """Return the config key used in dify_config (e.g., HOSTED_{config_key}_PAID_ENABLED).""" + if self == HostedTrialProvider.X: + return "XAI" + return self.name diff --git a/api/services/feature_service.py b/api/services/feature_service.py index 1e9b5aaf79..d61628c496 100644 --- a/api/services/feature_service.py +++ b/api/services/feature_service.py @@ -232,11 +232,11 @@ class FeatureService: @classmethod def _fulfill_trial_models_from_env(cls) -> list[str]: return [ - provider + provider.value for provider in HostedTrialProvider if ( - getattr(dify_config, f"HOSTED_{provider.upper()}_PAID_ENABLED", False) - and getattr(dify_config, f"HOSTED_{provider.upper()}_TRIAL_ENABLED", False) + getattr(dify_config, f"HOSTED_{provider.config_key}_PAID_ENABLED", False) + and getattr(dify_config, f"HOSTED_{provider.config_key}_TRIAL_ENABLED", False) ) ] From 360a7b6c4f00f627cdd27254b6a40507037e97f7 Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Wed, 21 Jan 2026 14:15:51 +0800 Subject: [PATCH 6/6] fix const --- api/enums/hosted_provider.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/api/enums/hosted_provider.py b/api/enums/hosted_provider.py index f7a3683738..7fd4f2d226 100644 --- a/api/enums/hosted_provider.py +++ b/api/enums/hosted_provider.py @@ -6,12 +6,12 @@ class HostedTrialProvider(StrEnum): Enum representing hosted model provider names for trial access. """ - OPENAI = "langgenius/openai" - ANTHROPIC = "langgenius/anthropic" - GEMINI = "langgenius/gemini" - X = "langgenius/x" - DEEPSEEK = "langgenius/deepseek" - TONGYI = "langgenius/tongyi" + ANTHROPIC = "langgenius/anthropic/anthropic" + OPENAI = "langgenius/openai/openai" + GEMINI = "langgenius/gemini/google" + X = "langgenius/x/x" + DEEPSEEK = "langgenius/deepseek/deepseek" + TONGYI = "langgenius/tongyi/tongyi" @property def config_key(self) -> str: