diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index 127a51627..b2d175f77 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -45,14 +45,16 @@ def get_all( logger.debug("Building langchain types dict") try: - all_types_dict = get_all_types_dict(settings_service) + all_types_dict = get_all_types_dict(settings_service.settings.COMPONENTS_PATH) return all_types_dict except Exception as exc: logger.exception(exc) raise HTTPException(status_code=500, detail=str(exc)) from exc -@router.post("/run/{flow_id}", response_model=RunResponse, response_model_exclude_none=True) +@router.post( + "/run/{flow_id}", response_model=RunResponse, response_model_exclude_none=True +) async def run_flow_with_caching( session: Annotated[Session, Depends(get_session)], flow_id: str, @@ -111,7 +113,9 @@ async def run_flow_with_caching( outputs = [] if session_id: - session_data = await session_service.load_session(session_id, flow_id=flow_id) + session_data = await session_service.load_session( + session_id, flow_id=flow_id + ) graph, artifacts = session_data if session_data else (None, None) task_result: Any = None if not graph: @@ -130,7 +134,11 @@ async def run_flow_with_caching( else: # Get the flow that matches the flow_id and belongs to the user # flow = session.query(Flow).filter(Flow.id == flow_id).filter(Flow.user_id == api_key_user.id).first() - flow = session.exec(select(Flow).where(Flow.id == flow_id).where(Flow.user_id == api_key_user.id)).first() + flow = session.exec( + select(Flow) + .where(Flow.id == flow_id) + .where(Flow.user_id == api_key_user.id) + ).first() if flow is None: raise ValueError(f"Flow {flow_id} not found") @@ -154,12 +162,18 @@ async def run_flow_with_caching( # StatementError('(builtins.ValueError) badly formed hexadecimal UUID string') if "badly formed hexadecimal UUID string" in str(exc): # This means the Flow ID is not a valid UUID which means it can't find the flow - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail=str(exc) + ) from exc except ValueError as exc: if f"Flow {flow_id} not found" in str(exc): - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(exc)) from exc + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail=str(exc) + ) from exc else: - raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc)) from exc + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(exc) + ) from exc @router.post( @@ -188,7 +202,8 @@ async def process( """ # Raise a depreciation warning logger.warning( - "The /process endpoint is deprecated and will be removed in a future version. " "Please use /run instead." + "The /process endpoint is deprecated and will be removed in a future version. " + "Please use /run instead." ) raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -260,12 +275,16 @@ async def custom_component( built_frontend_node = build_custom_component_template(component, user_id=user.id) - built_frontend_node = update_frontend_node_with_template_values(built_frontend_node, raw_code.frontend_node) + built_frontend_node = update_frontend_node_with_template_values( + built_frontend_node, raw_code.frontend_node + ) return built_frontend_node @router.post("/custom_component/reload", status_code=HTTPStatus.OK) -async def reload_custom_component(path: str, user: User = Depends(get_current_active_user)): +async def reload_custom_component( + path: str, user: User = Depends(get_current_active_user) +): from langflow.interface.custom.utils import build_custom_component_template try: diff --git a/src/backend/langflow/interface/custom/utils.py b/src/backend/langflow/interface/custom/utils.py index 906f83940..266a044f5 100644 --- a/src/backend/langflow/interface/custom/utils.py +++ b/src/backend/langflow/interface/custom/utils.py @@ -426,17 +426,17 @@ def create_component_template(component): return component_template -def build_custom_components(settings_service): +def build_custom_components(components_paths: List[str]): """Build custom components from the specified paths.""" - if not settings_service.settings.COMPONENTS_PATH: + if not components_paths: return {} logger.info( - f"Building custom components from {settings_service.settings.COMPONENTS_PATH}" + f"Building custom components from {components_paths}" ) custom_components_from_file = {} processed_paths = set() - for path in settings_service.settings.COMPONENTS_PATH: + for path in components_paths: path_str = str(path) if path_str in processed_paths: continue diff --git a/src/backend/langflow/interface/listing.py b/src/backend/langflow/interface/listing.py index 79a7335d4..a831f1098 100644 --- a/src/backend/langflow/interface/listing.py +++ b/src/backend/langflow/interface/listing.py @@ -21,7 +21,7 @@ class AllTypesDict(LazyLoadDictBase): from langflow.interface.types import get_all_types_dict settings_service = get_settings_service() - return get_all_types_dict(settings_service=settings_service) + return get_all_types_dict(settings_service.settings.COMPONENTS_PATH) lazy_load_dict = AllTypesDict() diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index e0e7c6c59..32e8c2987 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -1,4 +1,5 @@ from cachetools import LRUCache, cached + from langflow.interface.agents.base import agent_creator from langflow.interface.chains.base import chain_creator from langflow.interface.custom.directory_reader.utils import ( @@ -62,8 +63,12 @@ def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union return all_types -def get_all_types_dict(settings_service): +def get_all_types_dict(components_paths): """Get all types dictionary combining native and custom components.""" native_components = build_langchain_types_dict() - custom_components_from_file = build_custom_components(settings_service) - return merge_nested_dicts_with_renaming(native_components, custom_components_from_file) + custom_components_from_file = build_custom_components( + components_paths=components_paths + ) + return merge_nested_dicts_with_renaming( + native_components, custom_components_from_file + )