From 9494e998083220b9f575345ef402d8cab9cfe37d Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 4 Sep 2025 18:32:29 -0300 Subject: [PATCH] Set tweaks to settings passed from the UI --- src/api/langflow_files.py | 58 +++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/src/api/langflow_files.py b/src/api/langflow_files.py index be0a0293..f51d2c17 100644 --- a/src/api/langflow_files.py +++ b/src/api/langflow_files.py @@ -2,21 +2,24 @@ from starlette.requests import Request from starlette.responses import JSONResponse from services.langflow_file_service import LangflowFileService +from utils.logging_config import get_logger + +logger = get_logger(__name__) async def upload_user_file( request: Request, langflow_file_service: LangflowFileService, session_manager ): try: - print("[DEBUG] upload_user_file endpoint called") + logger.debug("upload_user_file endpoint called") form = await request.form() upload_file = form.get("file") if upload_file is None: - print("[ERROR] No file provided in upload request") + logger.error("No file provided in upload request") return JSONResponse({"error": "Missing file"}, status_code=400) - print( - f"[DEBUG] Processing file: {upload_file.filename}, size: {upload_file.size}" + logger.debug( + "Processing file", filename=upload_file.filename, size=upload_file.size ) # starlette UploadFile provides file-like; httpx needs (filename, file, content_type) @@ -28,16 +31,20 @@ async def upload_user_file( ) jwt_token = getattr(request.state, "jwt_token", None) - print(f"[DEBUG] JWT token present: {jwt_token is not None}") + logger.debug("JWT token status", jwt_present=jwt_token is not None) - print("[DEBUG] Calling langflow_file_service.upload_user_file...") + logger.debug("Calling langflow_file_service.upload_user_file") result = await langflow_file_service.upload_user_file( file_tuple, jwt_token=jwt_token ) - print(f"[DEBUG] Upload successful: {result}") + logger.debug("Upload successful", result=result) return JSONResponse(result, status_code=201) except Exception as e: - print(f"[ERROR] upload_user_file endpoint failed: {type(e).__name__}: {e}") + logger.error( + "upload_user_file endpoint failed", + error_type=type(e).__name__, + error=str(e), + ) import traceback print(f"[ERROR] Traceback: {traceback.format_exc()}") @@ -52,7 +59,8 @@ async def run_ingestion( file_ids = payload.get("file_ids") file_paths = payload.get("file_paths") or [] session_id = payload.get("session_id") - tweaks = payload.get("tweaks") + tweaks = payload.get("tweaks") or {} + settings = payload.get("settings", {}) # We assume file_paths is provided. If only file_ids are provided, client would need to resolve to paths via Files API (not implemented here). if not file_paths and not file_ids: @@ -60,6 +68,38 @@ async def run_ingestion( {"error": "Provide file_paths or file_ids"}, status_code=400 ) + # Convert UI settings to component tweaks using exact component IDs + if settings: + logger.debug("Applying ingestion settings", settings=settings) + + # Split Text component tweaks (SplitText-QIKhg) + if ( + settings.get("chunkSize") + or settings.get("chunkOverlap") + or settings.get("separator") + ): + if "SplitText-QIKhg" not in tweaks: + tweaks["SplitText-QIKhg"] = {} + if settings.get("chunkSize"): + tweaks["SplitText-QIKhg"]["chunk_size"] = settings["chunkSize"] + if settings.get("chunkOverlap"): + tweaks["SplitText-QIKhg"]["chunk_overlap"] = settings[ + "chunkOverlap" + ] + if settings.get("separator"): + tweaks["SplitText-QIKhg"]["separator"] = settings["separator"] + + # OpenAI Embeddings component tweaks (OpenAIEmbeddings-joRJ6) + if settings.get("embeddingModel"): + if "OpenAIEmbeddings-joRJ6" not in tweaks: + tweaks["OpenAIEmbeddings-joRJ6"] = {} + tweaks["OpenAIEmbeddings-joRJ6"]["model"] = settings["embeddingModel"] + + # Note: OpenSearch component tweaks not needed for ingestion + # (search parameters are for retrieval, not document processing) + + logger.debug("Final tweaks with settings applied", tweaks=tweaks) + # Include user JWT if available jwt_token = getattr(request.state, "jwt_token", None)