
    g                         d dl Z d dlmZmZ d dlmZ d dlZd dl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 d	lmZ  G d
 de      Z G d de
      Zy)    N)Optional	TypedDict)HTTPException)verbose_proxy_logger)CustomGuardraillog_guardrail_information)get_content_from_model_response)UserAPIKeyAuth)*add_guardrail_to_applied_guardrails_header)GuardrailEventHooksc                   6    e Zd ZU eed<   eed<   eed<   eed<   y)GuardrailsAIResponsecallIdrawLlmOutputvalidatedOutputvalidationPassedN)__name__
__module____qualname__str__annotations__bool     k/var/www/openai/venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/guardrails_ai.pyr   r      s    Kr   r   c                   \     e Zd Z	 d
dedee   f fdZdedefdZedede	fd	       Z
 xZS )GuardrailsAI
guard_nameapi_basec                     |t        d      |xs d| _        || _        || _        t        j
                  g}t        |   dd|i| y )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(   zGuardrailsAI.__init__%   s`     s  '/&G2G#(2%%!4!>!> ?O/DOOr   
llm_outputrequest_datac           	        K   ddl m} d|i| j                  |      }t        j                  |      }t
        j                  j                  t         || j                        j                  d| j                   d            |ddi	       d {   }t        j                  d
|       t        di |j                         }|j                  d      du rt!        dd|d      |S 7 Xw)Nr   )URL	llmOutput)r-   z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   )httpxr/   )get_guardrail_dynamic_request_body_paramsjsondumpslitellmmodule_level_aclientpostr   r#   joinr$   r   debugr   getr   )r)   r,   r-   r/   r2   
_json_dataresponse_json_responses           r   make_guardrails_ai_api_requestz+GuardrailsAI.make_guardrails_ai_api_request6   s     
<<,<W
 ZZ%
 55::D//055d;;<IF
  2 ; 

 

 	""#?J-@@01U:8.<  +

s   BC,C*AC,r2   user_api_key_dictc                 ,  K   t         j                  }| j                  ||      duryt        |t        j
                        syt        |      }|@t        |      dkD  r2| j                  ||       d{    t        || j                         y7 w)za
        Runs on response from LLM API call

        It can be used to reject a response
        )r2   
event_typeTNr   )r,   r-   )r-   guardrail_name)r   r&   should_run_guardrail
isinstancer<   ModelResponser	   lenrE   r   rI   )r)   r2   rF   rC   rH   response_strs         r   async_post_call_success_hookz)GuardrailsAI.async_post_call_success_hookU   s      +>*G*G
$$$:$FdR(G$9$9:;HE#L(9A(=55'd 6    7!$2E2E 	s   A3B5B6B)N)r   r   r   r   r   r(   dictrE   r   r
   rO   __classcell__)r+   s   @r   r   r   $   s`     #'PP 3-P"s RV >  * r   r   )r:   typingr   r   fastapir   r<   litellm._loggingr   %litellm.integrations.custom_guardrailr   r   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>rZ      sI     & !  1 0 99 N? Nr   