From 6a34ebc60d57e067fbaea45e892b72b860b99d3e Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Thu, 1 May 2025 20:39:31 -0500 Subject: [PATCH 1/3] allow external_id to be set via metadata --- core/api.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/api.py b/core/api.py index 1f6dacce..7e153312 100644 --- a/core/api.py +++ b/core/api.py @@ -418,8 +418,11 @@ def str2bool(v): logger.debug(f"API: Queueing file ingestion with use_colpali: {use_colpali}") + external_id = metadata_dict.pop("external_id", None) + # Create a document with processing status doc = Document( + external_id=external_id if external_id else None, # Only pass if not None content_type=file.content_type, filename=file.filename, metadata=metadata_dict, From 1191e98ebaf9817fff177c9e4e85b44bb9c43f18 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Thu, 1 May 2025 20:50:43 -0500 Subject: [PATCH 2/3] first class property --- core/api.py | 3 +-- core/models/request.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/api.py b/core/api.py index 7e153312..75b9f079 100644 --- a/core/api.py +++ b/core/api.py @@ -378,6 +378,7 @@ async def ingest_file( metadata: str = Form("{}"), rules: str = Form("[]"), auth: AuthContext = Depends(verify_token), + external_id: Optional[str] = Form(None), use_colpali: Optional[bool] = None, folder_name: Optional[str] = Form(None), end_user_id: Optional[str] = Form(None), @@ -418,8 +419,6 @@ def str2bool(v): logger.debug(f"API: Queueing file ingestion with use_colpali: {use_colpali}") - external_id = metadata_dict.pop("external_id", None) - # Create a document with processing status doc = Document( external_id=external_id if external_id else None, # Only pass if not None diff --git a/core/models/request.py b/core/models/request.py index f67d5348..7446a401 100644 --- a/core/models/request.py +++ b/core/models/request.py @@ -49,6 +49,7 @@ class IngestTextRequest(BaseModel): use_colpali: Optional[bool] = None folder_name: Optional[str] = Field(None, description="Optional folder scope for the operation") end_user_id: Optional[str] = Field(None, description="Optional end-user scope for the operation") + external_id: Optional[str] = None class CreateGraphRequest(BaseModel): From b9f5852e84248b35c1d68cbaa519e8ac21bc42c9 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Thu, 1 May 2025 21:06:28 -0500 Subject: [PATCH 3/3] Add support for ingest_text --- core/api.py | 2 +- core/services/document_service.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/api.py b/core/api.py index 75b9f079..e4401f34 100644 --- a/core/api.py +++ b/core/api.py @@ -421,8 +421,8 @@ def str2bool(v): # Create a document with processing status doc = Document( - external_id=external_id if external_id else None, # Only pass if not None content_type=file.content_type, + external_id=external_id if external_id else None, filename=file.filename, metadata=metadata_dict, owner={"type": auth.entity_type.value, "id": auth.entity_id}, diff --git a/core/services/document_service.py b/core/services/document_service.py index f652b657..fb5d338e 100644 --- a/core/services/document_service.py +++ b/core/services/document_service.py @@ -555,6 +555,7 @@ async def query( async def ingest_text( self, content: str, + external_id=external_id if external_id else None, filename: Optional[str] = None, metadata: Optional[Dict[str, Any]] = None, auth: AuthContext = None, @@ -574,8 +575,10 @@ async def ingest_text( settings = get_settings() doc = Document( + external_id=external_id, content_type="text/plain", filename=filename, + content=content, metadata=metadata or {}, owner={"type": auth.entity_type, "id": auth.entity_id}, access_control={