From 819eb703d113836c4b152377acd2a5a3a0256fce Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Sat, 5 Aug 2023 12:11:28 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(utils.py):=20add=20function?= =?UTF-8?q?=20merge=5Fnested=5Fdicts=5Fwith=5Frenaming=20to=20handle=20mer?= =?UTF-8?q?ging=20nested=20dictionaries=20with=20renaming=20of=20keys=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(endpoints.py):=20update=20import=20statement?= =?UTF-8?q?=20to=20import=20merge=5Fnested=5Fdicts=5Fwith=5Frenaming=20fro?= =?UTF-8?q?m=20utils.py=20=F0=9F=90=9B=20fix(endpoints.py):=20update=20fun?= =?UTF-8?q?ction=20call=20to=20merge=5Fnested=5Fdicts=5Fwith=5Frenaming=20?= =?UTF-8?q?to=20handle=20merging=20of=20native=20and=20custom=20components?= =?UTF-8?q?=20=F0=9F=90=9B=20fix(types.py):=20remove=20unused=20import=20s?= =?UTF-8?q?tatement=20for=20merge=5Fnested=5Fdicts=20from=20utils.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/api/utils.py | 27 ++++++++++++++++++++++++ src/backend/langflow/api/v1/endpoints.py | 8 ++++--- src/backend/langflow/interface/types.py | 1 - 3 files changed, 32 insertions(+), 4 deletions(-) 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