diff --git a/langflow/backend/langflow_backend/interface/loading.py b/langflow/backend/langflow_backend/interface/loading.py index 3d156c749..d6992305e 100644 --- a/langflow/backend/langflow_backend/interface/loading.py +++ b/langflow/backend/langflow_backend/interface/loading.py @@ -11,6 +11,7 @@ from langflow_backend.utils import payload def load_flow_from_json(path: str): + """Load flow from json file""" with open(path, "r") as f: flow_graph = json.load(f) data_graph = flow_graph["data"] @@ -22,6 +23,7 @@ def load_flow_from_json(path: str): def replace_zero_shot_prompt_with_prompt_template(nodes): + """Replace ZeroShotPrompt with PromptTemplate""" for node in nodes: if node["data"]["type"] == "ZeroShotPrompt": # Build Prompt Template @@ -37,6 +39,8 @@ def replace_zero_shot_prompt_with_prompt_template(nodes): def process_data_graph(data_graph: Dict[str, Any]): + """Process data graph by extracting input variables and replacing ZeroShotPrompt with PromptTemplate, + then run the graph and return the result and thought.""" nodes = data_graph["nodes"] # Substitute ZeroShotPrompt with PromptTemplate nodes = replace_zero_shot_prompt_with_prompt_template(nodes) @@ -64,6 +68,7 @@ def process_data_graph(data_graph: Dict[str, Any]): def load_langchain_type_from_config(config: Dict[str, Any]): + """Load langchain type from config""" # Get type list type_list = get_type_list() if config["_type"] in type_list["agents"]: @@ -77,6 +82,7 @@ def load_langchain_type_from_config(config: Dict[str, Any]): def get_result_and_thought(extracted_json: Dict[str, Any], message: str): + """Get result and thought from extracted json""" # Get type list try: loaded = load_langchain_type_from_config(config=extracted_json) @@ -90,6 +96,7 @@ def get_result_and_thought(extracted_json: Dict[str, Any], message: str): def build_prompt_template(prompt, tools): + """Build PromptTemplate from ZeroShotPrompt""" prefix = prompt["node"]["template"]["prefix"]["value"] suffix = prompt["node"]["template"]["suffix"]["value"] format_instructions = prompt["node"]["template"]["format_instructions"]["value"] diff --git a/langflow/backend/langflow_backend/utils/payload.py b/langflow/backend/langflow_backend/utils/payload.py index e4aa5cc93..7674e1cf9 100644 --- a/langflow/backend/langflow_backend/utils/payload.py +++ b/langflow/backend/langflow_backend/utils/payload.py @@ -1,3 +1,4 @@ +import contextlib import re @@ -6,7 +7,7 @@ def extract_input_variables(data): Extracts input variables from the template and adds them to the input_variables field. """ for node in data["nodes"]: - try: + with contextlib.suppress(Exception): if "input_variables" in node["data"]["node"]["template"]: if node["data"]["node"]["template"]["_type"] == "prompt": variables = re.findall( @@ -22,8 +23,6 @@ def extract_input_variables(data): else: variables = [] node["data"]["node"]["template"]["input_variables"]["value"] = variables - except: - pass return data @@ -31,16 +30,16 @@ def get_root_node(data): """ Returns the root node of the template. """ - root = None incoming_edges = {edge["source"] for edge in data["edges"]} - for node in data["nodes"]: - if node["id"] not in incoming_edges: - root = node - break - return root + return next( + (node for node in data["nodes"] if node["id"] not in incoming_edges), None + ) def build_json(root, nodes, edges): + """ + Builds a json from the nodes and edges + """ edge_ids = [edge["source"] for edge in edges if edge["target"] == root["id"]] local_nodes = [node for node in nodes if node["id"] in edge_ids] @@ -71,9 +70,7 @@ def build_json(root, nodes, edges): if value["required"] and not children: raise ValueError(f"No child with type {module_type} found") - values = [ - build_json(child, nodes, edges) for child in children - ] + values = [build_json(child, nodes, edges) for child in children] value = list(values) if value["list"] else next(iter(values), None) final_dict[key] = value return final_dict