diff --git a/src/backend/langflow/api/utils.py b/src/backend/langflow/api/utils.py index 91fa93ea4..0fb53e541 100644 --- a/src/backend/langflow/api/utils.py +++ b/src/backend/langflow/api/utils.py @@ -66,3 +66,30 @@ def merge_nested_dicts(dict1, dict2): else: dict1[key] = value return dict1 + + +def merge_nested_dicts_with_renaming(dict1, dict2): + for key, value in dict2.items(): + if ( + key in dict1 + and isinstance(value, dict) + and isinstance(dict1.get(key), dict) + ): + for sub_key, sub_value in value.items(): + if sub_key in dict1[key]: + new_key = get_new_key(dict1[key], sub_key) + dict1[key][new_key] = sub_value + else: + dict1[key][sub_key] = sub_value + else: + dict1[key] = value + return dict1 + + +def get_new_key(dictionary, original_key): + counter = 1 + new_key = original_key + " (" + str(counter) + ")" + while new_key in dictionary: + counter += 1 + new_key = original_key + " (" + str(counter) + ")" + return new_key diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index 1ca2a2437..24af55588 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -18,7 +18,7 @@ from langflow.api.v1.schemas import ( CustomComponentCode, ) -from langflow.api.utils import merge_nested_dicts +from langflow.api.utils import merge_nested_dicts_with_renaming from langflow.interface.types import ( build_langchain_types_dict, @@ -54,11 +54,13 @@ def get_all(): f"Loading {len(custom_component_dict[category])} component(s) from category {category}" ) logger.debug(custom_component_dict) - custom_components_from_file = merge_nested_dicts( + custom_components_from_file = merge_nested_dicts_with_renaming( custom_components_from_file, custom_component_dict ) - return merge_nested_dicts(native_components, custom_components_from_file) + return merge_nested_dicts_with_renaming( + native_components, custom_components_from_file + ) # For backwards compatibility we will keep the old endpoint diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index 3b4c09b32..668956e07 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -30,7 +30,6 @@ from langflow.interface.retrievers.base import retriever_creator from langflow.interface.custom.directory_reader import DirectoryReader from langflow.utils.logger import logger from langflow.utils.util import get_base_classes -from langflow.api.utils import merge_nested_dicts import re import warnings