diff --git a/api/core/model_runtime/model_providers/model_provider_factory.py b/api/core/model_runtime/model_providers/model_provider_factory.py index 23596558db..b311f069a8 100644 --- a/api/core/model_runtime/model_providers/model_provider_factory.py +++ b/api/core/model_runtime/model_providers/model_provider_factory.py @@ -20,6 +20,7 @@ from core.model_runtime.model_providers.__base.text_embedding_model import TextE from core.model_runtime.model_providers.__base.tts_model import TTSModel from core.model_runtime.schema_validators.model_credential_schema_validator import ModelCredentialSchemaValidator from core.model_runtime.schema_validators.provider_credential_schema_validator import ProviderCredentialSchemaValidator +from core.plugin.entities.plugin import ModelProviderID from core.plugin.entities.plugin_daemon import PluginModelProviderEntity from core.plugin.manager.asset import PluginAssetManager from core.plugin.manager.model import PluginModelManager @@ -112,6 +113,9 @@ class ModelProviderFactory: :param provider: provider name :return: provider schema """ + if "/" not in provider: + provider = str(ModelProviderID(provider)) + # fetch plugin model providers plugin_model_provider_entities = self.get_plugin_model_providers() @@ -363,4 +367,4 @@ class ModelProviderFactory: plugin_id = "/".join(provider.split("/")[:-1]) provider_name = provider.split("/")[-1] - return plugin_id, provider_name + return str(plugin_id), provider_name diff --git a/api/core/plugin/entities/plugin.py b/api/core/plugin/entities/plugin.py index f303dc03a3..db49a757f8 100644 --- a/api/core/plugin/entities/plugin.py +++ b/api/core/plugin/entities/plugin.py @@ -169,6 +169,21 @@ class GenericProviderID: return f"{self.organization}/{self.plugin_name}" +class ModelProviderID(GenericProviderID): + def __init__(self, value: str, is_hardcoded: bool = False) -> None: + super().__init__(value, is_hardcoded) + if self.organization == "langgenius" and self.provider_name == "google": + self.provider_name = "gemini" + + +class ToolProviderID(GenericProviderID): + def __init__(self, value: str, is_hardcoded: bool = False) -> None: + super().__init__(value, is_hardcoded) + if self.organization == "langgenius": + if self.provider_name in ["jina", "siliconflow"]: + self.provider_name = f"{self.provider_name}_tool" + + class PluginDependency(BaseModel): class Type(enum.StrEnum): Github = PluginInstallationSource.Github.value diff --git a/api/services/plugin/plugin_migration.py b/api/services/plugin/plugin_migration.py index fd1bef98b7..63cd08a900 100644 --- a/api/services/plugin/plugin_migration.py +++ b/api/services/plugin/plugin_migration.py @@ -1,7 +1,6 @@ import datetime import json import logging -import sys import time from collections.abc import Mapping, Sequence from concurrent.futures import ThreadPoolExecutor @@ -418,8 +417,6 @@ class PluginMigration: logger.info("Uninstall plugins") - sys.exit(-1) - # get installation try: installation = manager.list_plugins(fake_tenant_id) diff --git a/api/services/tools/builtin_tools_manage_service.py b/api/services/tools/builtin_tools_manage_service.py index 679b53746e..708c6ecb2d 100644 --- a/api/services/tools/builtin_tools_manage_service.py +++ b/api/services/tools/builtin_tools_manage_service.py @@ -7,7 +7,7 @@ from sqlalchemy.orm import Session from configs import dify_config from core.helper.position_helper import is_filtered from core.model_runtime.utils.encoders import jsonable_encoder -from core.plugin.entities.plugin import GenericProviderID +from core.plugin.entities.plugin import GenericProviderID, ToolProviderID from core.plugin.manager.exc import PluginDaemonClientSideError from core.tools.builtin_tool.providers._positions import BuiltinToolProviderSort from core.tools.entities.api_entities import ToolApiEntity, ToolProviderApiEntity @@ -240,10 +240,7 @@ class BuiltinToolManageService: # rewrite db_providers for db_provider in db_providers: - try: - GenericProviderID(db_provider.provider) - except Exception: - db_provider.provider = f"langgenius/{db_provider.provider}/{db_provider.provider}" + db_provider.provider = str(ToolProviderID(db_provider.provider)) # find provider def find_provider(provider): diff --git a/web/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx b/web/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx index 803be4abd4..40be3e65e6 100644 --- a/web/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx +++ b/web/app/components/plugins/install-plugin/install-bundle/steps/install-multi.tsx @@ -87,10 +87,13 @@ const InstallByDSLList: FC = ({ const failedIndex: number[] = [] const nextPlugins = produce(pluginsRef.current, (draft) => { marketPlaceInDSLIndex.forEach((index, i) => { - if (payloads[i]) - draft[index] = payloads[i] - else - failedIndex.push(index) + if (payloads[i]) { + draft[index] = { + ...payloads[i], + version: payloads[i].version || payloads[i].latest_version, + } + } + else { failedIndex.push(index) } }) }) setPlugins(nextPlugins) @@ -192,8 +195,8 @@ const InstallByDSLList: FC = ({ key={index} checked={!!selectedPlugins.find(p => p.plugin_id === plugins[index]?.plugin_id)} onCheckedChange={handleSelect(index)} - payload={plugins[index] as Plugin} - version={(d as GitHubItemAndMarketPlaceDependency).value.version!} + payload={plugin} + version={(d as GitHubItemAndMarketPlaceDependency).value.version! || plugin?.version || ''} versionInfo={getVersionInfo(`${plugin?.org || plugin?.author}/${plugin?.name}`)} /> ) diff --git a/web/app/components/plugins/plugin-page/debug-info.tsx b/web/app/components/plugins/plugin-page/debug-info.tsx index e4d249f3e2..4361c5b37b 100644 --- a/web/app/components/plugins/plugin-page/debug-info.tsx +++ b/web/app/components/plugins/plugin-page/debug-info.tsx @@ -29,8 +29,8 @@ const DebugInfo: FC = () => { popupContent={ <>
- {t(`${i18nPrefix}.title`)} - + {t(`${i18nPrefix}.title`)} + {t(`${i18nPrefix}.viewDocs`)}