Set tweaks to settings passed from the UI

This commit is contained in:
Gabriel Luiz Freitas Almeida 2025-09-04 18:32:29 -03:00
parent 2fbb8d8430
commit 9494e99808

View file

@ -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)