diff --git a/llm-server/models/repository/flow_repo.py b/llm-server/models/repository/flow_repo.py index 34fd79802..a93c4ac29 100644 --- a/llm-server/models/repository/flow_repo.py +++ b/llm-server/models/repository/flow_repo.py @@ -157,3 +157,20 @@ def add_or_update_variable_in_flow( session.add(variable) session.commit() return variable + + +def delete_flow(flow_id: str) -> bool: + """ + Deletes a flow record from the database. + Args: + flow_id: The ID of the flow to delete. + Returns: + True if the flow was deleted, False otherwise. + """ + with Session() as session: + flow = session.query(Flow).filter(Flow.id == flow_id).first() + if flow: + session.delete(flow) + session.commit() + return True + return False diff --git a/llm-server/routes/copilot/copilot_controller.py b/llm-server/routes/copilot/copilot_controller.py index fe0e4c460..096fd6d38 100644 --- a/llm-server/routes/copilot/copilot_controller.py +++ b/llm-server/routes/copilot/copilot_controller.py @@ -90,7 +90,7 @@ def delete_bot(copilot_id): # Find the bot bot = find_or_fail_by_bot_id(copilot_id) - # Delete the bot using the session + # This should be soft delete but for now, we are doing hard delete session.delete(bot) session.commit() return jsonify({"success": "chatbot_deleted"}), 200 diff --git a/llm-server/routes/flow/flow_controller.py b/llm-server/routes/flow/flow_controller.py index 3365568b6..6d477dc67 100644 --- a/llm-server/routes/flow/flow_controller.py +++ b/llm-server/routes/flow/flow_controller.py @@ -11,11 +11,13 @@ get_variables_for_flow, add_or_update_variable_in_flow, update_flow, + delete_flow as delete_flow_from_db, ) from presenters.flow_presenters import flow_to_dict, flow_variable_to_dict from routes.flow import flow_vector_service from routes.flow.utils.dynamic_flow_builder import build_dynamic_flow from utils.get_logger import CustomLogger +from routes.flow.flow_vector_service import delete_flow as delete_flow_from_vector_store logger = CustomLogger("flow") flow = Blueprint("flow", __name__) @@ -249,3 +251,31 @@ def add_variables_to_flow_api(flow_id: str): ), 500, ) + + +@flow.route("/", methods=["DELETE"]) +def delete_flow_api(flow_id: str): + try: + # Attempt to delete the flow from the database + if delete_flow_from_db(flow_id): + # Attempt to delete the flow from the vector store + point_id = flow_vector_service.get_flow_point_id_by_flow_id(flow_id) + if point_id: + delete_flow_from_vector_store(point_id) + return ( + jsonify({"success": True, "message": "Flow deleted successfully."}), + 200, + ) + else: + return ( + jsonify({"success": False, "message": "Flow vector not found."}), + 404, + ) + else: + return ( + jsonify({"success": False, "message": "Flow not found in database."}), + 404, + ) + except Exception as e: + logger.error("Failed to delete flow", payload=e) + return jsonify({"error": "Failed to delete flow."}), 500 diff --git a/llm-server/routes/flow/flow_vector_service.py b/llm-server/routes/flow/flow_vector_service.py index fec229228..c9dbb869d 100644 --- a/llm-server/routes/flow/flow_vector_service.py +++ b/llm-server/routes/flow/flow_vector_service.py @@ -47,11 +47,13 @@ def create_flow(flow: FlowDTO): documents: List[Document] = [] document = Document(page_content=flow.description + " " + flow.name) - document.metadata.update({ - "bot_id": str(flow.bot_id), - "flow_id": str(flow.id), - "operation_id": flow.operation_id - }) + document.metadata.update( + { + "bot_id": str(flow.bot_id), + "flow_id": str(flow.id), + "operation_id": flow.operation_id, + } + ) documents.append(document)