Set tweaks to settings passed from the UI
This commit is contained in:
parent
2fbb8d8430
commit
9494e99808
1 changed files with 49 additions and 9 deletions
|
|
@ -2,21 +2,24 @@ from starlette.requests import Request
|
||||||
from starlette.responses import JSONResponse
|
from starlette.responses import JSONResponse
|
||||||
|
|
||||||
from services.langflow_file_service import LangflowFileService
|
from services.langflow_file_service import LangflowFileService
|
||||||
|
from utils.logging_config import get_logger
|
||||||
|
|
||||||
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def upload_user_file(
|
async def upload_user_file(
|
||||||
request: Request, langflow_file_service: LangflowFileService, session_manager
|
request: Request, langflow_file_service: LangflowFileService, session_manager
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
print("[DEBUG] upload_user_file endpoint called")
|
logger.debug("upload_user_file endpoint called")
|
||||||
form = await request.form()
|
form = await request.form()
|
||||||
upload_file = form.get("file")
|
upload_file = form.get("file")
|
||||||
if upload_file is None:
|
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)
|
return JSONResponse({"error": "Missing file"}, status_code=400)
|
||||||
|
|
||||||
print(
|
logger.debug(
|
||||||
f"[DEBUG] Processing file: {upload_file.filename}, size: {upload_file.size}"
|
"Processing file", filename=upload_file.filename, size=upload_file.size
|
||||||
)
|
)
|
||||||
|
|
||||||
# starlette UploadFile provides file-like; httpx needs (filename, file, content_type)
|
# 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)
|
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(
|
result = await langflow_file_service.upload_user_file(
|
||||||
file_tuple, jwt_token=jwt_token
|
file_tuple, jwt_token=jwt_token
|
||||||
)
|
)
|
||||||
print(f"[DEBUG] Upload successful: {result}")
|
logger.debug("Upload successful", result=result)
|
||||||
return JSONResponse(result, status_code=201)
|
return JSONResponse(result, status_code=201)
|
||||||
except Exception as e:
|
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
|
import traceback
|
||||||
|
|
||||||
print(f"[ERROR] Traceback: {traceback.format_exc()}")
|
print(f"[ERROR] Traceback: {traceback.format_exc()}")
|
||||||
|
|
@ -52,7 +59,8 @@ async def run_ingestion(
|
||||||
file_ids = payload.get("file_ids")
|
file_ids = payload.get("file_ids")
|
||||||
file_paths = payload.get("file_paths") or []
|
file_paths = payload.get("file_paths") or []
|
||||||
session_id = payload.get("session_id")
|
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).
|
# 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:
|
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
|
{"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
|
# Include user JWT if available
|
||||||
jwt_token = getattr(request.state, "jwt_token", None)
|
jwt_token = getattr(request.state, "jwt_token", None)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue