Ë
    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Ï
OpenAI Text Completion Handler for Unified Guardrails

This module provides guardrail translation support for OpenAI's text completion endpoint.
The handler processes the 'prompt' parameter for guardrails.
é    )ÚTYPE_CHECKINGÚAnyÚFinal)Úverbose_proxy_logger)ÚBaseTranslation)ÚGenericGuardrailAPIInputs)ÚCustomGuardrail)ÚLogging)ÚTextCompletionResponsec                   ó`   — 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)ÚOpenAITextCompletionHandlerae  
    Handler for processing OpenAI text completion requests with guardrails.

    This class provides methods to:
    1. Process input prompt (pre-call hook)
    2. Process output response (post-call hook)

    The handler specifically processes the 'prompt' parameter which can be:
    - A single string
    - A list of strings (for batch completions)
    NÚdataÚguardrail_to_applyr	   Úlitellm_logging_objzLiteLLMLoggingObj | NoneÚreturnc           
   ƒ   ó  K  — |j                  d«      }|€t        j                  d«       |S t        |t        «      rŽt        |g¬«      }|j                  d«      }|r||d<   |j                  ||d|¬«      ƒ d{  –—† }|j                  dg «      }|r|d	   n||d<   t        j                  d
t        |«      t        |d   «      «       |S t        |t        «      rþg }	g }
t        |«      D ]8  \  }}t        |t        «      sŒ|	j                  |«       |
j                  |«       Œ: |	r°t        |	¬«      }|j                  d«      }|r||d<   |j                  ||d|¬«      ƒ d{  –—† }|j                  dg «      }t        |
«      D ]O  \  }}|t        |«      k  sŒ||   |d   |<   t        j                  d|t        |	|   «      t        ||   «      «       ŒQ |S t        j                  dt        |«      «       |S 7 �Œ€7 Œ™­w)a3  
        Process input prompt by applying guardrails to text content.

        Args:
            data: Request data dictionary containing 'prompt' parameter
            guardrail_to_apply: The guardrail instance to apply

        Returns:
            Modified data with guardrails applied to prompt
        ÚpromptNz7OpenAI Text Completion: No prompt found in request data©ÚtextsÚmodelÚrequest©ÚinputsÚrequest_dataÚ
input_typeÚlogging_objr   r   z_OpenAI Text Completion: Applied guardrail to string prompt. Original length: %d, New length: %dz\OpenAI Text Completion: Applied guardrail to prompt[%d]. Original length: %d, New length: %dzLOpenAI Text Completion: Unexpected prompt type: %s. Expected string or list.)Úgetr   ÚdebugÚ
isinstanceÚstrr   Úapply_guardrailÚlenÚlistÚ	enumerateÚappendÚwarningÚtype)Úselfr   r   r   r   r   r   Úguardrailed_inputsÚguardrailed_textsÚtexts_to_checkÚtext_indicesÚidxÚpÚguardrail_idxÚ
prompt_idxs                  ú�/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai/completion/guardrail_translation/handler.pyÚprocess_input_messagesz2OpenAITextCompletionHandler.process_input_messages!   s8  è ø€ ð  Ÿ™ Ó*ˆØˆ>Ü ×&Ñ&Ð'`ÔaØˆKä�fœcÔ"ä.°f°XÔ>ˆFà—H‘H˜WÓ%ˆEÙØ"'��w‘Ø'9×'IÑ'IØØ!Ø$Ø/ð	 (Jó (÷ "Ðð !3× 6Ñ 6°wÀÓ CÐÙ5FÐ.¨qÒ1ÈFˆD�‰Nä ×&Ñ&ØqÜ�F“Ü�D˜‘NÓ#ôð` ˆôU ˜¤Ô%à$&ˆNØ"$ˆLä# FÓ+ò -‘��QÜ˜a¤Õ%Ø"×)Ñ)¨!Ô,Ø ×'Ñ'¨Õ,ð-ñ
 Ü2¸ÔH�àŸ™ Ó)�ÙØ&+�F˜7‘OØ+=×+MÑ+MØ!Ø!%Ø(Ø 3ð	 ,Nó ,÷ &Ð"ð %7×$:Ñ$:¸7ÀBÓ$GÐ!ô 2;¸<Ó1Hò 	Ñ-�M :Ø$¤sÐ+<Ó'=Ó=Ø5FÀ}Ñ5U˜˜X™ zÑ2Ü,×2Ñ2ðBà&Ü ¨}Ñ =Ó>ÜÐ 1°-Ñ @ÓAõð	ð" ˆô !×(Ñ(Ø^Ü�V“ôð
 ˆðs"ùð>&ús3   ‚A8G?Á:G:Á;BG?ÄA"G?Å#G=Å$5G?ÆA!G?Ç=G?Úresponser   Úuser_api_key_dictr   c           
   ƒ   óz  K  — t        |d«      r|j                  st        j                  d«       |S g }g }t	        |j                  «      D ]Y  \  }}	t        |	d«      sŒt        |	j                  t        «      sŒ.|j                  |	j                  «       |j                  |«       Œ[ |�r|€d|i}n	d|vr||d<   d|vr| j                  |«      }
|
r|
|d<   t        |¬«      }t        |d«      r|j                  r|j                  |d<   |j                  ||d|¬	«      ƒ d{  –—† }|j                  d
g «      }t	        |«      D ]q  \  }}|t        |«      k  sŒ|j                  |   j                  }||   |j                  |   _        t        j                  d|t        |«      t        ||   «      «       Œs |S 7 Œ—­w)a¸  
        Process output response by applying guardrails to completion text.

        Args:
            response: Text completion response object
            guardrail_to_apply: The guardrail instance to apply
            litellm_logging_obj: Optional logging object
            user_api_key_dict: User API key metadata to pass to guardrails

        Returns:
            Modified response with guardrails applied to completion text
        Úchoicesz9OpenAI Text Completion: No choices in response to processÚtextNr3   Úlitellm_metadatar   r   r   r   zaOpenAI Text Completion: Applied guardrail to choice[%d] text. Original length: %d, New length: %d)Úhasattrr6   r   r   r$   r   r7   r    r%   Ú'transform_user_api_key_dict_to_metadatar   r   r!   r   r"   )r(   r3   r   r   r4   r   r+   Úchoice_indicesr-   ÚchoiceÚuser_metadatar   r)   r*   r/   Ú
choice_idxÚoriginal_texts                    r1   Úprocess_output_responsez3OpenAITextCompletionHandler.process_output_responsex   sÔ  è ø€ ô( �x Ô+°8×3CÒ3CÜ ×&Ñ&Ð'bÔcØˆOð !#ˆØ "ˆä$ X×%5Ñ%5Ó6ò 	+‰KˆC�Ü�v˜vÕ&¬:°f·k±kÄ3Õ+GØ×%Ñ% f§k¡kÔ2Ø×%Ñ% cÕ*ð	+ò ð Ð#Ø *¨HÐ5‘à \Ñ1Ø/7�L Ñ,ð "¨Ñ5Ø'+×'SÑ'SÐTeÓ'f�Ù Ø7D�LÐ!3Ñ4ä5¸NÔKˆFä�x Ô)¨h¯nªnØ"*§.¡.��w‘Ø.@×.PÑ.PØØ)Ø%Ø/ð	 /Qó /÷ )Ðð (:×'=Ñ'=¸gÀrÓ'JÐô .7°~Ó-Fò Ñ)�˜zØ ¤3Ð'8Ó#9Ó9Ø$,×$4Ñ$4°ZÑ$@×$EÑ$E�MØ8IÈ-Ñ8X�H×$Ñ$ ZÑ0Ô5ä(×.Ñ.ð>à"Ü˜MÓ*ÜÐ-¨mÑ<Ó=õðð ˆð-)ús&   ‚AF;ÁF;Á9B(F;Ä!F9Ä"5F;ÅA"F;)N)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Údictr   r2   r@   © ó    r1   r   r      s–   „ ñ
ð  ;?ñ	UàðUð .ðUð 8ð	Uð
 
óUðv ;?Ø(,Ø$(ñKà*ðKð .ðKð 8ð	Kð
  ™:ðKð ˜T‘kðKð 
ôKrG   r   N)rD   Ú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
   ÚLiteLLMLoggingObjr   r   rF   rG   r1   ú<module>rO      s5   ðñ÷ -Ñ ,å 1Ý XÝ 9áÝEÝWÝ:ôo /õ orG   