refactor(validate.py): add error handling and logging to post_validate_node function

feat(graph/base.py): add _built_object_repr method to Node class
feat(graph/nodes.py): add _built_object_repr method to DocumentLoaderNode, VectorStoreNode, and TextSplitterNode classes
This commit is contained in:
Gabriel Almeida 2023-05-12 09:39:35 -03:00
commit 4853a701d3
3 changed files with 28 additions and 6 deletions

View file

@ -9,6 +9,7 @@ from langflow.api.base import (
PromptValidationResponse,
validate_prompt,
)
from langflow.graph.nodes import VectorStoreNode
from langflow.interface.run import build_graph
from langflow.utils.logger import logger
from langflow.utils.validate import validate_code
@ -46,10 +47,11 @@ def post_validate_node(node_id: str, data: dict):
graph = build_graph(data)
# validate node
node = graph.get_node(node_id)
if node is not None:
_ = node.build()
return json.dumps({"valid": True, "params": str(node.params)})
else:
return json.dumps({"valid": False})
if node is None:
raise ValueError(f"Node {node_id} not found")
if not isinstance(node, VectorStoreNode):
node.build()
return json.dumps({"valid": True, "params": str(node._built_object_repr())})
except Exception as e:
logger.error(e)
logger.exception(e)
return json.dumps({"valid": False})

View file

@ -232,6 +232,9 @@ class Node:
def __hash__(self) -> int:
return id(self)
def _built_object_repr(self):
return repr(self._built_object)
class Edge:
def __init__(self, source: "Node", target: "Node"):

View file

@ -139,6 +139,13 @@ class DocumentLoaderNode(Node):
def __init__(self, data: Dict):
super().__init__(data, base_type="documentloaders")
def _built_object_repr(self):
# This built_object is a list of documents. Maybe we should
# show how many documents are in the list?
if self._built_object:
return f"""{self.node_type}({len(self._built_object)} documents)\nDocuments: {self._built_object[:3]}..."""
return f"{self.node_type}()"
class EmbeddingNode(Node):
def __init__(self, data: Dict):
@ -149,6 +156,9 @@ class VectorStoreNode(Node):
def __init__(self, data: Dict):
super().__init__(data, base_type="vectorstores")
def _built_object_repr(self):
return "Vector stores can take time to build. It will build on the first query."
class MemoryNode(Node):
def __init__(self, data: Dict):
@ -158,3 +168,10 @@ class MemoryNode(Node):
class TextSplitterNode(Node):
def __init__(self, data: Dict):
super().__init__(data, base_type="textsplitters")
def _built_object_repr(self):
# This built_object is a list of documents. Maybe we should
# show how many documents are in the list?
if self._built_object:
return f"""{self.node_type}({len(self._built_object)} documents)\nDocuments: {self._built_object[:3]}..."""
return f"{self.node_type}()"