Ë
    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	m
Z
 ddlmZ ddlmZ ddlmZ d	Zeed
<    G d„ de«      Zy)z6
Vertex AI Mistral OCR transformation implementation.
é    )ÚFinal)Úverbose_logger)Úasync_convert_url_to_base64Úconvert_url_to_base64)ÚDocumentTypeÚOCRRequestData)ÚMistralOCRConfig)Úget_vertex_base_url)Ú
VertexBaseÚVERTEX_AI_API_KEYÚVERTEX_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 )ÚVertexAIOCRConfiga²  
    Vertex AI Mistral OCR transformation configuration.

    Vertex AI uses Mistral's OCR API format through the Mistral publisher endpoint.
    Inherits transformation logic from MistralOCRConfig since they use the same format.

    Reference: Vertex AI Mistral OCR documentation

    Important: Vertex AI OCR only supports base64 data URIs (data:image/..., data:application/pdf;base64,...).
    Regular URLs are not supported.
    ÚreturnNc                 ó@   •— t         ‰| �  «        t        «       | _        y ©N)ÚsuperÚ__init__r   Úvertex_base)ÚselfÚ	__class__s    €ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/vertex_ai/ocr/transformation.pyr   zVertexAIOCRConfig.__init__!   s   ø€ Ü‰ÑÔÜ%›<ˆÕó    c                 ó   — t         S r   )r   )r   s    r   Úget_api_key_env_varz%VertexAIOCRConfig.get_api_key_env_var%   s   € Ü,Ð,r   ÚheadersÚmodelÚapi_keyÚapi_baseÚlitellm_paramsc                 óÖ   — |�
d|› �ddœ|¥S |xs i }t        j                  |¬«      }t        j                  |¬«      }| j                  j	                  ||¬«      \  }	}
d|	› �ddœ|¥}|S )z¤
        Validate environment and return headers for Vertex AI OCR.

        Vertex AI uses Bearer token authentication with access token from credentials.
        zBearer zapplication/json)ÚAuthorizationzContent-Type©r    )ÚcredentialsÚ
project_id)r   Úsafe_get_vertex_ai_projectÚsafe_get_vertex_ai_credentialsr   Úget_access_token)r   r   r   r   r   r    ÚkwargsÚvertex_projectÚvertex_credentialsÚaccess_tokenr%   s              r   Úvalidate_environmentz&VertexAIOCRConfig.validate_environment(   sª   € ð Ðà#*¨7¨)Ð!4Ø 2ñð ðð ð (Ò-¨2ˆä *× EÑ EÐUcÔ dˆÜ$.×$MÑ$MÐ]kÔ$lÐð $(×#3Ñ#3×#DÑ#DØ*Ø%ð $Eó $
Ñ ˆ�jð  ' | nÐ5Ø.ñ
ð ð
ˆð ˆr   Úoptional_paramsc                 óà   — |xs i }t        j                  |¬«      }t        j                  |¬«      }|€t        d«      ‚|€d}|€t	        |«      }|j                  d«      }|› d|› d|› d|› d�S )	a$  
        Get complete URL for Vertex AI OCR endpoint.

        Vertex AI endpoint format:
        https://{location}-aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/publishers/mistralai/ocr

        Args:
            api_base: Vertex AI API base URL (optional)
            model: Model name (not used in URL construction)
            optional_params: Optional parameters
            litellm_params: LiteLLM parameters containing vertex_project, vertex_location

        Returns: Complete URL for Vertex AI OCR endpoint
        r#   zcMissing vertex_project - Set VERTEXAI_PROJECT environment variable or pass vertex_project parameterzus-central1ú/z/v1/projects/z/locations/z/publishers/mistralai/models/z:rawPredict)r   r&   Úsafe_get_vertex_ai_locationÚ
ValueErrorr
   Úrstrip)r   r   r   r.   r    r)   r*   Úvertex_locations           r   Úget_complete_urlz"VertexAIOCRConfig.get_complete_urlR   s¦   € ð0 (Ò-¨2ˆä *× EÑ EÐUcÔ dˆÜ$×@Ñ@ÐP^Ô_ˆàÐ!ÜØuóð ð Ð"Ø+ˆOð ÐÜ*¨?Ó;ˆHð —?‘? 3Ó'ˆð �˜=¨Ð(8¸ÀOÐCTÐTqÐrwÐqxð  yDð  Eð  	Er   Úurlc                 óˆ   — t        j                  d|«       t        |¬«      }t        j                  dt        |«      «       |S )a'  
        Synchronously convert a URL to a base64 data URI.

        Vertex 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;Vertex AI OCR: Converting URL to base64 data URI (sync): %s©r6   ú5Vertex AI OCR: Converted URL to data URI (length: %s))r   Údebugr   Úlen©r   r6   Údata_uris      r   Ú_convert_url_to_data_uri_syncz/VertexAIOCRConfig._convert_url_to_data_uri_sync‚   s?   € ô 	×ÑÐZÐ\_Ô`ô 0°CÔ8ˆä×ÑÐTÔVYÐZbÓVcÔdàˆ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.

        Vertex 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<Vertex AI OCR: Converting URL to base64 data URI (async): %sr8   Nr9   )r   r:   r   r;   r<   s      r   Ú_convert_url_to_data_uri_asyncz0VertexAIOCRConfig._convert_url_to_data_uri_async™   sL   è ø€ ô 	×ÑÐ[Ð]`Ôaô !<ÀÔ D×Dˆä×ÑÐTÔVYÐZbÓVcÔdàˆð	 Eús   ‚&A¨A©&AÚdocumentc                 ó@  •— 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 Vertex AI, converting URLs to base64 data URIs (sync).

        Vertex 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
        z1Vertex AI OCR transform_ocr_request (sync) calledúExpected document dict, got ÚtypeÚdocument_urlÚ údata:z@Vertex AI OCR: Converting document URL to base64 data URI (sync)r8   Ú	image_urlz=Vertex AI OCR: Converting image URL to base64 data URI (sync)©r   rA   r.   r   © )r   r:   Ú
isinstanceÚdictr2   rD   ÚgetÚcopyÚ
startswithr>   r   Útransform_ocr_request©r   r   rA   r.   r   r)   Údoc_typeÚtransformed_documentrE   r=   rH   r   s              €r   rP   z'VertexAIOCRConfig.transform_ocr_request°   s+  ø€ ô0 	×ÑÐPÔQä˜(¤DÔ)ÜÐ;¼DÀ»NÐ;KÐLÓMÐMð #Ÿ,™, vÓ.ˆØ&.§m¡m£oÐà�~Ò%Ø"*§,¡,¨~¸rÓ"BˆLá L×$;Ñ$;¸GÔ$DÜ×$Ñ$Ð%gÔhØ×=Ñ=À,Ð=ÓO�Ø7?Ð$ ^Ò4Ø˜Ò$Ø'Ÿ|™|¨K¸Ó<ˆIá ×!5Ñ!5°gÔ!>Ü×$Ñ$Ð%dÔeØ×=Ñ=À)Ð=Ó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 Vertex AI, converting URLs to base64 data URIs (async).

        Vertex 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
        z5Vertex AI OCR async_transform_ocr_request - model: %srC   rD   rE   rF   rG   zAVertex AI OCR: Converting document URL to base64 data URI (async)r8   NrH   z>Vertex AI OCR: Converting image URL to base64 data URI (async)rI   rJ   )r   r:   rK   rL   r2   rD   rM   rN   rO   r@   r   rP   rQ   s              €r   Úasync_transform_ocr_requestz-VertexAIOCRConfig.async_transform_ocr_requesté   sE  øè ø€ ô0 	×ÑÐTÐV[Ô\ä˜(¤DÔ)ÜÐ;¼DÀ»NÐ;KÐLÓMÐMð #Ÿ,™, vÓ.ˆØ&.§m¡m£oÐà�~Ò%Ø"*§,¡,¨~¸rÓ"BˆLá L×$;Ñ$;¸GÔ$DÜ×$Ñ$Ð%hÔiØ!%×!DÑ!DÈÐ!DÓ!V×V�Ø7?Ð$ ^Ò4Ø˜Ò$Ø'Ÿ|™|¨K¸Ó<ˆIá ×!5Ñ!5°gÔ!>Ü×$Ñ$Ð%eÔfØ!%×!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   rL   r-   r5   r>   r@   r   r   rP   rU   Ú__classcell__)r   s   @r   r   r      sS  ø„ ñ
õ(ð- S¨4¡Zó -ð #Ø#Ø&*ñ(àð(ð ð(ð �t‘ð	(ð
 ˜‘*ð(ð ˜t™ð(ð 
ó(ð^ '+ñ.Eà˜‘*ð.Eð ð.Eð ð	.Eð
 ˜t™ð.Eð 
ó.Eð`°ð ¸ó ð.¸ð Àó ð.7
àð7
ð ð7
ð ð	7
ð
 ð7
ð 
õ7
ðr7
àð7
ð ð7
ð ð	7
ð
 ð7
ð 
÷7
ñ 7
r   r   N)rY   Útypingr   Úlitellm._loggingr   Ú:litellm.litellm_core_utils.prompt_templates.image_handlingr   r   Ú(litellm.llms.base_llm.ocr.transformationr   r   Ú'litellm.llms.mistral.ocr.transformationr	   Ú#litellm.llms.vertex_ai.common_utilsr
   Ú&litellm.llms.vertex_ai.vertex_llm_baser   r   Ú__annotations__r   rJ   r   r   ú<module>rd      s@   ðòõ å +÷÷ RÝ DÝ CÝ =à':Ð ˜uÓ :ôL
Ð(õ L
r   