From 77d91cd23ac978126af39b60bb3238d3358d4353 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 27 Sep 2023 12:35:59 -0300 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=90=9B=20fix(documentloaders.py):=20m?= =?UTF-8?q?ake=20'metadata'=20field=20optional=20instead=20of=20required?= =?UTF-8?q?=20to=20allow=20empty=20values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/template/frontend_node/documentloaders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/langflow/template/frontend_node/documentloaders.py b/src/backend/langflow/template/frontend_node/documentloaders.py index 8118593f3..0be2ebe98 100644 --- a/src/backend/langflow/template/frontend_node/documentloaders.py +++ b/src/backend/langflow/template/frontend_node/documentloaders.py @@ -171,7 +171,7 @@ class DocumentLoaderFrontNode(FrontendNode): self.template.add_field( TemplateField( field_type="dict", - required=True, + required=False, show=True, name="metadata", value={}, From ecee08502f406605de0342a65891e0070866b2b5 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 27 Sep 2023 12:36:14 -0300 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=90=9B=20fix(base.py):=20handle=20cas?= =?UTF-8?q?e=20when=20file=5Fpath=20is=20not=20found=20for=20a=20vertex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/graph/vertex/base.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index 3877e59b1..51fa8d815 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -185,9 +185,10 @@ class Vertex: # Load the type in value.get('suffixes') using # what is inside value.get('content') # value.get('value') is the file name - file_path = value.get("file_path") - - params[key] = file_path + if file_path := value.get("file_path"): + params[key] = file_path + else: + raise ValueError(f"File path not found for {self.vertex_type}") elif value.get("type") in DIRECT_TYPES and params.get(key) is None: if value.get("type") == "code": try: From 88f24d292dc5f4ce665301d1f8e93769c837e85a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 27 Sep 2023 12:36:32 -0300 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=90=9B=20fix(cache/manager.py):=20han?= =?UTF-8?q?dle=20pickled=20values=20in=20get=20method=20to=20correctly=20r?= =?UTF-8?q?eturn=20the=20value=20=E2=9C=A8=20feat(cache/manager.py):=20add?= =?UTF-8?q?=20support=20for=20pickling=20values=20in=20set=20method=20to?= =?UTF-8?q?=20mimic=20Redis=20behavior?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/services/cache/manager.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/backend/langflow/services/cache/manager.py b/src/backend/langflow/services/cache/manager.py index 19f5034cf..da76a2b5c 100644 --- a/src/backend/langflow/services/cache/manager.py +++ b/src/backend/langflow/services/cache/manager.py @@ -74,13 +74,17 @@ class InMemoryCache(BaseCacheService, Service): ): # Move the key to the end to make it recently used self._cache.move_to_end(key) - unpickled = pickle.loads(item["value"]) - return unpickled + # Check if the value is pickled + if isinstance(item["value"], bytes): + value = pickle.loads(item["value"]) + else: + value = item["value"] + return value else: self.delete(key) return None - def set(self, key, value): + def set(self, key, value, pickle=False): """ Add an item to the cache. @@ -98,8 +102,10 @@ class InMemoryCache(BaseCacheService, Service): # Remove least recently used item self._cache.popitem(last=False) # pickle locally to mimic Redis - pickled = pickle.dumps(value) - self._cache[key] = {"value": pickled, "time": time.time()} + if pickle: + value = pickle.dumps(value) + + self._cache[key] = {"value": value, "time": time.time()} def upsert(self, key, value): """ From 91bfa9a5d39859efb77dea4bbfa3261d3d6a1a03 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 27 Sep 2023 12:37:12 -0300 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=90=9B=20fix(utils.py):=20add=20error?= =?UTF-8?q?=20handling=20for=20flow=20not=20found=20in=20cache=20when=20up?= =?UTF-8?q?dating=20build=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/services/cache/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/langflow/services/cache/utils.py b/src/backend/langflow/services/cache/utils.py index a708c6e7e..bd6b4fb0a 100644 --- a/src/backend/langflow/services/cache/utils.py +++ b/src/backend/langflow/services/cache/utils.py @@ -207,5 +207,7 @@ def save_uploaded_file(file: UploadFile, folder_name): def update_build_status(cache_service, flow_id: str, status: BuildStatus): cached_flow = cache_service[flow_id] + if cached_flow is None: + raise ValueError(f"Flow {flow_id} not found in cache") cached_flow["status"] = status cache_service[flow_id] = cached_flow From 544cb859deead851e1c50af0e328b5297201b7eb Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Wed, 27 Sep 2023 13:02:37 -0300 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=90=9B=20fix(utils.py):=20add=20suppo?= =?UTF-8?q?rt=20for=20importing=20SQLDatabaseChain=20from=20langchain=5Fex?= =?UTF-8?q?perimental.sql=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/interface/importing/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/langflow/interface/importing/utils.py b/src/backend/langflow/interface/importing/utils.py index d07222dd1..000eed205 100644 --- a/src/backend/langflow/interface/importing/utils.py +++ b/src/backend/langflow/interface/importing/utils.py @@ -144,6 +144,8 @@ def import_chain(chain: str) -> Type[Chain]: if chain in CUSTOM_CHAINS: return CUSTOM_CHAINS[chain] + if chain == "SQLDatabaseChain": + return import_class("langchain_experimental.sql.SQLDatabaseChain") return import_class(f"langchain.chains.{chain}")