From a90c9fbd34814305fa679f07c69b1166fc6a659b Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 10 Jul 2023 22:42:05 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(loading.py):=20replace=20spa?= =?UTF-8?q?ces=20with=20underscores=20in=20tool=20names=20to=20improve=20c?= =?UTF-8?q?onsistency=20and=20avoid=20issues=20=F0=9F=90=9B=20fix(base.py)?= =?UTF-8?q?:=20catch=20and=20log=20exceptions=20when=20fixing=20memory=20i?= =?UTF-8?q?nputs=20to=20prevent=20crashes=20=F0=9F=90=9B=20fix(process.py)?= =?UTF-8?q?:=20check=20if=20memory=5Fkey=20attribute=20exists=20before=20a?= =?UTF-8?q?ccessing=20it=20to=20prevent=20AttributeError=20=F0=9F=90=9B=20?= =?UTF-8?q?fix(memories.py):=20hide=20memory=5Fkey=20field=20for=20Convers?= =?UTF-8?q?ationEntityMemory=20to=20improve=20user=20experience?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/interface/initialize/loading.py | 9 ++++++++- src/backend/langflow/processing/base.py | 5 ++++- src/backend/langflow/processing/process.py | 5 ++++- src/backend/langflow/template/frontend_node/memories.py | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py index ed80b0adb..ba617fe34 100644 --- a/src/backend/langflow/interface/initialize/loading.py +++ b/src/backend/langflow/interface/initialize/loading.py @@ -68,7 +68,11 @@ def instantiate_based_on_type(class_object, base_type, node_type, params): elif base_type == "prompts": return instantiate_prompt(node_type, class_object, params) elif base_type == "tools": - return instantiate_tool(node_type, class_object, params) + tool = instantiate_tool(node_type, class_object, params) + if hasattr(tool, "name") and isinstance(tool, BaseTool): + # tool name shouldn't contain spaces + tool.name = tool.name.replace(" ", "_") + return tool elif base_type == "toolkits": return instantiate_toolkit(node_type, class_object, params) elif base_type == "embeddings": @@ -133,6 +137,9 @@ def instantiate_llm(node_type, class_object, params: Dict): def instantiate_memory(node_type, class_object, params): # process input_key and output_key to remove them if # they are empty strings + if node_type == "ConversationEntityMemory": + params.pop("memory_key", None) + for key in ["input_key", "output_key"]: if key in params and (params[key] == "" or not params[key]): params.pop(key) diff --git a/src/backend/langflow/processing/base.py b/src/backend/langflow/processing/base.py index e8880c34e..f8690bbdf 100644 --- a/src/backend/langflow/processing/base.py +++ b/src/backend/langflow/processing/base.py @@ -19,8 +19,11 @@ async def get_result_and_steps(langchain_object, inputs: Union[dict, str], **kwa # Deactivating until we have a frontend solution # to display intermediate steps langchain_object.return_intermediate_steps = True + try: + fix_memory_inputs(langchain_object) + except Exception as exc: + logger.error(exc) - fix_memory_inputs(langchain_object) try: async_callbacks = [AsyncStreamingLLMCallbackHandler(**kwargs)] output = await langchain_object.acall(inputs, callbacks=async_callbacks) diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index d4d7b8a26..228a2836d 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -22,7 +22,10 @@ def fix_memory_inputs(langchain_object): if not hasattr(langchain_object, "memory") or langchain_object.memory is None: return try: - if langchain_object.memory.memory_key in langchain_object.input_variables: + if ( + hasattr(langchain_object.memory, "memory_key") + and langchain_object.memory.memory_key in langchain_object.input_variables + ): return except AttributeError: input_variables = ( diff --git a/src/backend/langflow/template/frontend_node/memories.py b/src/backend/langflow/template/frontend_node/memories.py index f84c18751..374d36ff0 100644 --- a/src/backend/langflow/template/frontend_node/memories.py +++ b/src/backend/langflow/template/frontend_node/memories.py @@ -90,6 +90,9 @@ class MemoryFrontendNode(FrontendNode): field.show = True if field.name == "entity_store": field.show = False + if name == "ConversationEntityMemory" and field.name == "memory_key": + field.show = False + field.required = False class PostgresChatMessageHistoryFrontendNode(MemoryFrontendNode):