Ë
    uPêjÜ"  ã                   óx  — U d Z ddlmZ ddlmZmZmZmZ ddlZddl	m
Z
 ddlmZ ddlmZ erddlmZ neZeeef   Zed	   Zd	Zeeed
f      ed<   dZeed<   dZeed<   dZeed<   dedefd„Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z" G d„ d e«      Z# G d!„ d"«      Z$y)#z(
Base OCR transformation configuration.
é    )ÚMapping)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralN)ÚPrivateAttr©ÚBaseLLMException)ÚLiteLLMPydanticObjectBase)ÚLogging)ÚlitellmÚnative.ÚOCR_REQUEST_FORMATSÚ
req_formatÚOCR_REQUEST_FORMAT_PARAMzx-req-formatÚOCR_REQUEST_FORMAT_HEADERÚprovider_native_responseÚPROVIDER_NATIVE_RESPONSE_KEYÚvalueÚreturnc           
      ór   — | dk(  ry| dk(  ryt        dt        › d| ›ddj                  t        «      › d�«      ‚)Nr   r   z	Invalid `z`: z. Expected one of z, ú.)Ú
ValueErrorr   Újoinr   )r   s    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/base_llm/ocr/transformation.pyÚparse_ocr_request_formatr   $   sL   € Ø�	ÒØØ�ÒØÜ
Ø
Ô,Ð-¨S°°	Ð9KÈDÏIÉIÔViÓLjÐKkÐklÐmóð ó    c                   óN   — e Zd ZU dZdZedz  ed<   dZedz  ed<   dZedz  ed<   y)ÚOCRPageDimensionsz"Page dimensions from OCR response.NÚdpiÚheightÚwidth)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    ÚintÚ__annotations__r!   r"   © r   r   r   r   .   s/   … Ù,à€Cˆˆt‰ÓØ€FˆC�$‰JÓØ€Eˆ3�‰:Ôr   r   c                   óL   — e Zd ZU dZdZedz  ed<   dZeee	f   dz  ed<   ddiZ
y)ÚOCRPageImagezImage extracted from OCR page.NÚimage_base64ÚbboxÚextraÚallow)r#   r$   r%   r&   r,   Ústrr(   r-   Údictr   Úmodel_configr)   r   r   r+   r+   6   s4   … Ù(à#€L�#˜‘*Ó#Ø"&€Dˆ$ˆs�Cˆx‰.˜4Ñ
Ó&à˜WÐ%�Lr   r+   c                   ó\   — e Zd ZU dZeed<   eed<   dZee	   dz  ed<   dZ
edz  ed<   ddiZy)	ÚOCRPagezSingle page from OCR response.ÚindexÚmarkdownNÚimagesÚ
dimensionsr.   r/   )r#   r$   r%   r&   r'   r(   r0   r7   Úlistr+   r8   r   r2   r)   r   r   r4   r4   ?   s=   … Ù(àƒJØƒMØ(,€FˆD�Ñ Ñ%Ó,Ø+/€JÐ! DÑ(Ó/à˜WÐ%�Lr   r4   c                   óV   — e Zd ZU dZdZedz  ed<   dZedz  ed<   dZ	edz  ed<   ddiZ
y)ÚOCRUsageInfoz$Usage information from OCR response.NÚpages_processedÚcreditsÚdoc_size_bytesr.   r/   )r#   r$   r%   r&   r<   r'   r(   r=   Úfloatr>   r2   r)   r   r   r;   r;   J   s9   … Ù.à"&€O�S˜4‘ZÓ&Ø €GˆU�T‰\Ó Ø!%€N�C˜$‘JÓ%à˜WÐ%�Lr   r;   c                   ó  — e Zd ZU dZee   ed<   eed<   dZe	dz  ed<   dZ
edz  ed<   dZedz  ed<   dZeeeef      dz  ed<   dZeeeef      dz  ed	<   d
Zeed<   ddiZ ee¬«      Zeed<   deeef   ddfd„Zdeeef   dz  fd„Zy)ÚOCRResponsez�
    Standard OCR response format.
    Standardized to Mistral OCR format - other providers should transform to this format.
    ÚpagesÚmodelNÚdocument_annotationÚ
usage_infoÚcontentÚtablesÚkeyValuePairsÚocrÚobjectr.   r/   )Údefault_factoryÚ_hidden_paramsÚnative_responser   c                 ó*   — || j                   t        <   y)zFKeep the provider's own response payload alongside the normalized one.N)rL   r   ©ÚselfrM   s     r   Úset_provider_native_responsez(OCRResponse.set_provider_native_responseh   s   € à<Kˆ×ÑÔ8Ò9r   c                 óh   — | j                   j                  t        «      }t        |t        «      r|S dS )zLThe provider's own response payload, when `req_format=native` was requested.N)rL   Úgetr   Ú
isinstancer1   rO   s     r   Úget_provider_native_responsez(OCRResponse.get_provider_native_responsel   s-   € à!%×!4Ñ!4×!8Ñ!8Ô9UÓ!VˆÜ",¨_¼dÔ"CˆÐMÈÐMr   )r#   r$   r%   r&   r9   r4   r(   r0   rD   r   rE   r;   rF   rG   r1   rJ   rH   r2   r   rL   r   rQ   rU   r)   r   r   rA   rA   T   sß   … ñð
 �‰=ÓØƒJØ&*Ð˜˜t™Ó*Ø&*€J�˜tÑ#Ó*Ø€GˆS�4‰ZÓØ-1€FˆD��c˜6�kÑ"Ñ# dÑ*Ó1Ø48€M�4˜˜S &˜[Ñ)Ñ*¨TÑ1Ó8Ø€FˆCÓà˜WÐ%€Lñ '°tÔ<€N�DÓ<ðL¸GÀCÈÀKÑ<Pð LÐUYó LðN¨g°c¸6°kÑ.BÀTÑ.Iô Nr   rA   c                   óJ   — e Zd ZU dZdZeez  dz  ed<   dZee	e
f   dz  ed<   y)ÚOCRRequestDatazOCR request data structure.NÚdataÚfiles)r#   r$   r%   r&   rX   r1   Úbytesr(   rY   r0   r   r)   r   r   rW   rW   r   s/   … Ù%à $€Dˆ$�‰,˜Ñ
Ó$Ø#'€Eˆ4��S�‰>˜DÑ Ô'r   rW   c                   ó`  — e Zd ZdZdd„Zdedefd„Zdedz  fd„Zde	d	e	dede	fd
„Z
	 	 	 dde	dededz  dedz  de	dz  de	fd„Z	 ddedz  ded	e	de	dz  def
d„Zdeded	e	de	def
d„Zdeded	e	de	def
d„Zdedej$                  dedefd„Zdedej$                  dedefd„Zdedede	defd„Zy)ÚBaseOCRConfigzc
    Base configuration for OCR transformations.
    Handles provider-agnostic OCR operations.
    r   Nc                  ó   — y ©Nr)   ©rP   s    r   Ú__init__zBaseOCRConfig.__init__   s   € Ør   rC   c                 ó   — g S )z„
        Get supported OCR parameters for this provider.
        Override this method in provider-specific implementations.
        r)   )rP   rC   s     r   Úget_supported_ocr_paramsz&BaseOCRConfig.get_supported_ocr_params‚   s	   € ð
 ˆ	r   c                  ó   — y)zY
        Return the provider-specific API key environment variable name, if any.
        Nr)   r_   s    r   Úget_api_key_env_varz!BaseOCRConfig.get_api_key_env_var‰   s   € ð r   Únon_default_paramsÚoptional_paramsc                 ó   — |S )z3Map OCR parameters to provider-specific parameters.r)   )rP   re   rf   rC   s       r   Úmap_ocr_paramszBaseOCRConfig.map_ocr_params�   s
   € ð Ðr   ÚheadersÚapi_keyÚapi_baseÚlitellm_paramsc                 ó   — |S )zq
        Validate environment and return headers.
        Override in provider-specific implementations.
        r)   )rP   ri   rC   rj   rk   rl   Úkwargss          r   Úvalidate_environmentz"BaseOCRConfig.validate_environment˜   s	   € ð ˆr   c                 ó   — t        d«      ‚)zk
        Get complete URL for OCR endpoint.
        Override in provider-specific implementations.
        z0get_complete_url must be implemented by provider©ÚNotImplementedError)rP   rk   rC   rf   rl   rn   s         r   Úget_complete_urlzBaseOCRConfig.get_complete_url§   s   € ô "Ð"TÓUÐUr   Údocumentc                 ó   — t        d«      ‚)a—  
        Transform OCR request to provider-specific format.
        Override in provider-specific implementations.

        Note: By the time this method is called, any file-type documents have already
        been converted to document_url/image_url format with base64 data URIs by
        the preprocessing in litellm/ocr/main.py.

        Args:
            model: Model name
            document: Document to process - always a dict with type="document_url" or type="image_url"
            optional_params: Optional parameters for the request
            headers: Request headers

        Returns:
            OCRRequestData with data and files fields
        z5transform_ocr_request must be implemented by providerrq   ©rP   rC   rt   rf   ri   rn   s         r   Útransform_ocr_requestz#BaseOCRConfig.transform_ocr_requestµ   s   € ô2 "Ð"YÓZÐZr   c              ‹   ó8   K  —  | j                   d||||dœ|¤ŽS ­w)aU  
        Async transform OCR request to provider-specific format.
        Optional method - providers can override if they need async transformations
        (e.g., Azure AI for URL-to-base64 conversion).

        Default implementation falls back to sync transform_ocr_request.

        Args:
            model: Model name
            document: Document to process (Mistral format dict, or file path, bytes, etc.)
            optional_params: Optional parameters for the request
            headers: Request headers

        Returns:
            OCRRequestData with data and files fields
        )rC   rt   rf   ri   r)   )rw   rv   s         r   Úasync_transform_ocr_requestz)BaseOCRConfig.async_transform_ocr_requestÐ   s8   è ø€ ð2 *ˆt×)Ñ)ð 
ØØØ+Øñ	
ð
 ñ
ð 	
ùs   ‚Úraw_responseÚlogging_objc                 ó   — t        d«      ‚)z…
        Transform provider-specific OCR response to standard format.
        Override in provider-specific implementations.
        z6transform_ocr_response must be implemented by providerrq   ©rP   rC   rz   r{   rn   s        r   Útransform_ocr_responsez$BaseOCRConfig.transform_ocr_responseñ   s   € ô "Ð"ZÓ[Ð[r   c              ‹   ó6   K  —  | j                   d|||dœ|¤ŽS ­w)aú  
        Async transform provider-specific OCR response to standard format.
        Optional method - providers can override if they need async transformations
        (e.g., Azure Document Intelligence for async operation polling).

        Default implementation falls back to sync transform_ocr_response.

        Args:
            model: Model name
            raw_response: Raw HTTP response
            logging_obj: Logging object

        Returns:
            OCRResponse in standard format
        )rC   rz   r{   r)   )r~   r}   s        r   Úasync_transform_ocr_responsez*BaseOCRConfig.async_transform_ocr_responseþ   s5   è ø€ ð. +ˆt×*Ñ*ð 
ØØ%Ø#ñ
ð ñ	
ð 	
ùs   ‚Úerror_messageÚstatus_codec                 ó   — t        |||¬«      S )z-Get appropriate error class for the provider.)r‚   Úmessageri   r	   )rP   r�   r‚   ri   s       r   Úget_error_classzBaseOCRConfig.get_error_class  s   € ô  Ø#Ø!Øô
ð 	
r   )r   N)NNNr^   )r#   r$   r%   r&   r`   r0   r9   rb   rd   r1   rh   ro   rs   ÚDocumentTyperW   rw   ry   ÚhttpxÚResponseÚLiteLLMLoggingObjrA   r~   r€   r'   Ú	Exceptionr…   r)   r   r   r\   r\   y   s÷  „ ñó
ð¨cð °dó ð S¨4¡Zó ðà ðð ðð ð	ð
 
óð #Ø#Ø&*ñàðð ðð �t‘ð	ð
 ˜‘*ðð ˜t™ðð 
óð( '+ñVà˜‘*ðVð ðVð ð	Vð
 ˜t™ðVð 
óVð[àð[ð ð[ð ð	[ð
 ð[ð 
ó[ð6
àð
ð ð
ð ð	
ð
 ð
ð 
ó
ðB\àð\ð —n‘nð\ð 'ð	\ð 
ó\ð
àð
ð —n‘nð
ð 'ð	
ð 
ó
ð<
àð
ð ð
ð ð	
ð
 
ô
r   r\   )%r&   Úcollections.abcr   Útypingr   r   r   r   r‡   Úpydanticr   Ú)litellm.llms.base_llm.chat.transformationr
   Úlitellm.types.llms.baser   Ú*litellm.litellm_core_utils.litellm_loggingr   r‰   r1   r0   r†   ÚOCRRequestFormatr   Útupler(   r   r   r   rJ   r   r   r+   r4   r;   rA   rW   r\   r)   r   r   ú<module>r“      sô   ðòõ $ß 5Ó 5ã Ý  å FÝ =áÞWàÐð �C˜�H‰~€àÐ.Ñ/Ð à;PÐ �U˜5Ð!1°3Ð!6Ñ7Ñ8Ó Pà".Ð ˜%Ó .à#1Ð ˜5Ó 1à&@Ð ˜eÓ @ð Fð Ð/?ó ôÐ1ô ô&Ð,ô &ô&Ð'ô &ô&Ð,ô &ôNÐ+ô Nô<(Ð.ô (÷n
ò n
r   