
    g3                         d dl mZmZmZ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ZdZi fd	ed
edededef
dZdedee   fdZdedee   fdZdedeeef   fdZdedee   fdZdedee   fdZy)    )AnyDictListOptionalN)
get_secret)verbose_proxy_logger)CommonProxyErrorsLiteLLMPromptInjectionParams)get_instance_fnz[94mz[0mvaluepremium_userconfig_file_pathlitellm_settingscallback_specific_paramsc                    ddl m} t        j                  t         d|  dt
                t        | t              rg }| D ]
  }t        |t              r$|t        j                  v r|j                  |       8t        |t              rh|dk(  rcddlm} |j                  dd       }	|	t        |	      }	i }
d|v rt        |d   t               r|d   }
d|	i|
} |d7i |}|j                  |       t        |t              rO|d	k(  rJdd
lm} |dur&t'        dt(        j*                  j,                  z          |       }|j                  |       t        |t              rO|dk(  rJddlm} |dur&t'        dt(        j*                  j,                  z          |       }|j                  |       nt        |t              rO|dk(  rJddlm} |dur&t'        dt(        j*                  j,                  z          |       }|j                  |       t        |t              r1|dk(  r,ddlm} i }d|v r|d   } |d7i |}|j                  |       t        |t              r%|dk(  r ddlm}  |       }|j                  |       Ct        |t              rO|dk(  rJddlm } |dur&t'        dt(        j*                  j,                  z          |       }|j                  |       t        |t              rO|dk(  rJddl!m"} |dur&t'        dt(        j*                  j,                  z          |       }|j                  |       t        |t              rQ|dk(  rLddl#m$} |dur&t'        dt(        j*                  j,                  z          ||      }|j                  |       bt        |t              rO|d k(  rJdd!l%m&} |dur&t'        d"t(        j*                  j,                  z          |       }|j                  |       t        |t              r=|d#k(  r8dd$l'm(}  d }!d%|v r|d%   }"tS        d7i |"}! | |!&      }#|j                  |#       t        |t              r%|d'k(  r dd(l*m+}$  |$       }%|j                  |%       Ct        |t              rw|d)k(  rrdd*l,m-}& |d+   }'|'j]                         D ]9  \  }(})|)	t        |)t              s|)j_                  d,      s,ta        |)      |'|(<   ;  |&d7i |'}*|j                  |*       t        j                  t         d-| d.t
                |j                  tc        ||/              t        t        jd                  t              r t        jd                  jg                  |       n|t        _2        d0| v r|dur0t        jh                  d1t(        j*                  j,                          dd2l m5}+ t        j                  d3       dd4l6m7},  |,       }-|+jq                  d5|-       ntc        | |/      gt        _2        t        j                  t         d6t        jd                   d.t
                y )8Nr   )prisma_clientzinitializing callbacks=z	 on proxypresidio)_OPTIONAL_PresidioPIIMaskingpresidio_logging_onlylogging_onlyllamaguard_moderations)_ENTERPRISE_LlamaGuardTzTrying to use Llama Guardhide_secrets)_ENTERPRISE_SecretDetectionzTrying to use secret hidingopenai_moderations)_ENTERPRISE_OpenAI_Moderationz&Trying to use OpenAI Moderations Checklakera_prompt_injection)lakeraAI_Moderationaporia_prompt_injection)AporiaGuardrailgoogle_text_moderation) _ENTERPRISE_GoogleTextModerationz$Trying to use Google Text Moderationllmguard_moderations)_ENTERPRISE_LLMGuardzTrying to use Llm Guardblocked_user_check)_ENTERPRISE_BlockedUserListz$Trying to use ENTERPRISE BlockedUserbanned_keywords)_ENTERPRISE_BannedKeywordsz&Trying to use ENTERPRISE BannedKeyworddetect_prompt_injection)"_OPTIONAL_PromptInjectionDetectionprompt_injection_params)r+   batch_redis_requests)_PROXY_BatchRedisRequestsazure_content_safety)_PROXY_AzureContentSafetyazure_content_safety_paramszos.environ/z% attempting to import custom calback= )r   r   
prometheusz9Prometheus metrics are only available for premium users. )appz'Starting Prometheus Metrics on /metrics)make_asgi_appz/metricsz Initialized Callbacks -  )9litellm.proxy.proxy_serverr   r   debugblue_color_codereset_color_code
isinstanceliststrlitellm)_known_custom_logger_compatible_callbacksappend1litellm.proxy.guardrails.guardrail_hooks.presidior   getbooldict'enterprise.enterprise_hooks.llama_guardr   	Exceptionr	   not_premium_userr   ,enterprise.enterprise_hooks.secret_detectionr   -enterprise.enterprise_hooks.openai_moderationr   2litellm.proxy.guardrails.guardrail_hooks.lakera_air   2litellm.proxy.guardrails.guardrail_hooks.aporia_air    2enterprise.enterprise_hooks.google_text_moderationr"   %enterprise.enterprise_hooks.llm_guardr$   -enterprise.enterprise_hooks.blocked_user_listr&   +enterprise.enterprise_hooks.banned_keywordsr(   .litellm.proxy.hooks.prompt_injection_detectionr*   r
   #litellm.proxy.hooks.batch_redis_getr-   (litellm.proxy.hooks.azure_content_safetyr/   items
startswithr   r   	callbacksextendwarningr3   prometheus_clientr4   mount).r   r   r   r   r   r   imported_listcallbackr   r   _presidio_paramsparamspii_masking_objectr   llama_guard_objectr   _secret_detection_objectr   openai_moderations_objectr   init_paramslakera_moderations_objectr    aporia_guardrail_objectr"   google_text_moderation_objr$   llm_guard_moderation_objr&   blocked_user_listr(   banned_keywords_objr*   r+   !prompt_injection_params_in_configprompt_injection_detection_objr-   batch_redis_objr/   r0   kvazure_content_safety_objr3   r4   metrics_apps.                                                 ^/var/www/openai/venv/lib/python3.12/site-packages/litellm/proxy/common_utils/callback_utils.pyinitialize_callbacks_on_proxyrp      s    9
25'CSBTU %#%H8S) Q QQ$$X.Hc*x:/E 9I8L8L+T9% )4,0--) $& !99j,Z8$? (@
'K$ #$9*&* &B%KF%K"$$%78Hc*x;S/S  t+#3+<<BBC 
 &<%="$$%78Hc*x>/I  t+#5+<<BBC 
 ,G+H($$%=>Hc*x;O/O  t+#@+<<BBC 
 -J,K)$$%>?Hc*x;T/T !,0HH":;T"UK,?,N+,N)$$%>?Hc*x;T/T +:*;'$$%<=Hc*x;S/S  t+#>+<<BBC 
 .N-O*$$%?@Hc*x;Q/QVt+#1+<<BBC 
 ,@+A($$%=>Hc*x;O/O  t+#>+<<BBC 
 %@"/%! $$%67Hc*x;L/L  t+#@+<<BBC 
 'A&B#$$%89Hc*x;T/T +/',0@@8H195 /K /;/+ 2T,C2. $$%CDHc*x;Q/Q #<"=$$_5Hc*x;Q/Q /?1/+ 8==?DAq&q#.LL79CA3A6 @ ,E ,1,( $$%=>$**&''LXJVWXhWij $$#&)9y D g''.$$]3 -G5 4'$,,OPaPrPrPxPxOyz 7 &&'PQ7 (/KIIj+. !1
 
4W5F5F4GqIYHZ[    kwargsreturnc                     | j                  dd       xs i }|j                  dd       xs i }|j                  dd       }||S y )Nlitellm_paramsmetadatamodel_grouprA   )rr   _litellm_params	_metadata_model_groups       ro   #get_model_group_from_litellm_kwargsr|      sN    jj!148>BO##J5;I==5Lrq   datac                 \    | j                  dd       xs i }|j                  dd       }||S y )Nrv   rw   rx   )r}   rz   r{   s      ro   !get_model_group_from_request_datar     s6    T*0bI==5Lrq   c                     i }| j                  dd      xs i }t        |       }d| }|j                  |d      }|r||d| <   d| }|j                  |d      }|r||d| <   |S )z
    Helper function to return x-litellm-key-remaining-tokens-{model_group} and x-litellm-key-remaining-requests-{model_group}

    Returns {} when api_key + model rpm/tpm limit is not set

    rv   Nzlitellm-key-remaining-requests-z!x-litellm-key-remaining-requests-zlitellm-key-remaining-tokens-zx-litellm-key-remaining-tokens-)rA   r   )r}   headersrz   rw    remaining_requests_variable_nameremaining_requestsremaining_tokens_variable_nameremaining_tokenss           ro   3get_remaining_tokens_and_requests_from_request_datar     s     GT*0bI3D9K *I'V$"'GNEW3K=AB (E[M%R" }}%CTJCS1+?@Nrq   request_datac                     | j                  dd       xs i }i }d|v rdj                  |d         |d<   d|v rt        |d         |d<   |S )Nrv   applied_guardrails,zx-litellm-applied-guardrailszsemantic-similarityzx-litellm-semantic-similarity)rA   joinr<   )r   rz   r   s      ro   get_logging_caching_headersr   (  sh      T28bIGy(25((*+3
./ 	)36yAV7W3X/0Nrq   guardrail_namec                 t    |y | j                  dd       xs i }d|v r|d   j                  |       y |g|d<   y )Nrv   r   )rA   r?   )r   r   rz   s      ro   *add_guardrail_to_applied_guardrails_headerr   6  sN       T28bIy(&'..~>+9*:	&'rq   )typingr   r   r   r   r=   r   litellm._loggingr   litellm.proxy._typesr	   r
   litellm.proxy.utilsr   r8   r9   rB   r<   rC   rp   r|   r   r   r   r   r5   rq   ro   <module>r      s    , ,   1 P /  &(kkk k 	k
 #k\ # D Xc] d tCQTH~ 4d x~ 	;	;(0	;rq   