From 4d45f47698bb2b92d1b7569b40da6cd61db57caf Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 11 Mar 2024 18:09:33 -0300 Subject: [PATCH] Fix vertex iteration bug and add component metadata --- src/backend/langflow/graph/graph/base.py | 3 +-- src/backend/langflow/graph/schema.py | 2 ++ src/backend/langflow/graph/vertex/base.py | 2 ++ src/backend/langflow/processing/process.py | 3 +++ src/frontend/src/CustomNodes/GenericNode/index.tsx | 8 ++++++-- src/frontend/src/utils/utils.ts | 2 +- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/backend/langflow/graph/graph/base.py b/src/backend/langflow/graph/graph/base.py index 07a403cfd..f8d20d599 100644 --- a/src/backend/langflow/graph/graph/base.py +++ b/src/backend/langflow/graph/graph/base.py @@ -171,8 +171,7 @@ class Graph: raise ValueError(f"Error running graph: {exc}") from exc # Get the outputs vertex_outputs = [] - for vertex_id in self.vertices: - vertex = self.get_vertex(vertex_id) + for vertex in self.vertices: if vertex is None: raise ValueError(f"Vertex {vertex_id} not found") diff --git a/src/backend/langflow/graph/schema.py b/src/backend/langflow/graph/schema.py index a9f06ac1e..cf1afc3fe 100644 --- a/src/backend/langflow/graph/schema.py +++ b/src/backend/langflow/graph/schema.py @@ -13,6 +13,8 @@ class ResultData(BaseModel): messages: Optional[list[ChatOutputResponse]] = Field(default_factory=list) timedelta: Optional[float] = None duration: Optional[str] = None + component_display_name: Optional[str] = None + component_id: Optional[str] = None @field_serializer("results") def serialize_results(self, value): diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index 9738b65f5..58f52a522 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -428,6 +428,8 @@ class Vertex: results=result_dict, artifacts=artifacts, messages=messages, + component_display_name=self.display_name, + component_id=self.id, ) self.set_result(result_dict) diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index 49053e572..9c312a9e0 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -272,6 +272,9 @@ def process_tweaks(graph_data: Dict[str, Any], tweaks: Union["Tweaks", Dict[str, :raises ValueError: If the input is not in the expected format. """ + if not isinstance(tweaks, dict): + tweaks = tweaks.model_dump() + nodes = validate_input(graph_data, tweaks) nodes_map = {node.get("id"): node for node in nodes} diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index 38de618de..ac12eee3f 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -75,7 +75,11 @@ export default function GenericNode({ // This one should run only once // first check if data.type in NATIVE_CATEGORIES // if not return - if (!NATIVE_CATEGORIES.includes(types[data.type]) || !data.node?.template?.code?.value) return; + if ( + !NATIVE_CATEGORIES.includes(types[data.type]) || + !data.node?.template?.code?.value + ) + return; const thisNodeTemplate = templates[data.type].template; // if the template does not have a code key // return @@ -110,7 +114,7 @@ export default function GenericNode({ updateNodeInternals(data.id); }, - [data.id, data.node, setNode,setIsOutdated] + [data.id, data.node, setNode, setIsOutdated] ); if (!data.node!.template) { diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.ts index 9651169eb..eda9a2707 100644 --- a/src/frontend/src/utils/utils.ts +++ b/src/frontend/src/utils/utils.ts @@ -386,7 +386,7 @@ export function getCurlCode( -H 'Content-Type: application/json'\\${ !isAuth ? `\n -H 'x-api-key: '\\` : "" } - -d '{"inputs": ${inputs}, "tweaks": ${ + -d '{"inputs": [${inputs}], "tweaks": ${ tweak && tweak.length > 0 ? buildTweakObject(tweak) : JSON.stringify(tweaks, null, 2)