Ë
    tPêj�B  ã                   ó  — U d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZmZ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 d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/ e	rd dl0m1Z1  G d„ de2«      Z3 G d„ de«      Z4 G d„ de«      Z5 G d„ de«      Z6 G d„ de«      Z7 G d„ de«      Z8 G d„ ded¬ «      Z9 G d!„ d"ed¬ «      Z:eee;e<f   z  e;z  e=z  Z>ee?d#<    G d$„ d%e«      Z@y)&é    N)ÚAsyncGeneratorÚAsyncIteratorÚMappingÚSequence)ÚTYPE_CHECKINGÚFinalÚ	TypeAlias)Ú	BaseModel)ÚNotRequiredÚReadOnlyÚ	TypedDict)ÚClientConnectionÚconnect)Ú	DualCache)Úverbose_proxy_logger)Úversion)ÚCustomGuardrail)Úget_async_httpx_clientÚhttpxSpecialProvider)ÚProxyExceptionÚUserAPIKeyAuth)Úapply_redacted_messages_backÚbuild_inspection_messagesÚhas_non_string_content)ÚGuardrailEventHooks)ÚCallTypesLiteralÚChoicesÚLLMResponseTypesÚModelResponseÚModelResponseStream)ÚGuardrailConfigModelc                   ó   — e Zd Zy)ÚAimGuardrailMissingSecretsN)Ú__name__Ú
__module__Ú__qualname__© ó    úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/guardrails/guardrail_hooks/aim/aim.pyr#   r#   ,   s   „ Ør(   r#   c                   ó8   — e Zd ZU dZeee      ed<   ee   ed<   y)ÚAimRequiredActionzDThe ``required_action`` block of an Aim ``/fw/v1/analyze`` response.Úaction_typeÚdetection_messageN)r$   r%   r&   Ú__doc__r   r   ÚstrÚ__annotations__r'   r(   r)   r+   r+   0   s   … ÙNà˜+ cÑ*Ñ+Ó+Ø ‘}Ô$r(   r+   c                   ó,   — e Zd ZU dZeeeef      ed<   y)ÚAimAnalysisResultzDThe ``analysis_result`` block of an Aim ``/fw/v1/analyze`` response.Úpolicy_drill_downN)	r$   r%   r&   r.   r   r   r/   Úobjectr0   r'   r(   r)   r2   r2   7   s   … ÙNà ¨¨V¨Ñ 4Ñ5Ô5r(   r2   c                   ó2   — e Zd ZU dZee   ed<   ee   ed<   y)ÚAimRedactedMessagez;One entry of Aim's ``redacted_chat.all_redacted_messages``.ÚroleÚcontentN©r$   r%   r&   r.   r   r/   r0   r'   r(   r)   r6   r6   =   s   … ÙEà
�3‰-ÓØ�c‰]Ôr(   r6   c                   ó(   — e Zd ZU dZeee      ed<   y)ÚAimRedactedChatzBThe ``redacted_chat`` block of an Aim ``/fw/v1/analyze`` response.Úall_redacted_messagesN)r$   r%   r&   r.   r   r   r6   r0   r'   r(   r)   r;   r;   D   s   … ÙLà# HÐ-?Ñ$@ÑAÔAr(   r;   c                   óH   — e Zd ZU dZee   ed<   ee   ed<   eee	      ed<   y)ÚAimAnalyzeResponsez/Body returned by Aim's ``POST /fw/v1/analyze``.Úrequired_actionÚanalysis_resultÚredacted_chatN)
r$   r%   r&   r.   r   r+   r0   r2   r   r;   r'   r(   r)   r>   r>   J   s-   … Ù9àÐ/Ñ0Ó0ØÐ/Ñ0Ó0Ø˜K¨Ñ8Ñ9Ô9r(   r>   c                   ó2   — e Zd ZU dZee   ed<   ee   ed<   y)ÚAimOutputGuardrailResultz4Outcome of inspecting one model completion with Aim.r-   Úredacted_outputNr9   r'   r(   r)   rC   rC   R   s   … Ù>à ‘}Ó$Ø˜c‘]Ô"r(   rC   F)Útotalc                   óL   — e Zd ZU dZeeeef      ed<   ee	   ed<   ee   ed<   y)ÚAimStreamMessagez@One frame of Aim's ``/fw/v1/analyze/stream`` websocket protocol.Úverified_chunkÚdoneÚblocking_messageN)
r$   r%   r&   r.   r   r   r/   r4   r0   Úboolr'   r(   r)   rG   rG   Y   s-   … ÙJà˜W S¨& [Ñ1Ñ2Ó2Ø
�4‰.ÓØ˜s‘mÔ#r(   rG   ÚAimStreamChunkc                   ó,  ‡ — e Zd Zedee   fd„«       Zd)dedz  dedz  fˆ fd„Zde	de
d	ed
edeez  ez  dz  f
d„Zd	ede	d
edeez  ez  dz  fd„Zd	edededz  defd„Zed	edeeeef      fd„«       Zeddœdededz  defd„«       Zdededdfd„Zded	edefd„Zdededededz  dedz  f
d„Zdedededz  fd„Zdededz  dedz  dedz  fd „Zd	ede	d!edefd"„Zde	d!e e!   dede"e#df   fd#„Z$d$e%d%e e!   ddfd&„Z&ede'd'   dz  fd(„«       Z(ˆ xZ)S )*ÚAimGuardrailÚreturnc                 ó`   — t         j                  t         j                  t         j                  gS )N)r   Úpre_callÚduring_callÚ	post_call)Úclss    r)   Úget_supported_event_hooksz&AimGuardrail.get_supported_event_hookse   s)   € ô  ×(Ñ(Ü×+Ñ+Ü×)Ñ)ð
ð 	
r(   NÚapi_keyÚapi_basec                 ó>  •— |j                  dt        | j                  «       «      «       |j                  dd «      }t	        t
        j                  |�d|ind ¬«      | _        |xs t        j                  j                  d«      | _        | j                  sd}t        |«      ‚|xs# t        j                  j                  d«      xs d| _        | j                  j                  dd	«      j                  d
d«      | _        g | _        d| _        t%        ‰| �L  di |¤Ž y )NÚsupported_event_hooksÚ
ssl_verify)Úllm_providerÚparamsÚAIM_API_KEYz‡Couldn't get Aim api key, either set the `AIM_API_KEY` in the environment or pass it as a parameter to the guardrail in the config fileÚAIM_API_BASEzhttps://api.aim.securityzhttp://zws://zhttps://zwss://éd   r'   )Ú
setdefaultÚlistrU   Úpopr   r   ÚGuardrailCallbackÚasync_handlerÚosÚenvironÚgetrV   r#   rW   ÚreplaceÚws_api_baseÚdlp_entitiesÚ_max_dlp_entitiesÚsuperÚ__init__)ÚselfrV   rW   ÚkwargsrZ   ÚmsgÚ	__class__s         €r)   rm   zAimGuardrail.__init__m   s÷   ø€ Ø×ÑÐ1´4¸×8VÑ8VÓ8XÓ3YÔZØ"ŸJ™J |°TÓ:ˆ
Ü3Ü-×?Ñ?Ø1;Ð1G�L *Ñ-ÈTô
ˆÔð Ò?¤"§*¡*§.¡.°Ó"?ˆŒØ�|Š|ðMð ô -¨SÓ1Ð1Ø Ò`¤B§J¡J§N¡N°>Ó$BÒ`ÐF`ˆŒØŸ=™=×0Ñ0°¸GÓD×LÑLÈZÐYaÓbˆÔØ(*ˆÔØ!$ˆÔÜ‰ÑÑ"˜6Ó"r(   Úuser_api_key_dictÚcacheÚdataÚ	call_typec              ƒ   ó„   K  — t        j                  d«       | j                  |d|j                  ¬«      ƒ d {  –—† S 7 Œ­w)NzInside AIM Pre-Call HookrQ   ©ÚhookÚ	key_alias©r   ÚdebugÚcall_aim_guardrailry   )rn   rr   rs   rt   ru   s        r)   Úasync_pre_call_hookz AimGuardrail.async_pre_call_hook�   s<   è ø€ ô 	×"Ñ"Ð#=Ô>Ø×,Ñ,¨T¸
ÐN_×NiÑNiÐ,Ój×jÐjÐjús   ‚7A ¹>ºA c              ƒ   óˆ   K  — t        j                  d«       | j                  |d|j                  ¬«      ƒ d {  –—†  |S 7 Œ­w)NzInside AIM Moderation HookÚ
moderationrw   rz   )rn   rt   rr   ru   s       r)   Úasync_moderation_hookz"AimGuardrail.async_moderation_hook‹   sD   è ø€ ô 	×"Ñ"Ð#?Ô@à×%Ñ% d°ÐIZ×IdÑIdÐ%Óe×eÐeØˆð 	fús   ‚7A¹A ºArx   ry   c              ƒ   óÒ  K  — |j                  di «      j                  di «      j                  d«      }|j                  d«      }| j                  ||||¬«      }| j                  j                  | j                  › d�|d| j                  |«      i¬«      ƒ d {  –—† }|j                  «        |j                  «       }|j                  d	«      }	|	xr |	j                  d
d «      }
|
€t        j                  d«       |S |
dk(  rt        j                  d«       |S |
dk(  r| j                  |d   |	«       |S |
dk(  r| j                  ||«      S t        j                  d|
«       |S 7 ŒË­w)NÚmetadataÚheadersúx-aim-user-emailÚlitellm_call_id©rx   ry   Ú
user_emailr…   ú/fw/v1/analyzeÚmessages©rƒ   Újsonr?   r,   z!Aim: No required action specifiedÚmonitor_actionzAim: monitor actionÚblock_actionr@   Úanonymize_actionzAim: %s action)rg   Ú_build_aim_headersrd   ÚpostrW   Ú_build_aim_inspection_messagesÚraise_for_statusr‹   r   r{   ÚinfoÚ_handle_block_actionÚ_anonymize_requestÚerror)rn   rt   rx   ry   r‡   Úcall_idrƒ   ÚresponseÚresr?   r,   s              r)   r|   zAimGuardrail.call_aim_guardrail–   s~  è ø€ Ø ŸH™H Z°Ó4×8Ñ8¸ÀBÓG×KÑKÐL^Ó_ˆ
ØŸ™Ð"3Ó4ˆØ×0Ñ0ØØØ!Ø#ð	 1ó 
ˆð !%× 2Ñ 2× 7Ñ 7Ø�}‰}ˆo˜^Ð,ØØ˜d×AÑAÀ$ÓGÐHð !8ó !
÷ 
ˆð
 	×!Ñ!Ô#Ø)1¯©«ˆØ!$§¡Ð):Ó!;ˆØ,ÒY°×1DÑ1DÀ]ÐTXÓ1YˆØÐÜ ×&Ñ&Ð'JÔKØˆKØÐ*Ò*Ü ×%Ñ%Ð&;Ô<ð ˆð ˜NÒ*Ø×%Ñ% cÐ*;Ñ&<¸oÔNð
 ˆð	 Ð.Ò.Ø×*Ñ*¨3°Ó5Ð5ä ×&Ñ&Ð'7¸ÔEØˆð)
ús   ‚BE'ÂE%ÂCE'c                 ód   — h d£}t        | «      D �cg c]  }|d   |vri |¥ddi¥n|‘Œ c}S c c}w )a+  AIM validates against the OpenAI chat schema. Bare ``role: "tool"``
        without ``tool_call_id`` and bare ``role: "function"`` without ``name``
        are rejected; the flatten drops those fields, so any role outside
        ``{system, user, assistant}`` collapses to ``user`` for the AIM POST.>   ÚuserÚsystemÚ	assistantr7   r›   )r   )rt   Ú
safe_rolesÚms      r)   r‘   z+AimGuardrail._build_aim_inspection_messagesµ   sA   € ò <ˆ
ÜUnÐosÓUtÖuÐPQ¨¨6©¸*Ñ)DÐ%�1Ð%�f˜fÒ%È!ÑKÒuÐuùÒus   ’-©Úopenai_codeÚmessager¡   c                ó"   — t        | dd d|¬«      S )NÚinvalid_request_errori�  )r¢   ÚtypeÚparamÚcoder¡   )r   )r¢   r¡   s     r)   Ú
_rejectionzAimGuardrail._rejection¾   s   € äØØ(ØØØ#ô
ð 	
r(   r@   r?   c                 óÊ   — |j                  dd «      }t        j                  dj                  t	        |d   j                  «       «      ¬«      «       | j                  |d¬«      ‚)Nr-   z4Aim: Violation detected enabled policies: {policies}r3   )ÚpoliciesÚcontent_policy_violationr    )rg   r   r“   Úformatra   Úkeysr¨   ©rn   r@   r?   r-   s       r)   r”   z!AimGuardrail._handle_block_actionÈ   sf   € Ø#2×#6Ñ#6Ð7JÈDÓ#QÐÜ×!Ñ!ØB×IÑIÜ˜oÐ.AÑB×GÑGÓIÓJð Jó ô	
ð
 �o‰oÐ/Ð=WˆoÓXÐXr(   r™   c                 óê   — t        j                  d«       |j                  d«      }|s|S t        |«      r| j	                  d«      ‚|d   D �cg c]  }|d   |d   dœ‘Œ }}t        ||«       |S c c}w )NzAim: anonymize actionrA   z¾Aim: anonymize action requested for multimodal input but mask-in-place would drop non-text parts. Send the request with plain string content to use anonymize, or rely on block-mode policies.r<   r7   r8   ©r7   r8   )r   r“   rg   r   r¨   r   )rn   r™   rt   rA   r¢   Úredacted_messagess         r)   r•   zAimGuardrail._anonymize_requestÑ   s—   € Ü×!Ñ!Ð"9Ô:Ø"Ÿw™w Ó7ˆÙØˆKô
 " $Ô'Ø—/‘/ð2óð ð )Ð)@ÑAö$
ð
 ð   ™Ø" 9Ñ-óð$
Ðð $
ô 	% TÐ+<Ô=Øˆùò$
s   ÁA0Úrequest_dataÚoutputc           	   ƒ   ól  K  — |j                  di «      j                  di «      j                  d«      }|j                  d«      }| j                  j                  | j                  › d�| j	                  ||||¬«      d| j                  |«      d|d	œgz   i¬
«      ƒ d {  –—† }|j                  «        |j                  «       }|j                  d«      }	|	xr |	j                  dd «      }
|
r|
dk(  r| j                  |d   |	«      S |j                  dd «      }|
r|
dk(  r|rd|d   d   d   iS d|iS 7 Œ“­w)Nr‚   rƒ   r„   r…   rˆ   r†   r‰   r�   r°   rŠ   r?   r,   r�   r@   rA   rŽ   rD   r<   éÿÿÿÿr8   )	rg   rd   r�   rW   r�   r‘   r’   r‹   Ú_handle_block_action_on_output)rn   r²   r³   rx   ry   r‡   r—   r˜   r™   r?   r,   rA   s               r)   Úcall_aim_guardrail_on_outputz)AimGuardrail.call_aim_guardrail_on_outputî   sd  è ø€ ð )×,Ñ,¨Z¸Ó<×@Ñ@ÀÈBÓO×SÑSÐTfÓgˆ
Ø%×)Ñ)Ð*;Ó<ˆØ $× 2Ñ 2× 7Ñ 7Ø�}‰}ˆo˜^Ð,Ø×+Ñ+ØØ#Ø%Ø 'ð	 ,ó ð ˜D×?Ñ?ÀÓMØ'°FÑ;Ð<ñ=ðð !8ó !
÷ 
ˆð 	×!Ñ!Ô#Ø)1¯©«ˆØ!$§¡Ð):Ó!;ˆØ,ÒY°×1DÑ1DÀ]ÐTXÓ1YˆÙ˜;¨.Ò8Ø×6Ñ6°sÐ;LÑ7MÈÓ_Ð_Ø"Ÿw™w ¸Ó=ˆá˜;Ð*<Ò<ÁØ% }Ð5LÑ'MÈbÑ'QÐR[Ñ'\Ð]Ð]Ø! 6Ð*Ð*ð/
ús   ‚BD4ÂD2ÂBD4c           	      ó®   — |j                  dd «      }t        j                  dj                  dt	        |d   j                  «       «      ¬«      «       d|iS )Nr-   z7Aim: detected: {detected}, enabled policies: {policies}Tr3   )Údetectedrª   )rg   r   r“   r¬   ra   r­   r®   s       r)   r¶   z+AimGuardrail._handle_block_action_on_output  sb   € ð $3×#6Ñ#6Ð7JÈDÓ#QÐÜ×!Ñ!ØE×LÑLØÜ˜oÐ.AÑB×GÑGÓIÓJð Mó ô	
ð $Ð%6Ð7Ð7r(   r‡   r…   c                ój   — d| j                   › �|t        dœ|rd|ini z  |rd|ini z  |rd|iz  S i z  S )zb
        A helper function to build the http headers that are required by AIM guardrails.
        zBearer )ÚAuthorizationzx-aim-litellm-hookzx-aim-litellm-versionzx-aim-call-idr„   zx-aim-gateway-key-alias)rV   Úlitellm_version)rn   rx   ry   r‡   r…   s        r)   r�   zAimGuardrail._build_aim_headers  sq   € ð $+¨4¯<©<¨.Ð!9à&*ä)8ññ 6E� Ñ1È"ñNñ 4>Ð" JÑ/À2ñ
Gñ  ð .¨yðñð	
ð$ ñ#ð	
r(   r˜   c              ƒ   ó  ‡ ‡‡K  — t        |t        «      r|j                  s|S |j                  D �cg c]  }t        |t        «      sŒ|‘Œ }}|s|S t	        j
                  ˆˆ ˆfd„|D «       ddiŽƒ d {  –—† }t        ||«      D ]t  \  }}t        |t        «      r|‚|r&|j                  d«      x}	r‰ j                  |	d¬«      ‚|sŒC|j                  d«      sŒU|j                  d«      |j                  _        Œv |S c c}w 7 ŒŽ­w)Nc              3   óŒ   •K  — | ];  }‰j                  ‰|j                  j                  xs d d‰j                  ¬«      –— Œ= y­w)Ú r³   rw   N)r·   r¢   r8   ry   )Ú.0Úchoicert   rn   rr   s     €€€r)   ú	<genexpr>z<AimGuardrail.async_post_call_success_hook.<locals>.<genexpr>L  sL   øè ø€ ò ð ð ×1Ñ1ØØ—N‘N×*Ñ*Ò0¨bØ!Ø/×9Ñ9ð	 2÷ ñùs   ƒAAÚreturn_exceptionsTr-   r«   r    rD   )Ú
isinstancer   Úchoicesr   ÚasyncioÚgatherÚzipÚBaseExceptionrg   r¨   r¢   r8   )
rn   rt   rr   r˜   ÚcÚchoices_to_inspectÚresultsrÁ   Úaim_output_guardrail_resultr-   s
   ```       r)   Úasync_post_call_success_hookz)AimGuardrail.async_post_call_success_hook9  s#  úè ø€ ô ˜8¤]Ô3¸×8HÒ8HØˆOð
 19×0@Ñ0@Ö$[¨1ÄJÈqÔRYÕDZ¢QÐ$[ÐÐ$[Ù!ØˆOô  'Ÿ~™~õð 1ôð 
ð #ñ 
÷ 
ˆô 47Ð7IÈ7Ó3Sò 	\Ñ/ˆFÐ/ÜÐ5´}ÔEØ1Ð1Ù*Ø%@×%DÑ%DÐEXÓ%YÐYÐ!ÐYà—o‘oØ%Ø :ð &ó ð ò +Ð/J×/NÑ/NÐO`Õ/aØ)D×)HÑ)HÐIZÓ)[�—‘Õ&ð	\ð ˆùò= %\ð
ús/   …-D²C?ÁC?Á)DÁ5DÁ6ADÃ	DÃ*Dc           	     ó<  K  — |j                  di «      j                  di «      j                  d«      }|j                  d«      }t        | j                  › d�| j                  d|j                  ||¬«      ¬«      4 ƒd {  –—† }t        j                  | j                  ||«      «      }	 t        j                  |j                  «       ƒ d {  –—† «      }|j                  d	«      x}	rt        j                  |	«      ­–— n||j                  «        |j                  d
«      r	 d d d «      ƒd {  –—†  y |j                  d«      x}
rddlm}  ||
«      ‚t!        j"                  d|«       	 d d d «      ƒd {  –—†  y ŒÔ7 Œþ7 Œ³7 ŒS7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nr‚   rƒ   r„   r…   z/fw/v1/analyze/streamr³   r†   )Úadditional_headersrH   rI   rJ   r   )ÚStreamingCallbackErrorz%Unknown message received from AIM: %s)rg   r   ri   r�   ry   rÆ   Úcreate_taskÚforward_the_stream_to_aimr‹   ÚloadsÚrecvr    Úmodel_validateÚcancelÚlitellm.proxy.proxy_serverrÑ   r   r–   )rn   rr   r˜   r²   r‡   r—   Ú	websocketÚsenderÚresultrH   rJ   rÑ   s               r)   Ú'async_post_call_streaming_iterator_hookz4AimGuardrail.async_post_call_streaming_iterator_hooke  s�  è ø€ ð )×,Ñ,¨Z¸Ó<×@Ñ@ÀÈBÓO×SÑSÐTfÓgˆ
Ø%×)Ñ)Ð*;Ó<ˆÜØ×ÑÐ Ð 5Ð6Ø#×6Ñ6ØØ+×5Ñ5Ø%Ø 'ð	  7ó  ô
÷ 	ð 	ð Ü#×/Ñ/°×0NÑ0NÈyÐZbÓ0cÓdˆFØÜ+/¯:©:¸I¿N¹NÓ<L×6LÓ+M�Ø%+§Z¡ZÐ0@Ó%AÐA�>ÐAÜ-×<Ñ<¸^ÓLÔLà—M‘M”OØ—z‘z &Ô)Ø÷#	÷ 	ð 	ð$ ,2¯:©:Ð6HÓ+IÐIÐ'ÐIÝUá4Ð5EÓFÐFÜ(×.Ñ.Ð/VÐX^Ô_Ø÷/	÷ 	ð 	ð ð	øð 7Møð	øð 	ø÷ 	÷ 	ñ 	üs†   ‚A>FÂ E?ÂFÂA	FÃF
ÃAFÄ$FÄ/FÄ0FÄ58FÅ-FÅ8FÅ9FÅ>FÅ?FÆFÆFÆFÆFÆFÆFÆFrÙ   Úresponse_iterc              ƒ   óH  K  — |2 3 d {  –—† }t        |t        «      r|j                  «       }t        |t        «      rt	        j
                  |«      }|j                  |«      ƒ d {  –—†  Œh7 Œc7 Œ6 |j                  t	        j
                  ddi«      «      ƒ d {  –—†7   y ­w)NrI   T)rÄ   r
   Úmodel_dump_jsonÚdictr‹   ÚdumpsÚsend)rn   rÙ   rÝ   Úchunks       r)   rÓ   z&AimGuardrail.forward_the_stream_to_aim†  s‹   è ø€ ð
 )÷ 	(ð 	(�%Ü˜%¤Ô+Ø×-Ñ-Ó/�Ü˜%¤Ô&ÜŸ
™
 5Ó)�Ø—.‘. Ó'×'Ñ'ð	(øð
 (øð )ð �n‰nœTŸZ™Z¨°¨Ó7Ó8×8Ò8ùsD   ‚B"…A1‰A-ŠA1�AB"Á'A/Á(B"Á-A1Á/B"Á1*B"ÂBÂB"r!   c                  ó   — ddl m}  | S )Nr   ©ÚAimGuardrailConfigModel)Ú2litellm.types.proxy.guardrails.guardrail_hooks.aimræ   rå   s    r)   Úget_config_modelzAimGuardrail.get_config_model“  s   € õ	
ð 'Ð&r(   )NN)*r$   r%   r&   Úclassmethodra   r   rU   r/   rm   r   r   rà   r   Ú	Exceptionr}   r€   r|   Ústaticmethodr‘   r   r¨   r2   r+   r”   r>   r•   rC   r·   r¶   r�   r   rÎ   r   rL   r   r    rÜ   r   rÓ   r¥   rè   Ú__classcell__)rq   s   @r)   rN   rN   d   sÊ  ø„ Øð
¨$Ð/BÑ*Cò 
ó ð
ñ#  d¡
ð #¸SÀ4¹Zõ #ð(kà)ðkð ðkð ð	kð
 $ðkð 
�S‰˜4Ñ	 $Ñ	&ókð	àð	ð *ð	ð $ð		ð
 
�S‰˜4Ñ	 $Ñ	&ó	ð¨Tð ¸ð ÈÈtÉð ÐX\ó ð> ðv¨Tð v°d¸4ÀÀSÀ¹>Ñ6Jò vó ðvð Ø>Bò 
˜Cð 
°°t±ð 
À~ò 
ó ð
ðYÐ4Eð YÐXið YÐnró YðÐ&8ð Àð Èó ð:+Ø ð+Ø*-ð+Ø58ð+ØEHÈ4ÁZð+à	! DÑ	(ó+ð<
8Ø0ð
8ØCTð
8à	! DÑ	(ó
8ð
ð ð
ð ˜‘:ð	
ð
 ˜$‘Jð
ð ˜t™ó
ðB*àð*ð *ð*ð #ð	*ð
 
ó*ðXà)ðð   Ñ/ðð ð	ð
 
Ð+¨TÐ1Ñ	2óðB9à#ð9ð % ^Ñ4ð9ð 
ó	9ð ð'˜dÐ#9Ñ:¸TÑAò 'ó ô'r(   rN   )ArÆ   r‹   re   Úcollections.abcr   r   r   r   Útypingr   r   r	   Úpydanticr
   Útyping_extensionsr   r   r   Úwebsockets.asyncio.clientr   r   Úlitellmr   Úlitellm._loggingr   Úlitellm._versionr   r¼   Ú%litellm.integrations.custom_guardrailr   Ú&litellm.llms.custom_httpx.http_handlerr   r   Úlitellm.proxy._typesr   r   Ú'litellm.proxy.guardrails._content_utilsr   r   r   Úlitellm.types.guardrailsr   Úlitellm.types.utilsr   r   r   r   r    Ú3litellm.types.proxy.guardrails.guardrail_hooks.baser!   rê   r#   r+   r2   r6   r;   r>   rC   rG   r/   r4   ÚbytesrL   r0   rN   r'   r(   r)   ú<module>rý      sø   ðô Û Û 	ß LÓ Lß 2Ñ 2å ß >Ñ >ß ?å Ý 1Ý 7Ý A÷÷ @÷ñ õ
 9÷õ ñ ÝXô	 ô 	ô%˜	ô %ô6˜	ô 6ô˜ô ôB�iô Bô:˜ô :ô#˜y°õ #ô$�y¨õ $ð &¨°°V°Ñ(<Ñ<¸sÑBÀUÑJ€�	Ó Jôu'�?õ u'r(   