Ë
    uPêj…%  ã                   óŠ   — U d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ d	Zeed
<    G d„ de«      Zy)z-
Azure AI OCR transformation implementation.
é    )ÚFinal)Úverbose_logger)Úasync_convert_url_to_base64Úconvert_url_to_base64)Úget_azure_ai_auth_headers)ÚDocumentTypeÚOCRRequestData)ÚMistralOCRConfig)Úget_secret_strÚAZURE_AI_API_KEYÚAZURE_AI_OCR_API_KEY_ENV_VARc                   óü   ‡ — e Zd ZdZdˆ fd„Zdedz  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fd„Z
dedefd„Zdededededef
ˆ fd„Zdededededef
ˆ fd„Zˆ xZS )ÚAzureAIOCRConfiga™  
    Azure AI OCR transformation configuration.

    Azure AI uses Mistral's OCR API but with a different endpoint format.
    Inherits transformation logic from MistralOCRConfig since they use the same format.

    Reference: Azure AI Foundry OCR documentation

    Important: Azure AI only supports base64 data URIs (data:image/..., data:application/pdf;base64,...).
    Regular URLs are not supported.
    ÚreturnNc                 ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/azure_ai/ocr/transformation.pyr   zAzureAIOCRConfig.__init__!   s   ø€ Ü‰ÑÕó    c                 ó   — t         S r   )r   )r   s    r   Úget_api_key_env_varz$AzureAIOCRConfig.get_api_key_env_var$   s   € Ü+Ð+r   ÚheadersÚmodelÚapi_keyÚapi_baseÚlitellm_paramsc                 ó†   — |€t        t        «      }|€t        d«      }|€t        d«      ‚i t        ||¬«      ¥ddi¥|¥}|S )z¯
        Validate environment and return headers for Azure AI OCR.

        Authenticates with AZURE_AI_API_KEY, or with an Entra ID / OAuth token when no key is set.
        ÚAZURE_AI_API_BASEúaMissing Azure AI API Base - Set AZURE_AI_API_BASE environment variable or pass api_base parameter)r   r   zContent-Typezapplication/json)r   r   Ú
ValueErrorr   )r   r   r   r   r   r   Úkwargss          r   Úvalidate_environmentz%AzureAIOCRConfig.validate_environment'   so   € ð ˆ?Ü$Ô%AÓBˆGð ÐÜ%Ð&9Ó:ˆHàÐÜØsóð ð
Ü'°ÈÔWð
àÐ.ñ
ð ð
ˆð ˆr   Úoptional_paramsc                 óH   — |€t        d«      ‚|j                  d«      }|› d�S )aq  
        Get complete URL for Azure AI OCR endpoint.

        Azure AI endpoint format: https://<api_base>/providers/mistral/azure/ocr

        Args:
            api_base: Azure AI API base URL
            model: Model name (not used in URL construction)
            optional_params: Optional parameters

        Returns: Complete URL for Azure AI OCR endpoint
        r"   ú/z/providers/mistral/azure/ocr)r#   Úrstrip)r   r   r   r&   r   r$   s         r   Úget_complete_urlz!AzureAIOCRConfig.get_complete_urlJ   s:   € ð( ÐÜØsóð ð
 —?‘? 3Ó'ˆð �Ð7Ð8Ð8r   Úurlc                 óˆ   — t        j                  d|«       t        |¬«      }t        j                  dt        |«      «       |S )a&  
        Synchronously convert a URL to a base64 data URI.

        Azure AI OCR doesn't have internet access, so we need to fetch URLs
        and convert them to base64 data URIs.

        Args:
            url: The URL to convert

        Returns:
            Base64 data URI string
        z:Azure AI OCR: Converting URL to base64 data URI (sync): %s©r+   ú4Azure AI OCR: Converted URL to data URI (length: %s))r   Údebugr   Úlen©r   r+   Údata_uris      r   Ú_convert_url_to_data_uri_syncz.AzureAIOCRConfig._convert_url_to_data_uri_synci   s?   € ô 	×ÑÐYÐ[^Ô_ô 0°CÔ8ˆä×ÑÐSÔUXÐYaÓUbÔcàˆr   c              ƒ   ó¤   K  — t        j                  d|«       t        |¬«      ƒ d{  –—† }t        j                  dt        |«      «       |S 7 Œ%­w)a'  
        Asynchronously convert a URL to a base64 data URI.

        Azure AI OCR doesn't have internet access, so we need to fetch URLs
        and convert them to base64 data URIs.

        Args:
            url: The URL to convert

        Returns:
            Base64 data URI string
        z;Azure AI OCR: Converting URL to base64 data URI (async): %sr-   Nr.   )r   r/   r   r0   r1   s      r   Ú_convert_url_to_data_uri_asyncz/AzureAIOCRConfig._convert_url_to_data_uri_async€   sL   è ø€ ô 	×ÑÐZÐ\_Ô`ô !<ÀÔ D×Dˆä×ÑÐSÔUXÐYaÓUbÔcàˆð	 Eús   ‚&A¨A©&AÚdocumentc                 óB  •— t        j                  d|«       t        |t        «      st	        dt        |«      › �«      ‚|j                  d«      }|j                  «       }|dk(  rR|j                  dd«      }|r”|j                  d«      sƒt        j                  d«       | j                  |¬«      }	|	|d<   nV|d	k(  rQ|j                  d	d«      }
|
r=|
j                  d«      s,t        j                  d
«       | j                  |
¬«      }	|	|d	<   t        ‰| �,  d||||dœ|¤ŽS )a  
        Transform OCR request for Azure AI, converting URLs to base64 data URIs (sync).

        Azure AI OCR doesn't have internet access, so we automatically fetch
        any URLs and convert them to base64 data URIs synchronously.

        Args:
            model: Model name
            document: Document dict from user
            optional_params: Already mapped optional parameters
            headers: Request headers
            **kwargs: Additional arguments

        Returns:
            OCRRequestData with JSON data
        z5Azure AI OCR transform_ocr_request (sync) - model: %súExpected document dict, got ÚtypeÚdocument_urlÚ údata:z?Azure AI OCR: Converting document URL to base64 data URI (sync)r-   Ú	image_urlz<Azure AI OCR: Converting image URL to base64 data URI (sync)©r   r6   r&   r   © )r   r/   Ú
isinstanceÚdictr#   r9   ÚgetÚcopyÚ
startswithr3   r   Útransform_ocr_request©r   r   r6   r&   r   r$   Údoc_typeÚtransformed_documentr:   r2   r=   r   s              €r   rE   z&AzureAIOCRConfig.transform_ocr_request—   s.  ø€ ô0 	×ÑÐTÐV[Ô\ä˜(¤DÔ)ÜÐ;¼DÀ»NÐ;KÐLÓMÐMð #Ÿ,™, vÓ.ˆØ&.§m¡m£oÐà�~Ò%Ø"*§,¡,¨~¸rÓ"BˆLá L×$;Ñ$;¸GÔ$DÜ×$Ñ$Ð%fÔgØ×=Ñ=À,Ð=ÓO�Ø7?Ð$ ^Ò4Ø˜Ò$Ø'Ÿ|™|¨K¸Ó<ˆIá ×!5Ñ!5°gÔ!>Ü×$Ñ$Ð%cÔdØ×=Ñ=À)Ð=ÓL�Ø4<Ð$ [Ñ1ô ‰wÑ,ð 
ØØ)Ø+Øñ	
ð
 ñ
ð 	
r   c              ‹   ór  •K  — t        j                  d|«       t        |t        «      st	        dt        |«      › �«      ‚|j                  d«      }|j                  «       }|dk(  rZ|j                  dd«      }|r¤|j                  d«      s“t        j                  d«       | j                  |¬«      ƒ d	{  –—† }	|	|d<   n^|d
k(  rY|j                  d
d«      }
|
rE|
j                  d«      s4t        j                  d«       | j                  |
¬«      ƒ d	{  –—† }	|	|d
<   t        ‰| �,  d||||dœ|¤ŽS 7 Œ|7 Œ­w)a  
        Transform OCR request for Azure AI, converting URLs to base64 data URIs (async).

        Azure AI OCR doesn't have internet access, so we automatically fetch
        any URLs and convert them to base64 data URIs asynchronously.

        Args:
            model: Model name
            document: Document dict from user
            optional_params: Already mapped optional parameters
            headers: Request headers
            **kwargs: Additional arguments

        Returns:
            OCRRequestData with JSON data
        z4Azure AI OCR async_transform_ocr_request - model: %sr8   r9   r:   r;   r<   z@Azure AI OCR: Converting document URL to base64 data URI (async)r-   Nr=   z=Azure AI OCR: Converting image URL to base64 data URI (async)r>   r?   )r   r/   r@   rA   r#   r9   rB   rC   rD   r5   r   rE   rF   s              €r   Úasync_transform_ocr_requestz,AzureAIOCRConfig.async_transform_ocr_requestÐ   sE  øè ø€ ô0 	×ÑÐSÐUZÔ[ä˜(¤DÔ)ÜÐ;¼DÀ»NÐ;KÐLÓMÐMð #Ÿ,™, vÓ.ˆØ&.§m¡m£oÐà�~Ò%Ø"*§,¡,¨~¸rÓ"BˆLá L×$;Ñ$;¸GÔ$DÜ×$Ñ$Ð%gÔhØ!%×!DÑ!DÈÐ!DÓ!V×V�Ø7?Ð$ ^Ò4Ø˜Ò$Ø'Ÿ|™|¨K¸Ó<ˆIá ×!5Ñ!5°gÔ!>Ü×$Ñ$Ð%dÔeØ!%×!DÑ!DÈÐ!DÓ!S×S�Ø4<Ð$ [Ñ1ô ‰wÑ,ð 
ØØ)Ø+Øñ	
ð
 ñ
ð 	
ð Wøð Tús%   ƒB3D7Â6D3Â7AD7ÄD5ÄD7Ä5D7)r   N)NNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   rA   r%   r*   r3   r5   r   r	   rE   rJ   Ú__classcell__)r   s   @r   r   r      sL  ø„ ñ
õð, S¨4¡Zó ,ð #Ø#Ø&*ñ!àð!ð ð!ð �t‘ð	!ð
 ˜‘*ð!ð ˜t™ð!ð 
ó!ðP '+ñ9à˜‘*ð9ð ð9ð ð	9ð
 ˜t™ð9ð 
ó9ð>°ð ¸ó ð.¸ð Àó ð.7
àð7
ð ð7
ð ð	7
ð
 ð7
ð 
õ7
ðr7
àð7
ð ð7
ð ð	7
ð
 ð7
ð 
÷7
ñ 7
r   r   N)rN   Útypingr   Úlitellm._loggingr   Ú:litellm.litellm_core_utils.prompt_templates.image_handlingr   r   Ú"litellm.llms.azure_ai.common_utilsr   Ú(litellm.llms.base_llm.ocr.transformationr   r	   Ú'litellm.llms.mistral.ocr.transformationr
   Úlitellm.secret_managers.mainr   r   Ú__annotations__r   r?   r   r   ú<module>rY      s@   ðòõ å +÷õ Iß QÝ DÝ 7à&8Ð ˜eÓ 8ôs
Ð'õ s
r   