Fix/disable autoflush in list tools (#14301)

This commit is contained in:
Yeuoly 2025-02-25 14:52:08 +08:00 committed by GitHub
parent 3403ac361a
commit 8c9e34133c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -233,56 +233,57 @@ class BuiltinToolManageService:
# get all builtin providers # get all builtin providers
provider_controllers = ToolManager.list_builtin_providers(tenant_id) provider_controllers = ToolManager.list_builtin_providers(tenant_id)
# get all user added providers with db.session.no_autoflush:
db_providers: list[BuiltinToolProvider] = ( # get all user added providers
db.session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all() or [] db_providers: list[BuiltinToolProvider] = (
) db.session.query(BuiltinToolProvider).filter(BuiltinToolProvider.tenant_id == tenant_id).all() or []
)
# rewrite db_providers # rewrite db_providers
for db_provider in db_providers: for db_provider in db_providers:
db_provider.provider = str(ToolProviderID(db_provider.provider)) db_provider.provider = str(ToolProviderID(db_provider.provider))
# find provider # find provider
def find_provider(provider): def find_provider(provider):
return next(filter(lambda db_provider: db_provider.provider == provider, db_providers), None) return next(filter(lambda db_provider: db_provider.provider == provider, db_providers), None)
result: list[ToolProviderApiEntity] = [] result: list[ToolProviderApiEntity] = []
for provider_controller in provider_controllers: for provider_controller in provider_controllers:
try: try:
# handle include, exclude # handle include, exclude
if is_filtered( if is_filtered(
include_set=dify_config.POSITION_TOOL_INCLUDES_SET, # type: ignore include_set=dify_config.POSITION_TOOL_INCLUDES_SET, # type: ignore
exclude_set=dify_config.POSITION_TOOL_EXCLUDES_SET, # type: ignore exclude_set=dify_config.POSITION_TOOL_EXCLUDES_SET, # type: ignore
data=provider_controller, data=provider_controller,
name_func=lambda x: x.identity.name, name_func=lambda x: x.identity.name,
): ):
continue continue
# convert provider controller to user provider # convert provider controller to user provider
user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider( user_builtin_provider = ToolTransformService.builtin_provider_to_user_provider(
provider_controller=provider_controller, provider_controller=provider_controller,
db_provider=find_provider(provider_controller.entity.identity.name), db_provider=find_provider(provider_controller.entity.identity.name),
decrypt_credentials=True, decrypt_credentials=True,
)
# add icon
ToolTransformService.repack_provider(tenant_id=tenant_id, provider=user_builtin_provider)
tools = provider_controller.get_tools()
for tool in tools or []:
user_builtin_provider.tools.append(
ToolTransformService.convert_tool_entity_to_api_entity(
tenant_id=tenant_id,
tool=tool,
credentials=user_builtin_provider.original_credentials,
labels=ToolLabelManager.get_tool_labels(provider_controller),
)
) )
result.append(user_builtin_provider) # add icon
except Exception as e: ToolTransformService.repack_provider(tenant_id=tenant_id, provider=user_builtin_provider)
raise e
tools = provider_controller.get_tools()
for tool in tools or []:
user_builtin_provider.tools.append(
ToolTransformService.convert_tool_entity_to_api_entity(
tenant_id=tenant_id,
tool=tool,
credentials=user_builtin_provider.original_credentials,
labels=ToolLabelManager.get_tool_labels(provider_controller),
)
)
result.append(user_builtin_provider)
except Exception as e:
raise e
return BuiltinToolProviderSort.sort(result) return BuiltinToolProviderSort.sort(result)