
    ^h                         S SK r S SKJrJr  S SKJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr   " S
 S\5      r " S S\
5      rg)    N)Optional	TypedDict)HTTPException)verbose_proxy_logger)CustomGuardrail)get_content_from_model_response)UserAPIKeyAuth)*add_guardrail_to_applied_guardrails_header)GuardrailEventHooksc                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)GuardrailsAIResponse   callIdrawLlmOutputvalidatedOutputvalidationPassed N)__name__
__module____qualname____firstlineno__str__annotations__bool__static_attributes__r       p/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/guardrails/guardrail_hooks/guardrails_ai.pyr   r      s    Kr   r   c                   `   ^  \ rS rSr SS\S\\   4U 4S jjjrS\4S jrS\S\	4S	 jr
S
rU =r$ )GuardrailsAI!   
guard_nameapi_basec                    > Uc  [        S5      eU=(       d    SU l        Xl        X0l        [        R
                  /n[        TU ]  " SSU0UD6  g )NzaGuardrailsAIException - Please pass the Guardrails AI guard name via 'litellm_params::guard_name'zhttp://0.0.0.0:8000supported_event_hooksr   )	Exceptionguardrails_ai_api_baseguardrails_ai_guard_nameoptional_paramsr   	post_callsuper__init__)selfr!   r"   kwargsr$   	__class__s        r   r+   GuardrailsAI.__init__"   s\     s  '/&G2G#(2%%!4!>!> ?O/DOOr   
llm_outputc           	        #    SSK Jn  SU0n[        R                  " U5      n[        R
                  R                  [        U" U R                  5      R                  SU R                   S35      5      USS0S9I S h  vN n[        R                  " S	U5        [        S0 UR                  5       D6nUR                  S
5      SL a  [        SSUS.S9eU$  NW7f)Nr   )URL	llmOutputzguards/z	/validatezContent-Typezapplication/json)urldataheaderszguardrails_ai response: %sr   Fi  zViolated guardrail policy)errorguardrails_ai_response)status_codedetailr   )httpxr2   jsondumpslitellmmodule_level_aclientpostr   r&   joinr'   r   debugr   getr   )r,   r0   r2   r5   
_json_dataresponse_json_responses          r   make_guardrails_ai_api_request+GuardrailsAI.make_guardrails_ai_api_request3   s     Z(ZZ%
 55::D//055d;;<IF
  2 ; 

 

 	""#?J-@@01U:8.<  +

s   A;C=C>ACr5   user_api_key_dictc                 $  #    [         R                  nU R                  XS9SLa  g[        U[        R
                  5      (       d  g[        U5      nUb9  [        U5      S:  a*  U R                  US9I Sh  vN   [        XR                  S9  g N7f)zI
Runs on response from LLM API call

It can be used to reject a response
)r5   
event_typeTNr   )r0   )request_dataguardrail_name)r   r)   should_run_guardrail
isinstancer>   ModelResponser   lenrG   r
   rM   )r,   r5   rI   rE   rK   response_strs         r   async_post_call_success_hook)GuardrailsAI.async_post_call_success_hookO   s      +>*G*G
$$$$FdR(G$9$9::;HE#L(9A(=555NNN6!2E2E 	 Os   A3B5B6B)r&   r'   r(   )N)r   r   r   r   r   r   r+   rG   dictr	   rS   r   __classcell__)r.   s   @r   r   r   !   sT     #'PP 3-P P"s 8 * r   r   )r<   typingr   r   fastapir   r>   litellm._loggingr   %litellm.integrations.custom_guardrailr   8litellm.litellm_core_utils.prompt_templates.common_utilsr   litellm.proxy._typesr	   )litellm.proxy.common_utils.callback_utilsr
   litellm.types.guardrailsr   r   r   r   r   r   <module>r_      sG     & !  1 A 0 99 H? Hr   