
    it                        S SK r S SKrS SKrS SKJrJrJrJr  S SKJ	r	  S SK
JrJrJrJrJrJrJr  S SKrS SKrS SKrS SKJr  S SKJrJrJrJr  S SKJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  S SK)J*r*  S S	K+J,r,  S S
K-J.r.J/r/J0r0  S SK1J2r2  S SK3J4r4  S SK5J6r6J7r7  S SK8J9r9  S SK:J;r;  \" S5      r<\\.\\   4   r=\" \&R|                  \$R~                  S9r@S\AS\B4S jrC " S S5      rD\\E\	\\D4   rFS\\\\<4   S\;S\BS\GS\S\<4S jrHS\SS4S jrI " S S 5      rJ " S! S"\25      rK\LS#:X  a  S S$KMJNrN  \N" 5         \	" \O5      R                  R                  S%-  S&-  rQ\K" 5       rR \RR                  S'S(9rT\TR                  \QS.-  S/-  5      rX\RR                  \TR                  5        \[" \X5        gg! \U a    \RR                  S'S)S*S+0S*S+0S,.S-.5      rT N`f = f)0    N)BufferedIOBaseBufferedReaderBytesIOTextIOWrapper)Path)ListOptionalTypeUnion	CoroutineAnyTypeVar)	BaseModel)retry_if_exceptionstop_after_attemptwait_exponential_jitterAsyncRetrying)ExtractAgentExtractConfig
ExtractJobExtractJobCreate
ExtractRunFileExtractMode
StatusEnumExtractTargetLlamaExtractSettingsPaginatedExtractRunsResponse)AsyncLlamaCloud)ApiError)JSONObjectTypeaugment_async_errorsExperimentalWarning)BaseComponent)run_jobs)FieldPrivateAttr)DEFAULT_BASE_URL)ThreadPoolExecutorT)extraction_targetextraction_mode	exceptionreturnc                     [        U [        5      (       a  U R                  S;   $ [        U [        R                  [        R
                  [        R                  45      (       a  gg)z#Check if an exception is retryable.)i  i  i  i  i  TF)
isinstancer    status_codehttpxHTTPStatusErrorRequestErrorTimeoutException)r-   s    ^/home/james-whalen/.local/lib/python3.13/site-packages/llama_cloud_services/extract/extract.py_is_retryable_errorr7   6   sT    )X&&$$(AAA	E))5+=+=u?U?UV
 
     c            	       ^    \ rS rSrSSSS.S\\\\\\	S4   S\
\   S\
\   4S jjrS
S jrS	rg)
SourceTextA   N)filetext_contentfilenamer<   r=   r>   c                H    Xl         X0l        X l        U R                  5         g N)r<   r>   r=   	_validate)selfr<   r=   r>   s       r6   __init__SourceText.__init__B   s     	 (r8   c                    U R                   SL U R                  SL -  (       d  [        S5      eU R                  b3  U R                  (       d!  [        R
                  " S5      nSU S3U l        g[        U R                   [        [        [        45      (       a  U R                  (       d]  [        U R                   S5      (       aB  [        R                  R                  [        U R                   R                  5      5      U l        g[        U R                   S5      (       d  U R                  c  [        S5      egg[        U R                   [        [         45      (       aJ  U R                  (       d8  [        R                  R                  [        U R                   5      5      U l        gg[        S[#        U R                   5       35      e)	z(Ensure filename is provided when needed.Nz-Either file or text_content must be provided.   text_input_z.txtnamezQfilename must be provided when file is bytes or a file-like object without a nameUnsupported file type: )r<   r=   
ValueErrorr>   secrets	token_hexr0   bytesr   r   hasattrospathbasenamestrrH   r   type)rB   
random_hexs     r6   rA   SourceText._validateN   sD   d"t'8'8D'@ALMM(==$..q1
"-j\ >dii%!GHH==WTYY%?%? " 0 0TYY^^1D ETYY//DMM4I g  5J/ 		C;//== " 0 0TYY @ ! 6tDII6GHIIr8   )r<   r>   r=   r.   N)__name__
__module____qualname____firstlineno__r   rM   r   r   rR   r   r	   rC   rA   __static_attributes__ r8   r6   r:   r:   A   sR     NR&*"&
 E>=#tTIJ
 sm	

 3-
Jr8   r:   corothread_poolverifyhttpx_timeoutclient_wrapperc                    ^ ^^^^ S[         4UU UU4S jjmS[         4U4S jjnUR                  U5      R                  5       $ )z8Run coroutine in a thread with proper client management.r.   c            	      *  >#    [         R                  " TT[         R                  " SSS9S9n TR                  n U Tl        TI S h  vN UTl        U R	                  5       I S h  vN   $  N# N! UTl        U R	                  5       I S h  vN    f = f7f)Nd   )max_keepalive_connectionsmax_connections)r_   timeoutlimits)r2   AsyncClientLimitshttpx_clientaclose)clientoriginal_clientra   r]   r`   r_   s     r6   wrapped_coro#run_in_thread.<locals>.wrapped_coror   s     ""!<<#sS

 )55	"*0N':*9N'--/!!  " +:N'--/!!sL   6BA. A*A. 
B$A,%B*A. ,B.B	B
BBc                    >  [         R                  " T" 5       5      $ ! [        R                   a  n [	        S[        U 5       35      U eS n A f[        R                   a  n [        S[        U 5       35      U eS n A ff = f)NzRequest timed out: zNetwork error: )asynciorunr2   r5   TimeoutErrorrR   NetworkErrorConnectionError)ero   s    r6   run_cororun_in_thread.<locals>.run_coro   ss    	E;;|~..%% 	F!4SVH=>AE!! 	E!OCF8"<=1D	Es     A>A

A>!A99A>)r*   submitresult)r]   r^   r_   r`   ra   rx   ro   s   ` ``` @r6   run_in_threadr|   i   s>    " " "Ea E h'..00r8   configc                     U R                   (       d  U R                  (       a  [        R                  " S[        5        g g )Nz`cite_sources`/`confidence_scores` could greatly increase the size of the response, and slow down the extraction. Results will be available in the `extraction_metadata` field for the extraction run.)cite_sourcesconfidence_scoreswarningswarnr#   )r}   s    r6   _extraction_config_warningr      s/    f66S  		
 7r8   c                      \ rS rSrSr         S3S\S\S\\   S\\   S\	S	\	S
\	S\
S\
S\\
   S\\   4S jjr\S\4S j5       r\S\4S j5       r\S\4S j5       r\R$                  S\SS4S j5       r\S\4S j5       r\R$                  S\SS4S j5       rS\\\\4   S\4S jrS\S\4S jrS\S\4S jrS\S\4S jr S\S\!4S  jr"S\S\\!   4S! jr#S4S" jr$S#\%\\&\   4   S$\'S\%\\&\   4   4S% jr(S#\%\\&\   4   S\%\\&\   4   4S& jr)S#\%\\&\   4   S\%\!\&\!   4   4S' jr*S#\%\\&\   4   S\%\!\&\!   4   4S( jr+S\S\4S) jr,S\S\!4S* jr-S+\SS4S, jr. S5S-\	S.\	S\/4S/ jjr0S\4S0 jr1S4S1 jr2S2r3g)6ExtractionAgent   zTClass representing a single extraction agent with methods for extraction operations.Nrm   agent
project_idorganization_idcheck_intervalmax_timeoutnum_workersshow_progressverboser_   r`   c                    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        S U l        S U l        [        [        S[        R                   " 5       =(       d    SS-   5      S9U l        g )N
      rF   max_workers)_client_agent_project_id_organization_idr   r   r   r   r_   r`   _verbose_data_schema_configr)   minrO   	cpu_count_thread_pool)rB   rm   r   r   r   r   r   r   r   r   r_   r`   s               r6   rC   ExtractionAgent.__init__   sx     % /,&&**9=37.B!41 9:
r8   r.   c                 .    U R                   R                  $ r@   )r   idrB   s    r6   r   ExtractionAgent.id   s    {{~~r8   c                 .    U R                   R                  $ r@   )r   rH   r   s    r6   rH   ExtractionAgent.name   s    {{r8   c                 h    U R                   (       d  U R                  R                  $ U R                   $ r@   )r   r   data_schemar   s    r6   r   ExtractionAgent.data_schema   s%    .2.?.?t{{&&VTEVEVVr8   r   c                 F   [        U[        5      (       a  UnOF[        U[        5      (       a&  [        U[        5      (       a  UR                  5       nO[        S5      eU R                  U R                  R                  R                  US95      nUR                  U l        g )N;data_schema must be either a dictionary or a Pydantic model)r   )r0   dictrS   
issubclassr   model_json_schemarJ   _run_in_threadr   llama_extractvalidate_extraction_schemar   r   )rB   r   processed_schemavalidated_schemas       r6   r   r      s     k4((*T**z+y/Q/Q*<<>M   ..LL&&AA, B 

 -88r8   c                 h    U R                   (       d  U R                  R                  $ U R                   $ r@   )r   r   r}   r   s    r6   r}   ExtractionAgent.config   s!    )-t{{!!G4<<Gr8   r}   c                 &    [        U5        Xl        g r@   )r   r   )rB   r}   s     r6   r}   r      s    "6*r8   r]   c                     [        UU R                  U R                  U R                  U R                  R
                  5      $ z=Run coroutine in a separate thread to avoid event loop issues)r|   r   r_   r`   r   _client_wrapperrB   r]   s     r6   r   ExtractionAgent._run_in_thread   s8    KKLL((
 	
r8   
file_inputc                   #    Sn UR                   b&  [        UR                   R                  S5      5      nGO[        UR                  [
        5      (       a3  [        UR                  R                  5       R                  S5      5      nO[        UR                  [        [        45      (       a  [        UR                  S5      nO[        UR                  [        5      (       a  [        UR                  5      nOM[        UR                  [        5      (       a  UR                  nO![        S[        UR                  5       35      e[        US5      (       d  UR                  Ul        U R"                  R$                  R'                  U R(                  US9I Sh  vN Ub'  [        U[*        5      (       a  UR-                  5         $ $ $  N.! Ub'  [        U[*        5      (       a  UR-                  5         f f f = f7f)zUpload a file for extraction.

Args:
    file_input: The file to upload (path, bytes, or file-like object)

Raises:
    ValueError: If filename is not provided for bytes input or for file-like objects
               without a name attribute.
Nzutf-8rbrI   rH   )r   upload_file)r=   r   encoder0   r<   r   readrR   r   openrM   r   rJ   rS   rN   r>   rH   r   filesr   r   r   close)rB   r   file_contentss      r6   r   ExtractionAgent.upload_file   s     CG	&&&2 '
(?(?(F(Fw(O PJOO];; '
(<(<(>(E(Eg(N OJOOc4[99 $Z__d ;JOOU33 '
 8JOO^<< * #:4
;P:Q!RSS =&11%/%8%8"++77++ 8   (Z~-V-V##% .W(	 (Z~-V-V##% .W(s/   G<FG GG  +G<G ,G99G<c                   #    S n[        U[        5      (       a  UnO[        U[        [        45      (       a  [        U5      n[        X3R                  S9nOwS n[        US5      (       a2  [        R                  R                  [        UR                  5      5      nUc  [        S5      e[        R                  " S[        5        [        XS9nU R                  U5      I S h  vN $  N7f)N)r<   r>   rH   zMUse SourceText to provide filename when uploading bytes or file-like objects.z4Use SourceText instead of bytes or file-like objects)r0   r:   rR   r   rH   rN   rO   rP   rQ   rJ   r   r   DeprecationWarningr   )rB   r   source_textrP   r>   s        r6   _upload_fileExtractionAgent._upload_file  s     j*--$K
S$K00
#D$$CK Hz6**77++C
,@A c  MMF" %*HK%%k2222s   C C)"C'#C)job_idc           
        #    [        [        [        5      [        S5      [	        SSSS9SS9  Sh  vN nU   U R
                  R                  R                  US9I Sh  vN sSSS5        s  $  N= N! , (       d  f       MU  = f
 g7f)	z.Get job with retry logic for transient errors.   r   <   initialmaxjitterTretrystopwaitreraiseNr   )r   r   r7   r   r   r   r   get_jobrB   r   attempts      r6   _get_job_with_retry#ExtractionAgent._get_job_with_retry+  sx     *$%89#A&(1E	
 	O' !\\77??v?NN 	O O 
H   ,BBA0BB'A4 A2!A4$B0B2A44
B	>
Bc           
        #    [        [        [        5      [        S5      [	        SSSS9SS9  Sh  vN nU   U R
                  R                  R                  US9I Sh  vN sSSS5        s  $  N= N! , (       d  f       MU  = f
 g7f)	z9Get extraction run with retry logic for transient errors.   r      r   Tr   Nr   )r   r   r7   r   r   r   r   get_run_by_job_idr   s      r6   _get_run_with_retry#ExtractionAgent._get_run_with_retry6  sy     *$%89#A&(1E	
 	Y' !\\77IIQWIXX 	Y Y 
r   c                 B  #    [         R                  " 5       nSn [        R                  " U R                  5      I Sh  vN   US-  n U R                  U5      I Sh  vN nUR                  [        R                  :X  a  U R                  U5      I Sh  vN $ UR                  [        R                  :X  a\  [         R                  " 5       nXR-
  U R                  :  a  [        SU 35      eU R                  (       a  US-  S:X  a  [        SSSS	9  M  [        R                   " S
U SUR                   SUR"                   35        U R                  U5      I Sh  vN $  GN! GN N N! [         a)  nU R                  (       a  [        SU SU 35        UeSnAff = f7f)z5Wait for and return the results of an extraction job.r   TNr   z#Timeout while extracting the file: r   . )endflushzFailure in job: z
, status: z	, error: z
Error in job polling for z: )timeperf_counterrr   sleepr   r   statusr   SUCCESSr   PENDINGr   	Exceptionr   printr   r   error)rB   r   starttriesjobr   rw   s          r6   _wait_for_job_result$ExtractionAgent._wait_for_job_resultA  sh    !!#-- 3 3444QJE 44V<<::!3!33!%!9!9&!AAAZZ:#5#55++-C{T%5%55'*MfX(VWW}}qcr6MM*6(*SZZL	RUR[R[Q\] "&!9!9&!AAA' 5 = B B ==7xr!EF	s   <FE	F	E) E"6E) E%E) FA8E) FAE) E'E) F"E) %E) 'E) )
F3$FFFc                     U R                  U R                  R                  R                  U R                  U R
                  U R                  S95      U l        g)z~Persist the extraction agent's schema and config to the database.

Returns:
    ExtractionAgent: The updated extraction agent
)extraction_agent_idr   r}   N)r   r   r   update_extraction_agentr   r   r}   r   r   s    r6   saveExtractionAgent.saveb  sJ     ))LL&&>>$(GG ,,{{ ? 
r8   r   extract_settingsc                   ^ ^#    [        U[        5      (       d  U/nSnOSnU Vs/ s H  nT R                  U5      PM     nn[        5          [	        UT R
                  ST R                  S9I S h  vN nS S S 5        S[        S[        4UU 4S jjnW Vs/ s H
  oG" U5      PM     nn[        5          [	        UT R
                  ST R                  S9I S h  vN n	S S S 5        T R                  (       aX  [        UW	5       HH  u  pJ[        U[        [        45      (       a  [        U5      OS	n[        S
U SU
R                   35        MJ     U(       a  W	S   $ W	$ s  snf  N! , (       d  f       N= fs  snf  N! , (       d  f       N= f7f)NTFUploading filesworkersdescr   r<   r.   c           	        >#    TR                   R                  R                  [        TR                  U R                  TR
                  TR                  S9TS9I S h  vN nTR                  UR                  5      I S h  vN $  N' N7f)Nr   file_iddata_schema_overrideconfig_override)
job_creater   )r   r   run_job_test_userr   r   r   r}   r   )r<   
job_queuedr   rB   s     r6   run_job5ExtractionAgent._run_extraction_test.<locals>.run_job  s{     #||99KK+(, GG)-)9)9$(KK	 "2  L   J 22:==AAA Bs$   AB	B"B	 BB	B	zRunning extraction jobs<bytes/buffer>zRunning extraction for file  under job_id r   )r0   listr   r"   r%   r   r   r   r   r   ziprR   r   r   r   )rB   r   r   single_filer<   upload_tasksuploaded_filesr
  	job_tasksextract_resultsr   	file_reprs   ` `         r6   _run_extraction_test$ExtractionAgent._run_extraction_testp  sp    
 %&&GEKK<ABED))$/EB!##+((&"00	$ N $
	B 
	B 
	B 
	B 0>>~tWT]~	>!#$,((."00	% O $ == 8	!+D3+!>!>CIDT  4YK~cffXVW	 9 &1q!EoEK C $#( ? $#sq   "FEF$E#1E!2E#6!FE4(F4$E;E9E;BF!E##
E1-F9E;;
F	Fc                   #     [        U[        5      (       d  U/nSnOSnU Vs/ s H  o0R                  U5      PM     nn[        5          [	        UU R
                  SU R                  S9I Sh  vN nSSS5        W Vs/ s HX  nU R                  R                  R                  [        U R                  UR                  U R                  U R                  S9S9PMZ     nn[        5          [	        UU R
                  SU R                  S9I Sh  vN nSSS5        U R                  (       aX  [        UW5       HH  u  p8[        U[         ["        45      (       a  [!        U5      OS	n	[%        S
U	 SUR                   35        MJ     U(       a  WS   $ W$ s  snf  GN)! , (       d  f       GN.= fs  snf  N! , (       d  f       N= f7f)z
Queue multiple files for extraction.

Args:
    files (Union[FileInput, List[FileInput]]): The files to extract

Returns:
    Union[ExtractJob, List[ExtractJob]]: The queued extraction jobs
TFr   r   Nr  )requestzCreating extraction jobsr  z Queued file extraction for file r  r   )r0   r  r   r"   r%   r   r   r   r   r
  r   r   r   r}   r   r  rR   r   r   )
rB   r   r  r<   r  r  r  extract_jobsr   r  s
             r6   queue_extraction ExtractionAgent.queue_extraction  s     	C%&&GEKK<ABED))$/EB!##+((&"00	$ N $" '

 ' LL&&..((, GG)-)9)9$(KK	 /  ' 	 

 "#!)((/"00	" L $ == 5	!+D3+!>!>CIDT  6ykPSPVPVxX	 6 #.|A?<?K C $#

 $#sq   #GFG$F/F0F4G AF-G+$F4F2F4BGF
F*%G2F44
G>Gc                   #    [        U[        5      (       d  U/nSnOSnU R                  U5      I Sh  vN nU Vs/ s H  o@R                  UR                  5      PM     nn[        5          [        UU R                  SU R                  S9I Sh  vN nSSS5        U(       a  WS   $ W$  Nws  snf  N!! , (       d  f       N%= f7f)zAsynchronously extract data from one or more files using this agent.

Args:
    files (Union[FileInput, List[FileInput]]): The files to extract

Returns:
    Union[ExtractRun, List[ExtractRun]]: The extraction results
TFNzExtracting filesr   r   )	r0   r  r  r   r   r"   r%   r   r   )rB   r   r  jobsr   result_tasksresultss          r6   aextractExtractionAgent.aextract  s      %&&GEKK **511EIJTc11#&&9TJ!#$(('"00	 G $ )wqz5g5 2J $#sJ   2CB,C$B.!C-$B5B3B5C.C3B55
C?Cc                 B    U R                  U R                  U5      5      $ )zSynchronously extract data from one or more files using this agent.

Args:
    files (Union[FileInput, List[FileInput]]): The files to extract

Returns:
    Union[ExtractRun, List[ExtractRun]]: The extraction results
)r   r!  )rB   r   s     r6   extractExtractionAgent.extract  s     ""4==#788r8   c                 f    U R                  U R                  R                  R                  US95      $ )z
Get the extraction job for a given job_id.

Args:
    job_id (str): The job_id to get the extraction job for

Returns:
    ExtractJob: The extraction job
r   )r   r   r   r   rB   r   s     r6   get_extraction_job"ExtractionAgent.get_extraction_job	  s-     ""4<<#=#=#E#EV#E#TUUr8   c                 f    U R                  U R                  R                  R                  US95      $ )z
Get the extraction run for a given job_id.

Args:
    job_id (str): The job_id to get the extraction run for

Returns:
    ExtractRun: The extraction run
r   )r   r   r   r   r'  s     r6   get_extraction_run_for_job*ExtractionAgent.get_extraction_run_for_job  s7     ""LL&&88 9 
 	
r8   run_idc                 h    U R                  U R                  R                  R                  US95        g)z`Delete an extraction run by ID.

Args:
    run_id (str): The ID of the extraction run to delete
)r-  N)r   r   r   delete_extraction_run)rB   r-  s     r6   r/  %ExtractionAgent.delete_extraction_run%  s-     	LL&&<<F<K	
r8   pagelimitc                     U R                  U R                  R                  R                  U R                  X-  US95      $ )z}List extraction runs for the extraction agent.

Returns:
    PaginatedExtractRunsResponse: Paginated list of extraction runs
)r   skipr2  )r   r   r   list_extract_runsr   )rB   r1  r2  s      r6   list_extraction_runs$ExtractionAgent.list_extraction_runs/  sC     ""LL&&88$(GG\ 9 
 	
r8   c                 <    SU R                    SU R                   S3$ )NzExtractionAgent(id=z, name=))r   rH   r   s    r6   __repr__ExtractionAgent.__repr__?  s    $TWWIWTYYKqAAr8   c                 |     [        U S5      (       a  U R                  R                  SS9  gg! [         a     gf = fzCleanup resources properly.r   T)r   NrN   r   shutdownr   r   s    r6   __del__ExtractionAgent.__del__B  B    	t^,,!!***5 - 		   *. 
;;)r   r   r   r   r   r   r   r   r   r`   r   r   r   r_   )	NNr     rF   TFTr   rV   )r   rd   )4rW   rX   rY   rZ   __doc__r   CloudExtractAgentr	   rR   intboolfloatrC   propertyr   rH   r   r   setterSchemaInputr   r}   r   r   r*   r   r:   r   r   	FileInputr   r   r   r   r   r   r   r   r   r   r  r  r!  r$  r(  r+  r/  r   r6  r:  r@  r[   r\   r8   r6   r   r      sB   ^ %))-"!%)+

 !
 SM	

 "#
 
 
 
 
 
 
  
> C    c     WT W W 9{ 9t 9 9$ H H H ]]] t  
9S#q[#9 
a 
'&J '&4 '&R3Y 34 32	O 	O
 	O	Y 	Y
 	Y *9M B
0FYY/00F /0F 
z4
++	,	0Fd9@YY/09@ 
z4
++	,9@v69d9o566	z4
++	,6>99d9o569	z4
++	,9
V 
V 
V
 
 
 
C 
D 
 +.

$'
	%
 B# Br8   r   c                     ^  \ rS rSr% Sr\" SS9r\\S'   \" SS9r	\\S'   \" SS	S
9r
\\S'   \" SSS
9r\\S'   \" SSSSS9r\\S'   \" SSS
9r\\S'   \" SSS
9r\\S'   \" SSS
9r\\   \S'   \" SSS
9r\\   \S'   \" 5       r\\S '   \" 5       r\\S!'   \" 5       r\\   \S"'   \" 5       r\\   \S#'              S6S\\   S\\   S\S\S\S\S%\\   S&\\   S\\   S\\   S\4U 4S' jjjrS(\\\\4   S)\4S* jr  S7S+\S,\!S-\\"   S)\#4S. jjr$  S8S+\\   S/\\   S)\#4S0 jjr%S)\&\#   4S1 jr'S2\S)S$4S3 jr(S9S4 jr)S5r*U =r+$ ):LlamaExtractiK  z:Factory class for creating and managing extraction agents.z%The API key for the LlamaExtract API.)descriptionapi_keyz%The base URL of the LlamaExtract API.base_urlr   z;The interval in seconds to check if the extraction is done.)defaultrP  r   rD  zDThe maximum timeout in seconds to wait for the extraction to finish.r   rF   r   r   zAThe number of workers to use sending API requests for extraction.)rS  gtltrP  r   Tz-Show progress when extracting multiple files.r   Fz*Show verbose output when extracting files.r   zSimple SSL verification option.r_   r   zTimeout for the httpx client.r`   _async_clientr   r   r   Nr   r   c                 F  > U(       d%  [         R                  " SS 5      nUc  [        S5      eU(       d$  [         R                  " SS 5      =(       d    [        n[        TU ]  UUUUUUU	U
US9	  [        R                  " XS9U l        Xl	        Xl
        [        U R                  U R                  U R                  S9U l        [        [!        S[         R"                  " 5       =(       d    SS	-   5      S
9U l        U(       d  [         R                  " SS 5      nXpl        Xl        g )NLLAMA_CLOUD_API_KEYzThe API key is required.LLAMA_CLOUD_BASE_URL)	rQ  rR  r   r   r   r   r_   r`   r   )r_   rg   )tokenrR  rk   r   r   rF   r   LLAMA_CLOUD_PROJECT_ID)rO   getenvrJ   r(   superrC   r2   ri   _httpx_clientr_   r`   r   rQ  rR  rV  r)   r   r   r   r   r   )rB   rQ  rR  r   r   r   r   r   r   r_   r`   r   	__class__s               r6   rC   LlamaExtract.__init__o  s     ii 5t<G !;<<yy!7>RBRH)##'' 	 
	
 #..fT*,,,]]++

 /B!41 9:
 #;TBJ% /r8   r]   r.   c                     [        UU R                  U R                  U R                  U R                  R
                  5      $ r   )r|   r   r_   r`   rV  r   r   s     r6   r   LlamaExtract._run_in_thread  s:    KK..
 	
r8   rH   r   r}   c                 @   Ub  [        U5        O[        n[        U[        5      (       a  UnO1[	        U[
        5      (       a  UR                  5       nO[        S5      eU R                  U R                  R                  R                  U R                  U R                  UUUS95      n[        U R                  UU R                  U R                  U R                  U R                   U R"                  U R$                  U R&                  U R(                  U R*                  S9$ )a%  Create a new extraction agent.

Args:
    name (str): The name of the extraction agent
    data_schema (SchemaInput): The data schema for the extraction agent
    config (Optional[ExtractConfig]): The extraction config for the agent

Returns:
    ExtractionAgent: The created extraction agent
r   )r   r   rH   r   r}   rm   r   r   r   r   r   r   r   r   r_   r`   )r   DEFAULT_EXTRACT_CONFIGr0   r   r   r   r   rJ   r   rV  r   create_extraction_agentr   r   r   r   r   r   r   r   r_   r`   )rB   rH   r   r}   r   s        r6   create_agentLlamaExtract.create_agent  s	     &v.+Fk4((%KY//%779KM  ##,,DD++ $ 5 5' E 
 %%'' 11..((((,,LL;;,,
 	
r8   r   c                 <   Ub  Ub  [         R                  " S5        U(       a3  U R                  U R                  R                  R                  US95      nOPU(       a>  U R                  U R                  R                  R                  UU R                  S95      nO[        S5      e[        U R                  UU R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                   U R"                  S9$ )zGet extraction agents by name or extraction agent ID.

Args:
    name (Optional[str]): Filter by name
    extraction_agent_id (Optional[str]): Filter by extraction agent ID

Returns:
    ExtractionAgent: The extraction agent
zJBoth name and extraction_agent_id are provided. Using extraction_agent_id.r   )rH   r   z4Either name or extraction_agent_id must be provided.rd  )r   r   r   rV  r   get_extraction_agentget_extraction_agent_by_namer   rJ   r   r   r   r   r   r   r   r_   r`   )rB   rH   r   r   s       r6   	get_agentLlamaExtract.get_agent  s
    >d.MM\ ''""00EE(* F E ''""00MM#// N E STT%%'' 11..((((,,LL;;,,
 	
r8   c                 h   U R                  U R                  R                  R                  U R                  S95      nU Vs/ s Hd  n[        U R                  UU R                  U R                  U R                  U R                  U R                  U R                  U R                  S9	PMf     sn$ s  snf )z%List all available extraction agents.)r   )	rm   r   r   r   r   r   r   r   r   )r   rV  r   list_extraction_agentsr   r   r   r   r   r   r   r   )rB   agentsr   s      r6   list_agentsLlamaExtract.list_agents  s    $$,,CC++ D 
$  
   ))++ $ 5 5#22 ,, ,,"00
  
 	
 
s   A+B/agent_idc                 h    U R                  U R                  R                  R                  US95        g)zbDelete an extraction agent by ID.

Args:
    agent_id (str): ID of the extraction agent to delete
rj  N)r   rV  r   delete_extraction_agent)rB   rt  s     r6   delete_agentLlamaExtract.delete_agent*  s5     	,,DD$, E 	
r8   c                 |     [        U S5      (       a  U R                  R                  SS9  gg! [         a     gf = fr=  r>  r   s    r6   r@  LlamaExtract.__del__6  rB  rC  )rV  r^  r   r   r   r`   r_   )NNr   rD  rF   TNNTr   Fr@   )NNrV   ),rW   rX   rY   rZ   rE  r&   rQ  rR   __annotations__rR  r   rG  r   r   r   rH  r   r_   r	   r`   rI  r'   rV  r   r   r)   r   r   rC   r   r   r*   r   rL  r   r   rg  rm  r   rr  rw  r@  r[   __classcell__)r_  s   @r6   rO  rO  K  s   D%LMGSM&MNHcNQNC  ZK  W	K   "QM4  #OGT  #"CFHTN  &+ ?&M8E?  &1]M?2'2}L$4!,K#.&1mhsm3 "&"&"$()-!%)+00#00 3-00 	00
 00 00 00 SM00 "#00 00  00 00 00d
9S#q[#9 
a 
 +/	4
4
 !4
 '	4

 
4
p # 0
sm0
 SM0
 
	0
d
T/2 
.

S 

T 

 r8   rO  __main__)load_dotenvtestsdataz
test-agent)rH   objectrS   string)titlesummary)rS   
propertiesslidezconocophilips.pdf)\rr   rO   r   ior   r   r   r   pathlibr   typingr   r	   r
   r   r   r   r   rK   r   r2   pydanticr   tenacityr   r   r   r   llama_cloudr   rF  r   r   r   r   r   r   r   r   r   r   llama_cloud.clientr   llama_cloud.core.api_errorr    "llama_cloud_services.extract.utilsr!   r"   r#   llama_index.core.schemar$   llama_index.core.async_utilsr%    llama_index.core.bridge.pydanticr&   r'   llama_index.core.constantsr(   concurrent.futuresr)   r*   rL  PER_DOCBALANCEDre  BaseExceptionrH  r7   r:   rR   rM  rI  r|   r   r   rO  rW   dotenvr~  __file__parentdata_dir	extractorrm  r   r   rg  r$  r   rw  r   r   r\   r8   r6   <module>r     s    	  E E  G G G         / / 
 2 1 ? 7 1CL NDO34&#++(( = T "J "JJ #t^Z78	1
CaK
 1#1 1 	1
 1 1D
} 
 
s slq= qh z"MH~$$++g5>HI
###6 mmHw.1DDEG588$	'N-   

&& $h/ &1	


s   F% %"G
	G
