Update project components with latest versions

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-03-07 09:57:04 -03:00
commit fdd5ecc87d
2 changed files with 38 additions and 1 deletions

View file

@ -6,8 +6,9 @@ from emoji import demojize, purely_emoji
from loguru import logger
from sqlmodel import select
from langflow.interface.types import get_all_components
from langflow.services.database.models.flow.model import Flow, FlowCreate
from langflow.services.deps import session_scope
from langflow.services.deps import get_settings_service, session_scope
STARTER_FOLDER_NAME = "Starter Projects"
@ -17,6 +18,23 @@ STARTER_FOLDER_NAME = "Starter Projects"
# can use them as a starting point for their own projects.
def update_projects_components_with_latest_component_versions(
project_data, all_types_dict
):
# project data has a nodes key, which is a list of nodes
# we want to run through each node and see if it exists in the all_types_dict
# if so, we go into the template key and also get the template from all_types_dict
# and update it all
for node in project_data.get("nodes", []):
node_data = node.get("data").get("node")
if node_data.get("display_name") in all_types_dict:
latest_node = all_types_dict.get(node_data.get("display_name"))
latest_template = latest_node.get("template")
node_data["template"]["code"] = latest_template["code"]
return project_data
def load_starter_projects():
starter_projects = []
folder = Path(__file__).parent / "starter_projects"
@ -115,6 +133,8 @@ def delete_start_projects(session):
def create_or_update_starter_projects():
components_paths = get_settings_service().settings.COMPONENTS_PATH
all_types_dict = get_all_components(components_paths, as_dict=True)
with session_scope() as session:
starter_projects = load_starter_projects()
delete_start_projects(session)
@ -128,6 +148,9 @@ def create_or_update_starter_projects():
project_icon,
project_icon_bg_color,
) = get_project_data(project)
project_data = update_projects_components_with_latest_component_versions(
project_data, all_types_dict
)
if project_name and project_data:
for existing_project in get_all_flows_similar_to_project(
session, project_name

View file

@ -72,3 +72,17 @@ def get_all_types_dict(components_paths):
return merge_nested_dicts_with_renaming(
native_components, custom_components_from_file
)
def get_all_components(components_paths, as_dict=False):
"""Get all components names combining native and custom components."""
all_types_dict = get_all_types_dict(components_paths)
components = [] if not as_dict else {}
for category in all_types_dict.values():
for component in category.values():
component["name"] = component["display_name"]
if as_dict:
components[component["name"]] = component
else:
components.append(component)
return components