|  | @@ -14,9 +14,8 @@ from flask import Flask, current_app
 | 
	
		
			
				|  |  |  from sqlalchemy.orm import Session
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from core.agent.entities import AgentToolEntity
 | 
	
		
			
				|  |  | -from core.entities import DEFAULT_PLUGIN_ID
 | 
	
		
			
				|  |  |  from core.helper import marketplace
 | 
	
		
			
				|  |  | -from core.plugin.entities.plugin import PluginInstallationSource
 | 
	
		
			
				|  |  | +from core.plugin.entities.plugin import ModelProviderID, PluginInstallationSource, ToolProviderID
 | 
	
		
			
				|  |  |  from core.plugin.entities.plugin_daemon import PluginInstallTaskStatus
 | 
	
		
			
				|  |  |  from core.plugin.manager.plugin import PluginInstallationManager
 | 
	
		
			
				|  |  |  from core.tools.entities.tool_entities import ToolProviderType
 | 
	
	
		
			
				|  | @@ -203,13 +202,7 @@ class PluginMigration:
 | 
	
		
			
				|  |  |              result = []
 | 
	
		
			
				|  |  |              for row in rs:
 | 
	
		
			
				|  |  |                  provider_name = str(row[0])
 | 
	
		
			
				|  |  | -                if provider_name and "/" not in provider_name:
 | 
	
		
			
				|  |  | -                    if provider_name == "google":
 | 
	
		
			
				|  |  | -                        provider_name = "gemini"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    result.append(DEFAULT_PLUGIN_ID + "/" + provider_name)
 | 
	
		
			
				|  |  | -                elif provider_name:
 | 
	
		
			
				|  |  | -                    result.append(provider_name)
 | 
	
		
			
				|  |  | +                result.append(ModelProviderID(provider_name).plugin_id)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return result
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -222,31 +215,11 @@ class PluginMigration:
 | 
	
		
			
				|  |  |              rs = session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all()
 | 
	
		
			
				|  |  |              result = []
 | 
	
		
			
				|  |  |              for row in rs:
 | 
	
		
			
				|  |  | -                if "/" not in row.provider:
 | 
	
		
			
				|  |  | -                    result.append(DEFAULT_PLUGIN_ID + "/" + row.provider)
 | 
	
		
			
				|  |  | -                else:
 | 
	
		
			
				|  |  | -                    result.append(row.provider)
 | 
	
		
			
				|  |  | +                result.append(ToolProviderID(row.provider).plugin_id)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return result
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @classmethod
 | 
	
		
			
				|  |  | -    def _handle_builtin_tool_provider(cls, provider_name: str) -> str:
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -        Handle builtin tool provider.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -        if provider_name == "jina":
 | 
	
		
			
				|  |  | -            provider_name = "jina_tool"
 | 
	
		
			
				|  |  | -        elif provider_name == "siliconflow":
 | 
	
		
			
				|  |  | -            provider_name = "siliconflow_tool"
 | 
	
		
			
				|  |  | -        elif provider_name == "stepfun":
 | 
	
		
			
				|  |  | -            provider_name = "stepfun_tool"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if "/" not in provider_name:
 | 
	
		
			
				|  |  | -            return DEFAULT_PLUGIN_ID + "/" + provider_name
 | 
	
		
			
				|  |  | -        else:
 | 
	
		
			
				|  |  | -            return provider_name
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    @classmethod
 | 
	
		
			
				|  |  |      def extract_workflow_tables(cls, tenant_id: str) -> Sequence[str]:
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |          Extract workflow tables, only ToolNode is required.
 | 
	
	
		
			
				|  | @@ -266,8 +239,7 @@ class PluginMigration:
 | 
	
		
			
				|  |  |                          provider_name = data.get("provider_name")
 | 
	
		
			
				|  |  |                          provider_type = data.get("provider_type")
 | 
	
		
			
				|  |  |                          if provider_name not in excluded_providers and provider_type == ToolProviderType.BUILT_IN.value:
 | 
	
		
			
				|  |  | -                            provider_name = cls._handle_builtin_tool_provider(provider_name)
 | 
	
		
			
				|  |  | -                            result.append(provider_name)
 | 
	
		
			
				|  |  | +                            result.append(ToolProviderID(provider_name).plugin_id)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return result
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -298,7 +270,7 @@ class PluginMigration:
 | 
	
		
			
				|  |  |                                      tool_entity.provider_type == ToolProviderType.BUILT_IN.value
 | 
	
		
			
				|  |  |                                      and tool_entity.provider_id not in excluded_providers
 | 
	
		
			
				|  |  |                                  ):
 | 
	
		
			
				|  |  | -                                    result.append(cls._handle_builtin_tool_provider(tool_entity.provider_id))
 | 
	
		
			
				|  |  | +                                    result.append(ToolProviderID(tool_entity.provider_id).plugin_id)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                              except Exception:
 | 
	
		
			
				|  |  |                                  logger.exception(f"Failed to process tool {tool}")
 |