
    Ji\2                         d dl Z d dlZd dlZd dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZmZ d dlm Z   G d de      Z! G d d      Z"e"Z#y)    N)OptionalListUnion)	BaseModelAsyncLlamaCloud)ClassifyJobClassifierRuleClassifyJobResultsClassifyParsingConfiguration
StatusEnumFile)OMIT)
FileClient)POLLING_TIMEOUT_SECONDS)is_terminal_statusaugment_async_errors	FileInput)DEFAULT_NUM_WORKERSrun_jobs)ClassifyJobResultsWithFilesc                   "    e Zd ZU eed<   eed<   y)ClassificationOutputfile_idclassificationN)__name__
__module____qualname__str__annotations__     }/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/llama_cloud_services/beta/classifier/client.pyr   r      s    Lr"   r   c                      e Zd ZdZddefdedee   dedefdZ	e
	 	 d%d	edee   d
ee   ddfd       Z	 d&dee   dee   dee   defdZ	 d&dee   dee   dee   defdZ	 	 d'dee   dee   dee   dedef
dZ	 	 d'dee   dee   dee   dedef
dZddedfdee   deeee   f   dee   dedededefdZddedfdee   deeee   f   dee   dedededefdZ	 	 d'dee   dedee   dedef
dZ	 	 d'dee   dedee   dedef
dZddedfdee   d ee   dee   dedededefd!Z 	 	 d'dee   d ee   dee   dedef
d"Z!d#edefd$Z"y)(LlamaClassifya  
    Experimental - Client for interacting with the LlamaCloud Classifier API.
    The Classification API is currently in beta and may change in the future without notice.

    Args:
        client: The LlamaCloud client to use.
        project_id: The project ID to use.
        polling_interval: The interval to poll for job completion in seconds.
        polling_timeout: The timeout for the job to complete in seconds.
    Ng      ?client
project_idpolling_intervalpolling_timeoutc                 ^    || _         || _        || _        t        ||      | _        || _        y N)r&   r'   r(   r   file_clientr)   )selfr&   r'   r(   r)   s        r#   __init__zLlamaClassify.__init__.   s1     $ 0%fj9.r"   api_keybase_urlreturnClassifyClientc                 .    t        ||      } | ||      S )z;
        Create a classify client from an API key.
        )tokenr0   r   )clsr/   r'   r0   r&   s        r#   from_api_keyzLlamaClassify.from_api_key;   s#     !wB
 	
r"   rulesfile_idsparsing_configurationc                    K   | j                   j                  j                  |||xs t        | j                         d{   S 7 w)a  
        Create a classify job.
        Meant to expose lower level access to classifier jobs for advanced use cases.
        Experimental: This endpoint is not yet ready for production use and is subject to change at any time.

        Args:
            rules: The rules to use for classification.
            file_ids: The IDs of the files to classify.
            parsing_configuration: The parsing configuration to use for classification.

        Returns:
            The classify job.
        )r7   r8   r9   r'   N)r&   
classifiercreate_classify_jobr   r'   r-   r7   r8   r9   s       r#   acreate_classify_jobz"LlamaClassify.acreate_classify_jobK   sJ     & [[++??"7"?4	 @ 
 
 	
 
s   ?AAAc                     t               5  t        j                  | j                  |||            cd d d        S # 1 sw Y   y xY wr+   )r   asynciorunr>   r=   s       r#   r<   z!LlamaClassify.create_classify_jobe   s>     "# 	;;))%;PQ	 	 	s	   &;ATraise_on_errorc                   K   | j                  |||       d{   }| j                  |j                         d{   }|r5|j                  t        j
                  k(  rt        d|j                         | j                  j                  j                  |j                  | j                         d{   }|S 7 7 7 
w)a  
        Classify a list of files by their IDs.
        Note that even if a job fails, some of the files may have been classified successfully.
        In this case, you may want to set raise_on_error to False and check the results for successful classifications.

        Args:
            rules: The rules to use for classification.
            file_ids: The IDs of the files to classify.
            parsing_configuration: The parsing configuration to use for classification.
            raise_on_error: Whether to raise an error if the classification job fails.

        Returns:
            The results of the classification job.
        )r7   r8   r9   Nz%Error classifying files under job ID r'   )r>   wait_for_job_completionidstatusr   ERROR
ValueErrorr&   r;   get_classification_job_resultsr'   )r-   r7   r8   r9   rB   classify_jobclassify_job_with_statusresultss           r#   aclassify_file_idsz LlamaClassify.aclassify_file_idsp   s     * "66"7 7 
 
 *.)E)Eloo)V#V 6==AQAQQ78P8S8S7TU  ..MM$'' N 
 

 %
 $W
s2   CB>"CC A9C7C8C CCc           	          t               5  t        j                  | j                  ||||            cd d d        S # 1 sw Y   y xY wr+   )r   r@   rA   rN   )r-   r7   r8   r9   rB   s        r#   classify_file_idszLlamaClassify.classify_file_ids   sC     "# 	;;''8%:N	 	 	s	   '<AFfilesworkersshow_progressc                 ^  K   t        |t              s|g}|D cg c]  }| j                  j                  |       }}t	        |||d       d{   }	| j                  ||	D 
cg c]  }
|
j                   c}
||       d{   }t        j                  ||	      S c c}w 7 Sc c}
w 7 &w)aD  
        Classify one or more files from various input types.

        Args:
            rules: The rules to use for classification.
            files: The file(s) to classify. Can be a single file or list of files. Each can be:
                - str/Path: File path
                - SourceText: Text content or file with explicit filename
                - File: Already uploaded file
                - BufferedIOBase: File-like object
            parsing_configuration: The parsing configuration to use for classification.
            raise_on_error: Whether to raise an error if the classification job fails.
            workers: Number of parallel workers for uploading files.
            show_progress: Whether to show progress bars.

        Returns:
            The results of the classification job with file metadata.
        z"Uploading files for classification)rS   rR   descN)	
isinstancelistr,   upload_contentr   rN   rF   r   from_classify_job_results)r-   r7   rQ   r9   rB   rR   rS   
file_input
coroutinesuploaded_filesfilerM   s               r#   	aclassifyzLlamaClassify.aclassify   s     8 %&GE KP
<FD++J7

 
 ,4'5	,
 &
 //!/0TWW0!	
 
 +DD^
 	
#
&
 1
s9   B-"BB-B$B-%B&
8B-B+ B-&B-c                     t               5  t        j                  | j                  ||||||            cddd       S # 1 sw Y   yxY w)aZ  
        Classify one or more files from various input types (synchronous version).

        Args:
            rules: The rules to use for classification.
            files: The file(s) to classify. Can be a single file or list of files. Each can be:
                - str/Path: File path
                - SourceText: Text content or file with explicit filename
                - File: Already uploaded file
                - BufferedIOBase: File-like object
            parsing_configuration: The parsing configuration to use for classification.
            raise_on_error: Whether to raise an error if the classification job fails.
            workers: Number of parallel workers for uploading files.
            show_progress: Whether to show progress bars.

        Returns:
            The results of the classification job with file metadata.
        N)r   r@   rA   r^   )r-   r7   rQ   r9   rB   rR   rS   s          r#   classifyzLlamaClassify.classify   sI    6 "# 
	;;)"!	
	 
	 
	s	   )>Afile_input_pathc                 ~   K   t        j                  dt        d       | j                  ||||       d{   S 7 w)6
        Deprecated: Use aclassify() instead.
        z:aclassify_file_path is deprecated, use aclassify() instead   
stacklevelNwarningswarnDeprecationWarningr^   r-   r7   ra   r9   rB   s        r#   aclassify_file_pathz!LlamaClassify.aclassify_file_path  sD      	H	

 ^^?$9>
 
 	
 
s   4=;=c                 b    t        j                  dt        d       | j                  ||||      S )5
        Deprecated: Use classify() instead.
        z8classify_file_path is deprecated, use classify() insteadrd   re   rh   ri   rj   r`   rk   s        r#   classify_file_pathz LlamaClassify.classify_file_path  s6     	F	

 }}?$9>
 	
r"   file_input_pathsc                    K   t        j                  dt        d       | j                  ||||||       d{   S 7 w)rc   z;aclassify_file_paths is deprecated, use aclassify() insteadrd   re   Nrg   )r-   r7   rq   r9   rB   rR   rS   s          r#   aclassify_file_pathsz"LlamaClassify.aclassify_file_paths)  sL      	I	

 ^^!
 
 	
 
s   6?=?c                 b    t        j                  dt        d       | j                  ||||      S )rn   z9classify_file_paths is deprecated, use classify() insteadrd   re   ro   )r-   r7   rq   r9   rB   s        r#   classify_file_pathsz!LlamaClassify.classify_file_pathsC  s7     	G	

 }}#%:N
 	
r"   job_idc                 :  K   | j                   j                  j                  || j                         d{   }t	        j                         }t        |j                        st	        j                         |z
  }|| j                  kD  rt        d| d| d      t        j                  | j                         d{    | j                   j                  j                  || j                         d{   }t        |j                        s|S 7 7 W7  w)ax  
        Wait for a classify job to complete.
        Meant to expose lower level access to classifier jobs for advanced use cases.
        Experimental: This endpoint is not yet ready for production use and is subject to change at any time.

        Args:
            job_id: The ID of the job to wait for.

        Returns:
            The classify job with status.
        rD   NzJob z timed out after z seconds)r&   r;   get_classify_jobr'   timer   rG   r)   TimeoutErrorr@   sleepr(   )r-   rv   job
start_timepolling_durations        r#   rE   z%LlamaClassify.wait_for_job_completionV  s      KK**;;t < 
 
 YY[
$SZZ0#yy{Z7$"6"66"6("34D3EXN  -- 5 5666..??4?? @  C %SZZ0 

 7s:   5DDBD?D 8D8D9DDDD)NNr+   )NT)#r   r   r   __doc__r   r   r   r   floatr.   classmethodr6   rW   r
   r   r	   r>   r<   boolr   rN   rP   r   r   r   r   intr   r^   r`   rl   rp   rs   ru   rE   r!   r"   r#   r%   r%   "   s   	 %)"%!8// SM/  	/
 /  %)"&	

 SM
 3-	

 

 
& IM	
N#
 s)
  ((DE	

 

< IM		N#	 s)	  ((DE		
 
	 IM#'N#' s)'  ((DE	'
 ' 
'Z IM#N# s)  ((DE	
  
$ IM#*#3
N#3
 YY/03
  ((DE	3

 3
 3
 3
 
%3
r IM#*#%N#% YY/0%  ((DE	%
 % % % 
%%V IM#
N#
 
  ((DE	

 
 
%
. IM#
N#
 
  ((DE	

 
 
%
. IM#*#
N#
 s)
  ((DE	

 
 
 
 
%
< IM#
N#
 s)
  ((DE	

 
 
%
&C K r"   r%   )$r@   ry   rh   typingr   r   r   pydanticr   llama_cloud.clientr   llama_cloud.typesr	   r
   r   r   r   r   'llama_cloud.resources.classifier.clientr   !llama_cloud_services.files.clientr   llama_cloud_services.constantsr   llama_cloud_services.utilsr   r   r   llama_index.core.async_utilsr   r   *llama_cloud_services.beta.classifier.typesr   r   r%   r2   r!   r"   r#   <module>r      sd       ( (  .  9 8 B 
 G
9 
N Nb
 r"   