2424from uipath .platform .common import (
2525 CreateBatchTransform ,
2626 CreateDeepRag ,
27+ CreateDocumentExtraction ,
2728 CreateEscalation ,
2829 CreateTask ,
2930 InvokeProcess ,
3031 WaitBatchTransform ,
3132 WaitDeepRag ,
33+ WaitDocumentExtraction ,
3234 WaitEscalation ,
3335 WaitJob ,
3436 WaitTask ,
3537)
3638from uipath .platform .context_grounding import DeepRagStatus
37- from uipath .platform .errors import BatchTransformNotCompleteException
39+ from uipath .platform .errors import (
40+ BatchTransformNotCompleteException ,
41+ ExtractionNotCompleteException ,
42+ )
3843from uipath .platform .orchestrator .job import JobState
3944from uipath .platform .resume_triggers ._enums import PropertyName , TriggerMarker
4045
@@ -244,6 +249,28 @@ async def read_trigger(self, trigger: UiPathResumeTrigger) -> Any | None:
244249
245250 return f"Batch transform completed. Modified file available at { os .path .abspath (destination_path )} "
246251
252+ case UiPathResumeTriggerType .IXP_EXTRACTION :
253+ if trigger .item_key :
254+ project_id = self ._extract_field ("project_id" , trigger .payload )
255+ tag = self ._extract_field ("tag" , trigger .payload )
256+
257+ assert project_id is not None
258+ assert tag is not None
259+
260+ try :
261+ extraction_response = (
262+ await uipath .documents .retrieve_ixp_extraction_result_async (
263+ project_id , tag , trigger .item_key
264+ )
265+ )
266+ except ExtractionNotCompleteException as e :
267+ raise UiPathPendingTriggerError (
268+ ErrorCategory .SYSTEM ,
269+ f"{ e .message } " ,
270+ ) from e
271+
272+ return extraction_response .model_dump ()
273+
247274 case UiPathResumeTriggerType .API :
248275 if trigger .api_resume and trigger .api_resume .inbox_id :
249276 try :
@@ -331,7 +358,10 @@ async def create_trigger(self, suspend_value: Any) -> UiPathResumeTrigger:
331358 await self ._handle_batch_rag_job_trigger (
332359 suspend_value , resume_trigger , uipath
333360 )
334-
361+ case UiPathResumeTriggerType .IXP_EXTRACTION :
362+ await self ._handle_ixp_extraction_trigger (
363+ suspend_value , resume_trigger , uipath
364+ )
335365 case _:
336366 raise UiPathFaultedTriggerError (
337367 ErrorCategory .SYSTEM ,
@@ -363,6 +393,8 @@ def _determine_trigger_type(self, value: Any) -> UiPathResumeTriggerType:
363393 return UiPathResumeTriggerType .DEEP_RAG
364394 if isinstance (value , (CreateBatchTransform , WaitBatchTransform )):
365395 return UiPathResumeTriggerType .BATCH_RAG
396+ if isinstance (value , (CreateDocumentExtraction , WaitDocumentExtraction )):
397+ return UiPathResumeTriggerType .IXP_EXTRACTION
366398 # default to API trigger
367399 return UiPathResumeTriggerType .API
368400
@@ -385,6 +417,8 @@ def _determine_trigger_name(self, value: Any) -> UiPathResumeTriggerName:
385417 return UiPathResumeTriggerName .DEEP_RAG
386418 if isinstance (value , (CreateBatchTransform , WaitBatchTransform )):
387419 return UiPathResumeTriggerName .BATCH_RAG
420+ if isinstance (value , (CreateDocumentExtraction , WaitDocumentExtraction )):
421+ return UiPathResumeTriggerName .EXTRACTION
388422 # default to API trigger
389423 return UiPathResumeTriggerName .API
390424
@@ -420,10 +454,10 @@ async def _handle_task_trigger(
420454 async def _handle_deep_rag_job_trigger (
421455 self , value : Any , resume_trigger : UiPathResumeTrigger , uipath : UiPath
422456 ) -> None :
423- """Handle job-type resume triggers.
457+ """Handle Deep RAG resume triggers.
424458
425459 Args:
426- value: The suspend value (InvokeProcess or WaitJob )
460+ value: The suspend value (CreateDeepRag or WaitDeepRag )
427461 resume_trigger: The resume trigger to populate
428462 uipath: The UiPath client instance
429463 """
@@ -448,10 +482,10 @@ async def _handle_deep_rag_job_trigger(
448482 async def _handle_batch_rag_job_trigger (
449483 self , value : Any , resume_trigger : UiPathResumeTrigger , uipath : UiPath
450484 ) -> None :
451- """Handle job-type resume triggers.
485+ """Handle batch transform resume triggers.
452486
453487 Args:
454- value: The suspend value (InvokeProcess or WaitJob )
488+ value: The suspend value (CreateBatchTransform or WaitBatchTransform )
455489 resume_trigger: The resume trigger to populate
456490 uipath: The UiPath client instance
457491 """
@@ -474,6 +508,38 @@ async def _handle_batch_rag_job_trigger(
474508 raise Exception ("Failed to start batch transform" )
475509 resume_trigger .item_key = batch_transform .id
476510
511+ async def _handle_ixp_extraction_trigger (
512+ self , value : Any , resume_trigger : UiPathResumeTrigger , uipath : UiPath
513+ ) -> None :
514+ """Handle IXP Extraction resume triggers.
515+
516+ Args:
517+ value: The suspend value (CreateDocumentExtraction or WaitDocumentExtraction)
518+ resume_trigger: The resume trigger to populate
519+ uipath: The UiPath client instance
520+ """
521+ resume_trigger .folder_path = resume_trigger .folder_key = None
522+
523+ if isinstance (value , WaitDocumentExtraction ):
524+ resume_trigger .item_key = value .extraction .operation_id
525+ elif isinstance (value , CreateDocumentExtraction ):
526+ document_extraction = await uipath .documents .start_ixp_extraction_async (
527+ project_name = value .project_name ,
528+ tag = value .tag ,
529+ file = value .file ,
530+ file_path = value .file_path ,
531+ )
532+ if not document_extraction :
533+ raise Exception ("Failed to start document extraction" )
534+ resume_trigger .item_key = document_extraction .operation_id
535+
536+ # add project_id and tag to the payload dict (needed when reading the trigger)
537+ assert isinstance (resume_trigger .payload , dict )
538+ resume_trigger .payload .setdefault (
539+ "project_id" , document_extraction .project_id
540+ )
541+ resume_trigger .payload .setdefault ("tag" , document_extraction .tag )
542+
477543 async def _handle_job_trigger (
478544 self , value : Any , resume_trigger : UiPathResumeTrigger , uipath : UiPath
479545 ) -> None :
0 commit comments