Ë
    uPêj  ã                   ó~   — d 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
 erddlmZ ddlmZ ddlmZ  G d	„ d
e«      Zy)z˜
OCR Handler for Unified Guardrails

Provides guardrail translation support for the OCR endpoint.
Processes the extracted markdown text from OCR pages.
é    )ÚTYPE_CHECKINGÚAnyÚFinal)Úverbose_proxy_logger)ÚBaseTranslation)ÚGenericGuardrailAPIInputs)ÚCustomGuardrail)ÚLogging)ÚOCRResponsec                   ó`   — e Zd ZdZ	 ddedddddefd	„Z	 	 	 dd
ddddddedz  dedz  defd„Zy)Ú
OCRHandleraØ  
    Handler for processing OCR requests/responses with guardrails.

    Input: The OCR input is a document URL/reference - not text content.
           We pass the document URL as text for guardrails that may want to
           validate or filter document sources.

    Output: OCR responses contain extracted markdown text per page.
            The handler extracts all page markdown, applies guardrails,
            and maps the guardrailed text back to the pages.
    NÚdataÚguardrail_to_applyr	   Úlitellm_logging_objzLiteLLMLoggingObj | NoneÚreturnc              ƒ   ó  K  — |j                  d«      }|�t        |t        «      st        j                  d«       |S g }|j                  d«      }|dk(  r5|j                  d«      }|r[t        |t
        «      rK|j                  |«       n9|dk(  r4|j                  d«      }|r!t        |t
        «      r|j                  |«       |s|S t        |¬«      }|j                  d«      }	|	r|	|d<   |j                  ||d	|¬
«      ƒ d{  –—†  |S 7 Œ­w)aä  
        Process OCR input by applying guardrails to the document reference.

        The OCR input contains a document dict with a URL. We extract
        the URL and pass it to the guardrail for validation.

        Args:
            data: Request data containing 'document' parameter
            guardrail_to_apply: The guardrail instance to apply
            litellm_logging_obj: Optional logging object

        Returns:
            Modified data with guardrails applied
        ÚdocumentNz6OCR guardrail: No valid document found in request dataÚtypeÚdocument_urlÚ	image_url©ÚtextsÚmodelÚrequest©ÚinputsÚrequest_dataÚ
input_typeÚlogging_obj)	ÚgetÚ
isinstanceÚdictr   ÚdebugÚstrÚappendr   Úapply_guardrail)
Úselfr   r   r   r   Útexts_to_checkÚdoc_typeÚurlr   r   s
             ú{/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/mistral/ocr/guardrail_translation/handler.pyÚprocess_input_messagesz!OCRHandler.process_input_messages!   s  è ø€ ð( Ÿ(™( :Ó.ˆØÐ¤:¨h¼Ô#=Ü ×&Ñ&Ð'_Ô`ØˆKð ,.ˆØ"Ÿ,™, vÓ.ˆØ�~Ò%Ø—,‘,˜~Ó.ˆCÙ”z #¤sÔ+Ø×%Ñ% cÕ*Ø˜Ò$Ø—,‘,˜{Ó+ˆCÙ”z #¤sÔ+Ø×%Ñ% cÔ*áØˆKä1¸ÔGˆØ—x‘x Ó(ˆÙØ#ˆF�7‰Oà ×0Ñ0ØØØ Ø+ð	 1ó 
÷ 	
ð 	
ð ˆð	
ús   ‚DDÄD
ÄDÚresponser   Úuser_api_key_dictr   c              ƒ   óú  K  — t        |d«      r|j                  st        j                  d«       |S g }g }t	        |j                  «      D ]K  \  }}	t        |	d«      sŒ|	j
                  sŒ |j                  |	j
                  «       |j                  |«       ŒM |s|S t        |¬«      }
t        |dd«      }|r||
d<   |€i }|�-| j                  |«      }|r|
j                  |«       d|vr||d<   |j                  |
|d|¬	«      ƒ d{  –—† }|j                  d
g «      }t	        |«      D ]+  \  }}|t        |«      k  sŒ||   |j                  |   _        Œ- t        j                  dt        |«      «       |S 7 Œp­w)a%  
        Process OCR output by applying guardrails to extracted page text.

        Extracts markdown text from each OCR page, applies guardrails,
        and maps the guardrailed text back to the pages.

        Args:
            response: OCRResponse with pages containing markdown text
            guardrail_to_apply: The guardrail instance to apply
            litellm_logging_obj: Optional logging object
            user_api_key_dict: User API key metadata

        Returns:
            Modified OCRResponse with guardrailed page text
        Úpagesz-OCR guardrail: No pages found in OCR responseÚmarkdownr   r   NÚlitellm_metadatar-   r   r   z,OCR guardrail: Applied guardrail to %d pages)Úhasattrr0   r   r#   Ú	enumerater1   r%   r   ÚgetattrÚ'transform_user_api_key_dict_to_metadataÚupdater&   r    Úlen)r'   r-   r   r   r.   r   r(   Úpage_indicesÚiÚpager   r   Úuser_metadataÚguardrailed_inputsÚguardrailed_textsÚidxÚpage_idxs                    r+   Úprocess_output_responsez"OCRHandler.process_output_responseW   sŸ  è ø€ ô. �x Ô)°·²Ü ×&Ñ&Ð'VÔWØˆOð ,.ˆØ)+ˆÜ  §¡Ó0ò 	'‰GˆAˆtÜ�t˜ZÕ(¨T¯]«]Ø×%Ñ% d§m¡mÔ4Ø×#Ñ# AÕ&ð	'ñ
 ØˆOä1¸ÔGˆÜ˜x¨°$Ó7ˆÙØ#ˆF�7‰Oð ÐØˆLð Ð(Ø#'×#OÑ#OÐPaÓ#bˆMÙð —‘˜mÔ,à%¨\Ñ9Ø7D�LÐ!3Ñ4à*<×*LÑ*LØØ%Ø!Ø+ð	 +Mó +
÷ %
Ðð $6×#9Ñ#9¸'À2Ó#FÐÜ& |Ó4ò 	K‰MˆC�Ø”SÐ*Ó+Ó+Ø4EÀcÑ4J�—‘˜xÑ(Õ1ð	Kô 	×"Ñ"Ø:ÜÐ!Ó"ô	
ð
 ˆð%%
ús%   ‚AE;ÁE;Á+BE;ÄE9Ä	5E;Ä?;E;)N)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r   r,   rA   © ó    r+   r   r      s‘   „ ñ
ð  ;?ñ	4àð4ð .ð4ð 8ð	4ð
 
ó4ðt ;?Ø(,Ø$(ñMàðMð .ðMð 8ð	Mð
  ™:ðMð ˜T‘kðMð 
ôMrG   r   N)rE   Útypingr   r   r   Úlitellm._loggingr   Ú<litellm.llms.base_llm.guardrail_translation.base_translationr   Úlitellm.types.utilsr   Ú%litellm.integrations.custom_guardrailr	   Ú*litellm.litellm_core_utils.litellm_loggingr
   ÚLiteLLMLoggingObjÚ(litellm.llms.base_llm.ocr.transformationr   r   rF   rG   r+   ú<module>rP      s5   ðñ÷ -Ñ ,å 1Ý XÝ 9áÝEÝWÝDôP�õ PrG   