Ë
    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 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  G d„ de«      Zy)é    )ÚSequenceMatcher)ÚFinalÚLiteral)ÚHTTPExceptionN)Úverbose_proxy_logger)Ú	DualCache)Ú-DEFAULT_PROMPT_INJECTION_SIMILARITY_THRESHOLD)ÚCustomLogger)Ú%prompt_injection_detection_default_pt)ÚLiteLLMPromptInjectionParamsÚUserAPIKeyAuth)ÚRouter)Úget_formatted_promptc            	       óÀ   — e Zd ZU dZeed<   	 ddedz  fd„Zdded   fd„Z	dd	e
dz  fd
„Zdee   fd„Zefdededefd„Zdedededefd„Zdededed   dedz  fd„Zy)Ú"_OPTIONAL_PromptInjectionDetectionTÚenforces_request_contentNÚprompt_injection_paramsc                 óV   — || _         d | _        g d¢| _        g d¢| _        g d¢| _        y )N)ÚIgnoreÚ	DisregardÚSkipÚForgetÚNeglectÚOverlookÚOmitÚBypasszPay no attention tozDo not followzDo not obey)Ú ÚpriorÚpreviousÚ	precedingÚaboveÚ	foregoingÚearlierÚinitial)r   zand start overzand start anewzand begin afreshzand start from scratch)r   Ú
llm_routerÚverbsÚ
adjectivesÚprepositions)Úselfr   s     ús/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/hooks/prompt_injection_detection.pyÚ__init__z+_OPTIONAL_PromptInjectionDetection.__init__    s/   € ð (?ˆÔ$Ø)-ˆŒò
ˆŒ
ò	
ˆŒò
ˆÕó    Úlevel)ÚINFOÚDEBUGc                 óª   — |dk(  rt        j                  |«       n|dk(  rt        j                  |«       t        j                  du rt        |«       y y )Nr.   r/   T)r   ÚinfoÚdebugÚlitellmÚset_verboseÚprint)r)   Úprint_statementr-   s      r*   Úprint_verbosez0_OPTIONAL_PromptInjectionDetection.print_verboseF   sH   € Ø�FŠ?Ü ×%Ñ% oÕ6Ø�gÒÜ ×&Ñ& Ô7ä×Ñ $Ñ&Ü�/Õ"ð 'r,   Úrouterc                 ó¤  — || _         | j                  �½| j                  j                  du r¤| j                   €t        d«      ‚| j	                  d| j                   j
                  › d| j                  j                  › �«       | j                  j                  �,| j                  j                  | j                   j
                  vrt        d«      ‚y y y )NTzVPromptInjectionDetection: Model List not set. Required for Prompt Injection detection.zmodel_names: z-; self.prompt_injection_params.llm_api_name: zdPromptInjectionDetection: Invalid LLM API Name. LLM API Name must be a 'model_name' in 'model_list'.)r%   r   Úllm_api_checkÚ	Exceptionr7   Úmodel_namesÚllm_api_name)r)   r8   s     r*   Úupdate_environmentz5_OPTIONAL_PromptInjectionDetection.update_environmentO   så   € Ø ˆŒà×'Ñ'Ð3¸×8TÑ8T×8bÑ8bÐfjÑ8jØ�‰Ð&ÜØlóð ð ×ÑØ §¡× ;Ñ ;Ð<Ð<iÐjn÷  kGñ  kG÷  kTñ  kTð  jUð  Vôð ×,Ñ,×9Ñ9ÐAØ×/Ñ/×<Ñ<ÀDÇOÁO×D_ÑD_Ñ_äØzóð ð `ð 9kÐ3r,   Úreturnc                 ó@  — g }| j                   D ]Œ  }| j                  D ]{  }| j                  D ]j  }dj                  t	        d |||g«      «      j                  «       }t        |j                  «       «      dkD  sŒL|j                  |j                  «       «       Œl Œ} ŒŽ |S )Nú é   )
r&   r'   r(   ÚjoinÚfilterÚstripÚlenÚsplitÚappendÚlower)r)   ÚcombinationsÚverbÚadjÚprepÚphrases         r*   Úgenerate_injection_keywordsz>_OPTIONAL_PromptInjectionDetection.generate_injection_keywordsc   s–   € Ø ˆØ—J‘Jò 	<ˆDØ—‘ò <�Ø ×-Ñ-ò <�DØ ŸX™X¤f¨T°D¸#¸tÐ3DÓ&EÓF×LÑLÓN�FÜ˜6Ÿ<™<›>Ó*¨QÓ.Ø$×+Ñ+¨F¯L©L«NÕ;ñ<ñ<ð	<ð Ðr,   Ú
user_inputÚsimilarity_thresholdc           
      ó4  — |j                  «       }| j                  «       }|D ]s  }t        |«      }t        t        |«      |z
  dz   «      D ]I  }||||z    }t	        d ||«      j                  «       }	|	|kD  sŒ,| j                  d|› d|	› d|› �d¬«         y Œu y)	Né   zRejected user input - z. z similar to r.   )r6   r-   TF)rI   rO   rF   Úranger   Úratior7   )
r)   rP   rQ   Úuser_input_lowerÚkeywordsÚkeywordÚkeyword_lengthÚiÚ	substringÚmatch_ratios
             r*   Úcheck_user_input_similarityz>_OPTIONAL_PromptInjectionDetection.check_user_input_similaritym   sÉ   € ð
 #-×"2Ñ"2Ó"4ÐØ×:Ñ:Ó<ˆàò 	 ˆGä  ›\ˆNäœ3Ð/Ó0°>ÑAÀAÑEÓFò  �à,¨Q°°^Ñ1CÐD�	ô .¨d°I¸wÓG×MÑMÓO�ØÐ!5Ó5Ø×&Ñ&Ø*@ÀÀÈBÈ{ÈmÐ[gÐhoÐgpÐ(qØ$ð 'ô ò  ñ ð		 ð  r,   Úuser_api_key_dictÚcacheÚdataÚ	call_typec              ƒ   ó"  K  — 	 	 | j                  d«       	 |dv sJ ‚	 t        ||¬«      }d}| j                  �V| j                  j                  du r%| j                  |¬«      }|du rt        d	d
di¬«      ‚| j                  j                  du rn| j                  |¬«      }|du rt        d	d
di¬«      ‚|S # t        $ r | j                  d|› d�«       |cY S w xY w# t        $ r€}|j                  d	k(  rjt        |j                  t        «      rPd
|j                  v rB| j                  �6| j                  j                  r |j                  j                  d
«      cY d }~S |‚d }~wt        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz/Inside Prompt Injection Detection Pre-Call Hook)ÚacompletionÚ
completionÚtext_completionÚ
embeddingsÚimage_generationÚ
moderationÚaudio_transcriptionzCall Type - zj, not in accepted list - ['completion','embeddings','image_generation','moderation','audio_transcription']©r`   ra   FT)rP   é�  Úerrorú4Rejected message. This is a prompt injection attack.©Ústatus_codeÚdetailz`litellm.proxy.hooks.prompt_injection_detection.py::async_pre_call_hook(): Exception occured - %s)r7   r;   r   r   Úheuristics_checkr]   r   Úvector_db_checkro   Ú
isinstancerp   ÚdictÚreject_as_responseÚgetr   Ú	exception)r)   r^   r_   r`   ra   Úformatted_promptÚis_prompt_attackÚes           r*   Úasync_pre_call_hookz6_OPTIONAL_PromptInjectionDetection.async_pre_call_hook‡   sÄ  è ø€ ð=	ðð ×ÑÐPÔQðØ ð %ñ ð ñ ô ';ÀÐPYÔ&ZÐà$Ðà×+Ñ+Ð7à×/Ñ/×@Ñ@ÀDÑHØ'+×'GÑ'GÐScÐ'GÓ'dÐ$Ø'¨4Ñ/Ü+Ø(+Ø$+Ð-cÐ#dôð ð
 ×/Ñ/×?Ñ?À4ÑGØà#'×#CÑ#CÐO_Ð#CÓ#`Ð à 4Ñ'Ü#Ø #Ø#Ð%[Ð\ôð ð
 ˆKøô= ò Ø×"Ñ"Ø" 9 +ð  .Xð  Yôð ’ð	ûô@ ò 		à—‘ Ò$Ü˜qŸx™x¬Ô.Ø˜qŸx™xÑ'Ø×0Ñ0Ð<Ø×0Ñ0×CÒCà—x‘x—|‘| GÓ,Õ,ØˆGûÜò 	Ü ×*Ñ*ØrÐtu÷ñ ûð	üsv   ‚F„C —B6 �BC Â5FÂ6 CÃC ÃFÃCÃC Ã	FÃ%A3E ÅFÅFÅE Å FÅ,FÆFÆFÆF)rc   rd   rf   rg   rh   ri   c              ƒ   óf  K  — | j                  d| j                  › �«       | j                  €y t        ||¬«      }d}t        | j                  dt	        «       «      }| j                  j
                  du �r%| j                  j                  ��| j                  ��| j                  j                  | j                  j                  d|dœd|dœg¬	«      ƒ d {  –—† }| j                  d
|› �«       | j                  d| j                  j                  › �«       t        |t        j                  «      rjt        |j                  d   t        j                  «      rC| j                  j                  }|j                  d   j                  j                   }	|�|	�||	v rd}|du rt#        dddi¬«      ‚|S 7 ŒÙ­w)Nz:IN ASYNC MODERATION HOOK - self.prompt_injection_params = rj   FÚllm_api_system_promptTÚsystem)ÚroleÚcontentÚuser)ÚmodelÚmessagesz"Received LLM Moderation response: zllm_api_fail_call_string: r   rk   rl   rm   rn   )r7   r   r   Úgetattrr   r:   r=   r%   rc   Úllm_api_fail_call_stringrs   r3   ÚModelResponseÚchoicesÚChoicesÚmessager€   r   )
r)   r`   r^   ra   rx   ry   Úprompt_injection_system_promptÚresponseÚfail_call_stringr€   s
             r*   Úasync_moderation_hookz8_OPTIONAL_PromptInjectionDetection.async_moderation_hookÍ   sÁ  è ø€ ð 	×ÑÐWÐX\×XtÑXtÐWuÐvÔwà×'Ñ'Ð/Øä"6¸DÈIÔ"VÐØ Ðä07Ø×(Ñ(Ø#Ü1Ó3ó1
Ð&ð ×(Ñ(×6Ñ6¸$Ò>Ø×,Ñ,×9Ñ9ÑEØ—‘Ñ+ð %)§O¡O×$?Ñ$?Ø×2Ñ2×?Ñ?ð !)Ø#Añð $Ð0@ÑAðð %@ó 	%÷ 	ˆHð ×ÑÐ!CÀHÀ:ÐNÔOØ×ÑÐ!;¸D×<XÑ<X×<qÑ<qÐ;rÐsÔtÜ˜(¤G×$9Ñ$9Ô:¼zÈ(×JZÑJZÐ[\ÑJ]Ô_f×_nÑ_nÔ?oØ*.×*FÑ*F×*_Ñ*_Ð Ø!)×!1Ñ!1°!Ñ!4×!<Ñ!<×!DÑ!D�Ø#Ð/°GÐ4GÐL\Ð`gÑLgØ'+Ð$à˜tÑ#ÜØØÐ!WÐXôð ð
  Ðð3	ús   ‚CF1ÃF/ÃCF1)N)r/   )Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__r   r+   r   r7   r   r>   ÚlistÚstrrO   r	   Úfloatr]   r   r   rt   r{   r�   © r,   r*   r   r      sé   … Ø%)Ð˜dÓ)ð
 HLñ$
à!=ÀÑ!Dó$
ñL#°G¸OÑ4Ló #ñ¨°$©ó ð(¨T°#©Yó ð 'Tñàðð $ðð 
ó	ð4Dà)ðDð ðDð ð	Dð
 óDðL; àð; ð *ð; ð ð#ñ
ð	; ð 
�‰ô; r,   r   )Údifflibr   Útypingr   r   Úfastapir   r3   Úlitellm._loggingr   Úlitellm.caching.cachingr   Úlitellm.constantsr	   Ú"litellm.integrations.custom_loggerr
   Ú3litellm.litellm_core_utils.prompt_templates.factoryr   Úlitellm.proxy._typesr   r   Úlitellm.routerr   Úlitellm.utilsr   r   r–   r,   r*   ú<module>r¢      s>   ðõ $ß !å !ã Ý 1Ý -Ý KÝ ;õ÷ NÝ !Ý .ôl ¨õ l r,   