Ë
    tPêj¾+  ã                   óÊ   — d dl m 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
 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mZmZ d dlmZmZ erd dlmZ  G d„ de
«      Zy)é    )Údatetime)ÚTYPE_CHECKINGÚFinal)ÚHTTPExceptionN)Úverbose_proxy_logger)ÚCustomGuardrail)Úget_async_httpx_clientÚhttpxSpecialProvider)ÚUserAPIKeyAuth)Úget_secret_str)ÚGuardrailEventHooks)ÚJavelinGuardInputÚJavelinGuardRequestÚJavelinGuardResponse)ÚCallTypesLiteralÚGuardrailStatus)ÚGuardrailConfigModelc                   ó  ‡ — e Zd Zedee   fd„«       Z	 	 	 	 	 	 	 	 	 ddedz  dedz  dedededz  d	ed
e	dz  de	dz  dedz  fˆ fd„Z
dededefd„Zdedej                   de	dedeez  e	z  dz  f
d„Zeded   dz  fd„«       Zˆ xZS )ÚJavelinGuardrailÚreturnc                 ó$   — t         j                  gS )N)r   Úpre_call)Úclss    ú}/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/javelin/javelin.pyÚget_supported_event_hooksz*JavelinGuardrail.get_supported_event_hooks   s   € ô  ×(Ñ(ð
ð 	
ó    NÚapi_keyÚapi_baseÚ
default_onÚguardrail_nameÚjavelin_guard_nameÚapi_versionÚmetadataÚconfigÚapplicationc
                 ó  •— d|› d|› d|› d� t        t        j                  ¬«      | _        |xs t	        d«      | _        |xs t	        d«      xs d| _        || _        || _        |xs || _	        || _
        || _        || _        |	| _        t        j                  d	| j                  | j                  | j                  | j                  «       |
j!                  d
t#        | j%                  «       «      «       t'        ‰| �P  d||dœ|
¤Ž y )NzE
        Initialize the JavelinGuardrail class.

        This calls: ú/ú/guardrail/ac  /apply

        Args:
            api_key: str = None,
            api_base: str = None,
            default_on: bool = True,
            api_version: str = "v1",
            guardrail_name: str = "trustsafety",
            metadata: Optional[Dict] = None,
            config: Optional[Dict] = None,
            application: Optional[str] = None,
        )Úllm_providerÚJAVELIN_API_KEYÚJAVELIN_API_BASEzhttps://api-dev.javelin.liveziJavelin Guardrail: Initialized with guardrail_name=%s, javelin_guard_name=%s, api_base=%s, api_version=%sÚsupported_event_hooks)r    r   © )r	   r
   ÚGuardrailCallbackÚasync_handlerr   Újavelin_api_keyr   r"   r    r!   r   r#   r$   r%   r   ÚdebugÚ
setdefaultÚlistr   ÚsuperÚ__init__)Úselfr   r   r   r    r!   r"   r#   r$   r%   ÚkwargsÚ	__class__s              €r   r5   zJavelinGuardrail.__init__"   s  ø€ ðð �J˜a ˜}¨K¸Ð7Gð H	ñ	ô  4ÔAU×AgÑAgÔhˆÔØ&ÒK¬.Ð9JÓ*KˆÔØ Òh¤NÐ3EÓ$FÒhÐJhˆŒØ&ˆÔØ,ˆÔØ"4Ò"F¸ˆÔØ$ˆŒØ ˆŒØˆŒØ&ˆÔÜ×"Ñ"ØwØ×ÑØ×#Ñ#Ø�M‰MØ×Ñô	
ð 	×ÑÐ1´4¸×8VÑ8VÓ8XÓ3YÔZÜ‰ÑÐX¨À:ÑXÐQWÓXr   ÚrequestÚ
event_typec              ƒ   ó¾  K  — t        j                  «       }|j                  d«      €| j                  �i |¥d| j                  i¥}d| j                  i}| j
                  r| j
                  |d<   d}d}d}	 t        j                  d|«       | j                  › d| j                  › d	| j                  › d
�}t        j                  d|«       | j                  j                  ||t        |«      ¬«      ƒ d{  –—† }	t        j                  d|	j                  «       «       |	j                  «       }
d|
vrg |
d<   d|
j                  dg «      i}d}|i }|dk(  r|�t        |«      }n|}|j                  di «      |j                  di «      |j                  di «      dœ}d|v r4|d   r/|d   j                  «       D ��ci c]  \  }}|dk7  r||“Œ c}}|d<   | j!                  ||||j#                  «       t        j                  «       j#                  «       t        j                  «       |z
  j%                  «       |¬«       S 7 �ŒHc c}}w # t&        $ �r}d}t)        |«      }dg icY d}~i }|dk(  r|�t        |«      }n|}|j                  di «      |j                  di «      |j                  di «      dœ}d|v r;|d   r6|d   j                  «       D ��ci c]  \  }}|dk7  r||“Œ nc c}}w c}}|d<   | j!                  ||||j#                  «       t        j                  «       j#                  «       t        j                  «       |z
  j%                  «       |¬«       S d}~ww xY w# i }|dk(  r|�t        |«      }n|}|j                  di «      |j                  di «      |j                  di «      dœ}d|v r;|d   r6|d   j                  «       D ��ci c]  \  }}|dk7  r||“Œ nc c}}w c}}|d<   | j!                  ||||j#                  «       t        j                  «       j#                  «       t        j                  «       |z
  j%                  «       |¬«       w xY w­w)z-
        Call the Javelin guard API.
        r#   Nzx-javelin-apikeyzx-javelin-applicationÚguardrail_failed_to_respondÚ z=Javelin Guardrail: Calling Javelin guard API with request: %sr'   r(   z/applyz"Javelin Guardrail: Calling URL: %s)ÚurlÚheadersÚjsonz1Javelin Guardrail: Javelin guard API response: %sÚassessmentsÚsuccessÚinputr$   ©rC   r#   r$   Ú&standard_logging_guardrail_information)Úguardrail_json_responseÚrequest_dataÚguardrail_statusÚ
start_timeÚend_timeÚdurationr:   )r   ÚnowÚgetr#   r0   r%   r   r1   r   r"   r!   r/   ÚpostÚdictr@   ÚitemsÚ:add_standard_logging_guardrail_information_to_request_dataÚ	timestampÚtotal_secondsÚ	ExceptionÚstr)r6   r9   r:   rI   r?   ÚstatusÚjavelin_responseÚexception_strr>   ÚresponseÚresponse_datarF   Úclean_request_dataÚkÚvÚes                   r   Úcall_javelin_guardz#JavelinGuardrail.call_javelin_guardT   s¯  è ø€ ô %ŸL™L›Nˆ
à�;‰;�zÓ"Ð*¨t¯}©}Ð/HØ<˜Ð< *¨d¯m©mÑ<ˆGà × 4Ñ 4ð
ˆð ×ÒØ/3×/?Ñ/?ˆGÐ+Ñ,à"?ˆØ8<ÐØˆð6	Ü ×&Ñ&Ð'fÐhoÔpØ ŸM™M˜?¨!¨D×,<Ñ,<Ð+=¸[È×I`ÑI`ÐHaÐagÐhˆCÜ ×&Ñ&Ð'KÈSÔQØ$(×$6Ñ$6×$;Ñ$;ØØÜ˜'“]ð %<ó %÷ ˆHô
 !×&Ñ&Ð'ZÐ\d×\iÑ\iÓ\kÔlØ#+§=¡=£?ˆMà MÑ1Ø/1�˜mÑ,à -¨}×/@Ñ/@ÀÐPRÓ/SÐTÐØˆFØ#ð LNÐ#Ø˜Ò"Ð'7Ð'CÜ*.Ð/?Ó*@Ñ'à*7Ð'ð !Ÿ™ W¨bÓ1Ø#ŸK™K¨
°BÓ7Ø!Ÿ+™+ h°Ó3ñ)Ðð Ð/Ñ/Ð4FÀzÒ4Rð !3°:Ñ >× DÑ DÓ F÷2á˜˜1ØÐDÒDð �q‘Dó2Ð" :Ñ.ð ×KÑKØ(?Ø/Ø!'Ø%×/Ñ/Ó1Ü!Ÿ™›×1Ñ1Ó3Ü"Ÿ,™,›.¨:Ñ5×DÑDÓFØ%ð Lõ ðUûóH2øô- ó 	'Ø2ˆFÜ ›FˆMØ! 2Ð&Ô&ð
 LNÐ#Ø˜Ò"Ð'7Ð'CÜ*.Ð/?Ó*@Ñ'à*7Ð'ð !Ÿ™ W¨bÓ1Ø#ŸK™K¨
°BÓ7Ø!Ÿ+™+ h°Ó3ñ)Ðð Ð/Ñ/Ð4FÀzÒ4Rð !3°:Ñ >× DÑ DÓ F÷2á˜˜1ØÐDÒDð �q‘Dñ2ùö 2Ð" :Ñ.ð ×KÑKØ(?Ø/Ø!'Ø%×/Ñ/Ó1Ü!Ÿ™›×1Ñ1Ó3Ü"Ÿ,™,›.¨:Ñ5×DÑDÓFØ%ð Lõ ûð9	'ûð LNÐ#Ø˜Ò"Ð'7Ð'CÜ*.Ð/?Ó*@Ñ'à*7Ð'ð !Ÿ™ W¨bÓ1Ø#ŸK™K¨
°BÓ7Ø!Ÿ+™+ h°Ó3ñ)Ðð Ð/Ñ/Ð4FÀzÒ4Rð !3°:Ñ >× DÑ DÓ F÷2á˜˜1ØÐDÒDð �q‘Dñ2ùö 2Ð" :Ñ.ð ×KÑKØ(?Ø/Ø!'Ø%×/Ñ/Ó1Ü!Ÿ™›×1Ñ1Ó3Ü"Ÿ,™,›.¨:Ñ5×DÑDÓFØ%ð Lõ üsŒ   ‚A3QÁ6A?I Ã5H=Ã6AI ÅA,QÆ:I ÇA1QÈ=I É QÉ
M ÉMÉ M É!M# É%A,QËK$Ë#A8QÍM Í M# Í#A-QÏO#
Ï"A8QÑQÚuser_api_key_dictÚcacheÚdataÚ	call_typec              ƒ   ó  K  — ddl m} ddlm} t	        j
                  d«       t	        j
                  d|«       t        j                  }| j                  ||¬«      durt	        j
                  d«       |S d	|vr|S  ||d	   «      }|€|S i }	| j                  r3| j                  j                  «       D �
�ci c]  \  }
}|
dk7  sŒ|
|“Œ }	}
}t        t        |¬«      |	| j                  r| j                  ni ¬«      }| j                  |t        j                  ¬«      ƒ d
{  –—† }|j                  dg «      }d}d}t	        j
                  d|«       |D ]Æ  }t	        j
                  d|«       |j                  «       D ]—  \  }}t	        j
                  d||«       |j                  d«      du sŒ1d}t	        j
                  d| j                   |«       |j                  di «      }t#        |j                  dd«      «      }t	        j
                  d|«        n |sŒÆ n t	        j
                  d||«       |r9|sd| j                   › d�}t	        j
                  d|«       t%        dd||d œ¬!«      ‚ ||| j                   ¬"«       |S c c}}
w 7 �Œj­w)#z:
        Pre-call hook for the Javelin guardrail.
        r   )Úget_last_user_message)Ú*add_guardrail_to_applied_guardrails_headerz Javelin Guardrail: pre_call_hookz#Javelin Guardrail: Request data: %s)rb   r:   Tz@Javelin Guardrail: not running guardrail. Guardrail is disabled.ÚmessagesNrE   )ÚtextrD   )r9   r:   rA   r=   Fz,Javelin Guardrail: Full Javelin response: %sz,Javelin Guardrail: Processing assessment: %sz;Javelin Guardrail: Processing assessment_type: %s, data: %sÚrequest_rejectzRJavelin Guardrail: Request rejected by Javelin guardrail: %s (assessment_type: %s)ÚresultsÚreject_promptz0Javelin Guardrail: Extracted reject_prompt: '%s'z7Javelin Guardrail: should_reject=%s, reject_prompt='%s'z-Request blocked by Javelin guardrails due to z violation.z<Javelin Guardrail: Blocking request with reject_prompt: '%s'iô  zViolated guardrail policy)ÚerrorÚjavelin_guardrail_responserk   )Ústatus_codeÚdetail)rG   r    )Ú8litellm.litellm_core_utils.prompt_templates.common_utilsre   Ú)litellm.proxy.common_utils.callback_utilsrf   r   r1   r   r   Úshould_run_guardrailr#   rP   r   r   r$   r_   rM   r    rU   r   )r6   r`   ra   rb   rc   re   rf   r:   rh   Úclean_metadatar\   r]   Újavelin_guard_requestrW   rA   rk   Úshould_rejectÚ
assessmentÚassessment_typeÚassessment_datarj   s                        r   Úasync_pre_call_hookz$JavelinGuardrail.async_pre_call_hook¢   s³  è ø€ õ	
õ	
ô 	×"Ñ"Ð#EÔFÜ×"Ñ"Ð#HÈ$ÔOä1D×1MÑ1Mˆ
Ø×$Ñ$¨$¸:Ð$ÓFÈdÑRÜ ×&Ñ&Ð'iÔjØˆKà˜TÑ!ØˆKá+¨D°Ñ,<Ó=ˆØˆ<ØˆKàˆØ�=Š=Ø/3¯}©}×/BÑ/BÓ/D×v¡t q¨!ÈÐMuÓHu˜a ™dÐvˆNÑvä':Ü#¨Ô.Ø#Ø"&§+¢+�4—;’;°2ô(
Ðð )-×(?Ñ(?Ø)Ô6I×6RÑ6Rð )@ó )
÷ #
Ðð .×1Ñ1°-ÀÓDˆØˆØˆô 	×"Ñ"Ð#QÐScÔdà%ò 	ˆJÜ ×&Ñ&Ð'UÐWaÔbØ4>×4DÑ4DÓ4Fò Ñ0� Ü$×*Ñ*ØQØ#Ø#ôð #×&Ñ&Ð'7Ó8¸DÒ@Ø$(�MÜ(×.Ñ.ØlØ×+Ñ+Ø'ôð .×1Ñ1°)¸RÓ@�GÜ$'¨¯©°OÀRÓ(HÓ$I�Mä(×.Ñ.ØJØ%ôñ ð-ò. Ùð5	ô8 	×"Ñ"ØEØØô	
ñ Ù Ø"OÐPT×PcÑPcÐOdÐdoÐ p�ä ×&Ñ&ØNØôô  Øà8Ø2BØ%2ñôð ñ 	3ÀÐUY×UhÑUhÕiàˆùóU wð#
ûs4   ‚B4JÂ6JÃJÃ	AJÄ J
Ä!BJÆ-A+JÈA2Jr   c                  ó   — ddl m}  | S )zA
        Get the config model for the Javelin guardrail.
        r   ©ÚJavelinGuardrailConfigModel)Ú6litellm.types.proxy.guardrails.guardrail_hooks.javelinr|   r{   s    r   Úget_config_modelz!JavelinGuardrail.get_config_model  s   € õ
	
ð +Ð*r   )	NNTÚtrustsafetyNÚv1NNN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr3   r   r   rU   ÚboolrO   r5   r   r   r_   r   ÚlitellmÚ	DualCacher   rT   ry   ÚstaticmethodÚtyper~   Ú__classcell__)r8   s   @r   r   r      s[  ø„ Øð
¨$Ð/BÑ*Cò 
ó ð
ð #Ø#ØØ+Ø)-ØØ $Ø"Ø"&ñ0Yà�t‘ð0Yð ˜‘*ð0Yð ð	0Yð
 ð0Yð   $™Jð0Yð ð0Yð ˜‘+ð0Yð �t‘ð0Yð ˜4‘Zõ0YðdLà$ðLð (ðLð 
ó	Lð\là)ðlð × Ñ ðlð ð	lð
 $ðlð 
�S‰˜4Ñ	 $Ñ	&ólð\ ð+˜dÐ#9Ñ:¸TÑAò +ó ô+r   r   )r   Útypingr   r   Úfastapir   r†   Úlitellm._loggingr   Ú%litellm.integrations.custom_guardrailr   Ú&litellm.llms.custom_httpx.http_handlerr	   r
   Úlitellm.proxy._typesr   Úlitellm.secret_managers.mainr   Úlitellm.types.guardrailsr   r}   r   r   r   Úlitellm.types.utilsr   r   Ú3litellm.types.proxy.guardrails.guardrail_hooks.baser   r   r-   r   r   ú<module>r•      sK   ðÝ ß 'å !ã Ý 1Ý A÷õ 0Ý 7Ý 8÷ñ ÷
 BáÝXô~+�õ ~+r   