Ë
    tPêj”  ã                   ó‚   — d dl Z d dl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 d dlmZ d dlmZmZ  G d	„ d
e«      Zy)é    N)ÚFinal)ÚHTTPException)Úverbose_proxy_logger)Ú	DualCache)ÚCustomLogger)ÚUserAPIKeyAuth)Úis_text_content_call_typeÚiter_message_textc                   ór   — e Zd ZU dZeed<   dd„Zdd„Zd„ Zdde	de	dz  fd	„Z
d
ededede	fd„Zded
efd„Zy)Ú_PROXY_AzureContentSafetyTÚenforces_request_contentNc                 óx  — 	 ddl m} ddlm}m}m} ddlm} ddlm	}	 || _        || _        || _        || _        || _        |	| _        | j'                  |«      | _         || j                   || j                  «      «      | _        y # t        $ r)}
t        d|
› dt        j                  «       › d�«      ‚d }
~
ww xY w)	Nr   )ÚContentSafetyClient)ÚAnalyzeTextOptionsÚAnalyzeTextOutputTypeÚTextCategory)ÚAzureKeyCredential)ÚHttpResponseErrorzm[91mAzure Content-Safety not installed, try running 'pip install azure-ai-contentsafety' to fix this error: ú
z[0m)Úazure.ai.contentsafety.aior   Úazure.ai.contentsafety.modelsr   r   r   Úazure.core.credentialsr   Úazure.core.exceptionsr   Ú	ExceptionÚ	tracebackÚ
format_excÚendpointÚapi_keyÚtext_categoryÚanalyze_text_optionsÚanalyze_text_output_typeÚazure_http_errorÚ_configure_thresholdsÚ
thresholdsÚclient)Úselfr   r   r$   r   r   r   r   r   r   Úes              úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/hooks/azure_content_safety.pyÚ__init__z"_PROXY_AzureContentSafety.__init__   så   € ð	ÝF÷ñ õ
 BÝ?ð
 !ˆŒØˆŒØ)ˆÔØ$6ˆÔ!Ø(=ˆÔ%Ø 1ˆÔà×4Ñ4°ZÓ@ˆŒá)¨$¯-©-Ñ9KÈDÏLÉLÓ9YÓZˆ�øô ò 	Üð Cð  DEð  CFð  FHô  IR÷  I]ñ  I]ó  I_ð  H`ð  `gð  hóð ûð	ús   ‚B Â	B9Â$B4Â4B9c                 ó  — | j                   j                  d| j                   j                  d| j                   j                  d| j                   j                  di}|€|S |j                  «       D ]  \  }}||vsŒ|||<   Œ |S )Né   )r   ÚHATEÚ	SELF_HARMÚSEXUALÚVIOLENCEÚitems)r&   r$   Údefault_thresholdsÚkeyÚdefaults        r(   r#   z/_PROXY_AzureContentSafety._configure_thresholds1   s‘   € à×Ñ×#Ñ# QØ×Ñ×(Ñ(¨!Ø×Ñ×%Ñ% qØ×Ñ×'Ñ'¨ð	%
Ðð ÐØ%Ð%à.×4Ñ4Ó6ò 	*‰LˆC�Ø˜*Ò$Ø")�
˜3’ð	*ð Ðó    c                 óê   — i }|j                   D �ci c]  }|j                  |j                  “Œ }}| j                  D ].  }|j	                  |«      }|€Œ|| j
                  |   k\  |dœ||<   Œ0 |S c c}w )N)ÚfilteredÚseverity)Úcategories_analysisÚcategoryr7   r   Úgetr$   )r&   ÚresponseÚresultÚitemÚcategory_severityr9   r7   s          r(   Ú_compute_resultz)_PROXY_AzureContentSafety._compute_resultB   s†   € ØˆàMU×MiÑMiÖ#jÀT D§M¡M°4·=±=Ñ$@Ð#jÐÐ#jØ×*Ñ*ò 	ˆHØ(×,Ñ,¨XÓ6ˆHØÑ#à (¨D¯O©O¸HÑ,EÑ EØ (ñ$��xÒ ð	ð ˆùò $ks   ‘A0ÚcontentÚsourcec           	   ƒ   óJ  K  — t        j                  d|«       | j                  || j                  j                  ¬«      }	 | j
                  j                  |«      ƒ d {  –—† }| j                  |«      }t        j                  d|«       |j                  «       D ]  \  }}|d   sŒt        dd|||d   d	œ¬
«      ‚ y 7 Œ^# | j                  $ rQ t        j                  dt        j                  «       «       t        j                  t        j                  «       «       ‚ w xY w­w)Nz$Testing Azure Content-Safety for: %s)ÚtextÚoutput_typez!Error in Azure Content-Safety: %szAzure Content-Safety Result: %sr6   i�  zViolated content safety policyr7   )ÚerrorrA   r9   r7   )Ústatus_codeÚdetail)r   Údebugr    r!   ÚEIGHT_SEVERITY_LEVELSr%   Úanalyze_textr"   r   r   r?   r0   r   )r&   r@   rA   Úrequestr;   r<   r2   Úvalues           r(   Útest_violationz(_PROXY_AzureContentSafety.test_violationP   s  è ø€ Ü×"Ñ"Ð#IÈ7ÔSð ×2Ñ2ØØ×5Ñ5×KÑKð 3ó 
ˆð	Ø$(§K¡K×$<Ñ$<¸WÓ$E×EˆHð ×,Ñ,¨XÓ6ˆÜ×"Ñ"Ð#DÀfÔMà Ÿ,™,›.ò 
	‰JˆC�Ø�ZÓ Ü#Ø #à!AØ"(Ø$'Ø$)¨*Ñ$5ñ	ôð ñ
	ð FùØ×$Ñ$ò 	Ü ×&Ñ&Ð'JÌI×L`ÑL`ÓLbÔcÜ ×&Ñ&¤y×';Ñ';Ó'=Ô>Øð	üs7   ‚>D#ÁC  ÁB>Á C  Á$AD#Â'D#Â>C  Ã A D Ä D#Úuser_api_key_dictÚcacheÚdataÚ	call_typec              ƒ   ól  K  — t        j                  d«       	 t        |«      r,t        |«      D ]  }| j	                  |d¬«      ƒ d {  –—†  Œ y y 7 Œ# t
        $ r}|‚d }~wt        $ rG}t        j                  d|«       t        j                  t        j                  «       «       Y d }~y d }~ww xY w­w)Nz)Inside Azure Content-Safety Pre-Call HookÚinput©r@   rA   zZlitellm.proxy.hooks.azure_content_safety.py::async_pre_call_hook(): Exception occured - %s)
r   rH   r	   r
   rM   r   r   rE   r   r   )r&   rN   rO   rP   rQ   rC   r'   s          r(   Úasync_pre_call_hookz-_PROXY_AzureContentSafety.async_pre_call_hookp   s¨   è ø€ ô 	×"Ñ"Ð#NÔOð	?Ü(¨Ô3Ü-¨dÓ3ò L�DØ×-Ñ-°dÀ7Ð-ÓK×KÑKñLð 4àKùäò 	ØˆGûÜò 	?Ü ×&Ñ&ØlÐnoôô !×&Ñ&¤y×';Ñ';Ó'=×>Ñ>ûð		?üsL   ‚B4™/A ÁAÁ	A ÁB4ÁA Á	B1ÁAÁB1Á*=B,Â'B4Â,B1Â1B4c              ƒ   óh  K  — t        j                  d«       t        |t        j                  «      sy |j
                  D ]m  }t        |t        j                  j                  «      sŒ(t        |dd «      }t        |dd «      }t        |t        «      sŒS| j                  |d¬«      ƒ d {  –—†  Œo y 7 Œ­w)Nz*Inside Azure Content-Safety Post-Call HookÚmessager@   ÚoutputrT   )r   rH   Ú
isinstanceÚlitellmÚModelResponseÚchoicesÚutilsÚChoicesÚgetattrÚstrrM   )r&   rP   rN   r;   ÚchoicerW   r@   s          r(   Úasync_post_call_success_hookz6_PROXY_AzureContentSafety.async_post_call_success_hook…   s�   è ø€ ô 	×"Ñ"Ð#OÔPÜ˜(¤G×$9Ñ$9Ô:Øà×&Ñ&ò 	LˆFÜ˜f¤g§m¡m×&;Ñ&;Ô<ØÜ˜f i°Ó6ˆGÜ˜g y°$Ó7ˆGÜ˜'¤3Õ'Ø×)Ñ)°'À(Ð)ÓK×KÑKñ	Lð Lús   ‚BB2ÂB2Â(B0Â)B2)N)Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__r)   r#   r?   r`   rM   r   r   ÚdictrU   rb   © r4   r(   r   r      s|   … ð
 &*Ð˜dÓ)ó[ó2ò"ñ¨Cð ¸¸t¹ó ð@?à)ð?ð ð?ð ð	?ð
 ó?ð*LàðLð *ôLr4   r   )r   Útypingr   Úfastapir   rZ   Úlitellm._loggingr   Úlitellm.caching.cachingr   Ú"litellm.integrations.custom_loggerr   Úlitellm.proxy._typesr   Ú'litellm.proxy.guardrails._content_utilsr	   r
   r   ri   r4   r(   ú<module>rq      s3   ðÛ Ý å !ã Ý 1Ý -Ý ;Ý /÷ôDLØõDLr4   