Map ChatVertex connections and update external vertex attributes
This commit is contained in:
parent
edb9ba5a80
commit
cd43aa729a
1 changed files with 31 additions and 3 deletions
|
|
@ -2,15 +2,14 @@ from collections import defaultdict, deque
|
|||
from typing import Dict, Generator, List, Type, Union
|
||||
|
||||
from langchain.chains.base import Chain
|
||||
from loguru import logger
|
||||
|
||||
from langflow.graph.edge.base import ContractEdge
|
||||
from langflow.graph.graph.constants import lazy_load_vertex_dict
|
||||
from langflow.graph.graph.utils import process_flow
|
||||
from langflow.graph.vertex.base import Vertex
|
||||
from langflow.graph.vertex.types import FileToolVertex, LLMVertex, ToolkitVertex
|
||||
from langflow.graph.vertex.types import ChatVertex, FileToolVertex, LLMVertex, ToolkitVertex
|
||||
from langflow.interface.tools.constants import FILE_TOOLS
|
||||
from langflow.utils import payload
|
||||
from loguru import logger
|
||||
|
||||
|
||||
class Graph:
|
||||
|
|
@ -21,6 +20,8 @@ class Graph:
|
|||
nodes: List[Dict],
|
||||
edges: List[Dict[str, str]],
|
||||
) -> None:
|
||||
self.inputs = []
|
||||
self.outputs = []
|
||||
self._vertices = nodes
|
||||
self._edges = edges
|
||||
self.raw_graph_data = {"nodes": nodes, "edges": edges}
|
||||
|
|
@ -81,6 +82,31 @@ class Graph:
|
|||
self._build_vertex_params()
|
||||
# remove invalid vertices
|
||||
self._validate_vertices()
|
||||
# Now that we have the vertices and edges
|
||||
# We need to map the vertices that are connected to
|
||||
# to ChatVertex instances
|
||||
self._map_chat_vertices()
|
||||
|
||||
def _map_chat_vertices(self) -> None:
|
||||
"""Maps the vertices that are connected to ChatVertex instances."""
|
||||
# For each edge, we need to check if the source or target vertex is a ChatVertex
|
||||
# If it is, we need to update the other vertex `is_external` attribute
|
||||
# and store the id of the ChatVertex in the attributes self.inputs and self.outputs
|
||||
for edge in self.edges:
|
||||
source_vertex = self.get_vertex(edge.source_id)
|
||||
target_vertex = self.get_vertex(edge.target_id)
|
||||
if isinstance(source_vertex, ChatVertex):
|
||||
# The source vertex is a ChatVertex
|
||||
# thus the target vertex is an external vertex
|
||||
# and the source vertex is an input
|
||||
target_vertex.has_external_input = True
|
||||
self.inputs.append(source_vertex.id)
|
||||
if isinstance(target_vertex, ChatVertex):
|
||||
# The target vertex is a ChatVertex
|
||||
# thus the source vertex is an external vertex
|
||||
# and the target vertex is an output
|
||||
source_vertex.has_external_output = True
|
||||
self.outputs.append(target_vertex.id)
|
||||
|
||||
def _build_vertex_params(self) -> None:
|
||||
"""Identifies and handles the LLM vertex within the graph."""
|
||||
|
|
@ -284,3 +310,5 @@ class Graph:
|
|||
current_layer += 1 # Next layer
|
||||
|
||||
return layers
|
||||
return layers
|
||||
return layers
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue