From b8c95fb7ec47ef3f47d7222aee4f2ab1fdc20580 Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Tue, 9 May 2023 16:56:05 -0300 Subject: [PATCH] Get data from Validate Nodes and display it on Tooltip --- src/backend/langflow/api/validate.py | 7 ++-- .../src/CustomNodes/GenericNode/index.tsx | 39 +++++++++++++------ .../src/components/inputComponent/index.tsx | 2 +- .../components/textAreaComponent/index.tsx | 2 +- .../components/tabsManagerComponent/index.tsx | 8 ++-- src/frontend/src/types/components/index.ts | 4 +- 6 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/backend/langflow/api/validate.py b/src/backend/langflow/api/validate.py index 36b954f95..0926ab16b 100644 --- a/src/backend/langflow/api/validate.py +++ b/src/backend/langflow/api/validate.py @@ -10,6 +10,7 @@ from langflow.api.base import ( from langflow.interface.run import build_graph from langflow.utils.logger import logger from langflow.utils.validate import validate_code +import json # build router router = APIRouter(prefix="/validate", tags=["validate"]) @@ -46,8 +47,8 @@ def post_validate_node(node_id: str, data: dict): node = graph.get_node(node_id) if node is not None: _ = node.build() - return str(node.params) - raise Exception(f"Node {node_id} not found") + return json.dumps({'valid': True, 'params': str(node.params)}) + else: + return json.dumps({'valid': False}) except Exception as e: logger.error(e) - raise HTTPException(status_code=500, detail=str(e)) from e diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index cc6738dcb..da55e690c 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -1,4 +1,4 @@ -import { Cog6ToothIcon, TrashIcon } from "@heroicons/react/24/outline"; +import { BugAntIcon, Cog6ToothIcon, ExclamationCircleIcon, InformationCircleIcon, TrashIcon } from "@heroicons/react/24/outline"; import { classNames, nodeColors, @@ -7,7 +7,7 @@ import { } from "../../utils"; import ParameterComponent from "./components/parameterComponent"; import { typesContext } from "../../contexts/typesContext"; -import { useContext, useState, useEffect, useRef } from "react"; +import { useContext, useState, useEffect, useRef, Fragment } from "react"; import { NodeDataType } from "../../types/flow"; import { alertContext } from "../../contexts/alertContext"; import { PopUpContext } from "../../contexts/popUpContext"; @@ -15,6 +15,7 @@ import NodeModal from "../../modals/NodeModal"; import { useCallback } from "react"; import { TabsContext } from "../../contexts/tabsContext"; import { debounce } from "../../utils"; +import Tooltip from "../../components/TooltipComponent"; export default function GenericNode({ data, selected, @@ -27,7 +28,7 @@ export default function GenericNode({ const { types, deleteNode } = useContext(typesContext); const { openPopUp } = useContext(PopUpContext); const Icon = nodeIcons[types[data.type]]; - const [validationStatus, setValidationStatus] = useState("idle"); + const [validationStatus, setValidationStatus] = useState(null); // State for outline color const [isValid, setIsValid] = useState(false); const { save } = useContext(TabsContext); @@ -53,9 +54,14 @@ export default function GenericNode({ }); if (response.status === 200) { - setValidationStatus("success"); - } else if (response.status === 500) { - setValidationStatus("error"); + let jsonResponse = await response.json(); + let jsonResponseParsed = await JSON.parse(jsonResponse); + console.log(jsonResponseParsed); + if(jsonResponseParsed.valid){ + setValidationStatus(jsonResponseParsed.params); + } else { + setValidationStatus("error"); + } } } catch (error) { // console.error("Error validating node:", error); @@ -71,7 +77,7 @@ export default function GenericNode({ }, [params, validateNode]); useEffect(() => { - if (validationStatus === "success") { + if (validationStatus !== "error") { setIsValid(true); } else { setIsValid(false); @@ -100,14 +106,23 @@ export default function GenericNode({ )} >
-
+
-
{data.type}
+
{data.type}
+ {validationStatus && validationStatus !== "error" ? + + {validationStatus} +
}> + + + : <> +}
@@ -143,13 +158,13 @@ export default function GenericNode({ deleteNode(data.id); }} > - +
-
+
{data.node.description}
diff --git a/src/frontend/src/components/inputComponent/index.tsx b/src/frontend/src/components/inputComponent/index.tsx index f28d82307..fa580ffe4 100644 --- a/src/frontend/src/components/inputComponent/index.tsx +++ b/src/frontend/src/components/inputComponent/index.tsx @@ -38,7 +38,7 @@ export default function InputComponent({ }} />