Ë
    tPêj€  ã                   óÈ  — U d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ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mZ d d	lmZ d d
lmZ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' d dl(m)Z)m*Z*  e«       Z+e
e,d<   dhZ-e
e,d<   dZ.e
e,d<    e/h d£«      Z0e
e,d<   dZ1e
e,d<   dZ2e
e,d<   dZ3e
e,d<   dZ4e
e,d<   erd dl5m6Z7  ed d ¬!«       G d"„ d#«      «       Z8 ed d ¬!«       G d$„ d%«      «       Z9e8e9z  Z:ee,d&<   d'e;d(e<d)eed*e<f   z  e:z  fd+„Z=d,e:d)efd-„Z>d'e;d(e<d)eed*e<f   z  fd.„Z?	 dmd/e	d0e@d1e;d2eAd3eAdz  f
d4„ZBd5eAd)e;dz  fd6„ZCd7eAd)e;dz  fd8„ZDd7eAd)eAe;e;f   fd9„ZEd:eAd)eAdz  fd;„ZF e/d<d=e4d>d?d@dAdBeeedCdDdEdFddGdHdIdJdKdLdMdNh«      ZGe
e,dO<   dPeAe;e	f   dz  d)eAe;e;f   dz  fdQ„ZHd:eAdRe;dz  fdS„ZId:eAdTe;dz  d)dfdU„ZJd:eAdVe;dz  fdW„ZKd:eAd>eAe;e;f   fdX„ZLdYedZ   d[e)fd\„ZMd]e;d^e;d_eAd)eAfd`„ZNdaee	   d)eOe	   fdb„ZPdPeAe;e	f   dz  d)eAe;e	f   dz  fdc„ZQdPe	d)e	fdd„ZRdPe	d)e	fde„ZSdPe	dfee;e	ge	f   d)e	fdg„ZT	 dmdhe;dieUe;   dz  d)e@fdj„ZVdhe;d/e	d)e	fdk„ZWdhe;d/e	d)e	fdl„ZXy)né    N)ÚCallableÚIterable)Ú	dataclass)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚNoReturnÚOptionalÚ	TypeAlias)Úassert_never)Ú
get_secret)Úverbose_proxy_logger)Ú"CONSUMED_REQUEST_TAGS_METADATA_KEYÚ PRE_CALL_EXECUTED_GUARDRAILS_KEYÚ,SESSION_DEPLOYMENT_AFFINITY_TTL_METADATA_KEY©ÚCustomLogger)Ú&get_metadata_variable_name_from_kwargsÚget_or_create_metadata_bucket)ÚSensitiveDataMasker)ÚCommonProxyErrorsÚLiteLLMPromptInjectionParams)Údecrypt_value_helperÚencrypt_value_helper)Úget_instance_fn)Ú#StandardLoggingGuardrailInformationÚStandardLoggingPayloadÚ_CALLBACK_VAR_MASKERÚgcs_path_service_accountÚ_EXTRA_SENSITIVE_CALLBACK_KEYSzlitellm_enc::Ú_CALLBACK_VAR_ENCRYPTED_PREFIX>   ÚloggingÚcallback_settingsÚsecret_manager_settingsÚ_CALLBACK_CONFIG_SLOTSz[94mÚblue_color_codez[0mÚreset_color_codeÚ _pillar_response_headers_trustedÚ,TRUSTED_PILLAR_RESPONSE_HEADERS_METADATA_KEYÚguardrail_scan_idsÚGUARDRAIL_SCAN_IDS_METADATA_KEY)ÚLoggingT)ÚfrozenÚslotsc                   ó6   — e Zd ZU eed<   eed<   dZed   ed<   y)Ú_CallbackResolvedToClassÚentryÚloadedÚresolved_to_classÚtagN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Útyper5   r	   © ó    ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/common_utils/callback_utils.pyr1   r1   :   s   … àƒJØƒLØ(;€CˆÐ$Ñ	%Ô;r=   r1   c                   ó6   — e Zd ZU eed<   eed<   dZed   ed<   y)Ú_CallbackNotDispatchabler2   r3   Únot_dispatchabler5   N)r6   r7   r8   r9   r:   Úobjectr5   r	   r<   r=   r>   r@   r@   A   s   … àƒJØƒNØ'9€CˆÐ#Ñ	$Ô9r=   r@   Ú_CallbackLoadErrorr2   r3   Úreturn.c                 ó°   — t        |t        «      st        |«      rt        |t        «      s|S t        |t        «      rt	        | |¬«      S t        | |¬«      S )an  
    Decide whether what a ``litellm_settings.callbacks`` dotted path resolved to can be dispatched.

    A dotted path only ever runs as a ``CustomLogger`` instance or as a callback function. Anything
    else (most commonly a class instead of an instance) used to load without complaint and then be
    skipped on every request, with no log line and no error.
    ©r2   r3   )Ú
isinstancer   Úcallabler;   r1   r@   rF   s     r>   Ú_classify_loaded_callbackrI   K   sI   € ô �&œ,Ô'¬H°VÔ,<ÄZÐPVÔX\ÔE]ØˆÜ�&œ$ÔÜ'¨e¸FÔCÐCÜ#¨%¸Ô?Ð?r=   Úerrorc                 ó  — | xt         d˜ x� \    d| j                  v r| j                  j                  dd«      d   n| j                  }t        d| j                  › d| j                  j
                  › d| j                  j                  › d| j                  j                  › d	|› d
|› d�«      ‚ t        d˜ x�H\   t        d| j                  › dt        | j                  «      j                  › d| j                  ›d�«      ‚ t        | «       y)zOThe one edge that raises: map a load error onto config load's failure contract.r<   Nú.é   r   z"litellm_settings.callbacks entry 'z' resolved to the class z , which is neither a CustomLogger instance nor a callable, so the proxy would never run it. Point it at an instance instead, e.g. add `proxy_handler_instance = z()` to z and set `callbacks: ["z.proxy_handler_instance"]`.z' resolved to ú z[, which is neither a CustomLogger instance nor a callable, so the proxy would never run it.)r1   r2   ÚrsplitÚ
ValueErrorr3   r7   r8   r6   r@   r;   r   )rJ   Úmodule_paths     r>   Ú_raise_callback_load_errorrR   Z   s  € à
Ø'Ô%Ö'ØBEÈÏÉÑBT §¡×!3Ñ!3°C¸Ó!;¸AÒ!>ÐZ_×ZeÑZeˆKÜØ4°U·[±[°MÐAYØ—<‘<×*Ñ*Ð+¨1¨U¯\©\×-FÑ-FÐ,Gð HXàX]×XdÑXd×XmÑXmÐWnÐnuØ�-Ð6°{°mÐC^ð	`óð ð (ô &Õ'ÜØ4°U·[±[°MÀÜ˜Ÿ™Ó%×.Ñ.Ð/¨q°·±Ð0@ð AYðYóð ð (ô �Õr=   c                 ód   — t        | |¬«      }t        |t        t        z  «      rt	        |«       |S )NrF   )rI   rG   r1   r@   rR   )r2   r3   Úresolveds      r>   Ú_loaded_callback_or_raiserU   o   s,   € Ü/°eÀFÔK€HÜ�(Ô4Ô7OÑOÔPÜ" 8Ô,Ø€Or=   ÚvalueÚpremium_userÚconfig_file_pathÚlitellm_settingsÚcallback_specific_paramsc           
      óð  — t        |t        «      si }ddlm} ddlm} ddlm} t        j                  dt        | t        «       t        | t        «      �rìg }| D �]€  }	t        |	t        «      r0|	dk(  r+ddlm}
 |
j!                  ||¬«      }|j#                  |«       ŒDt        |	t        «      r0|	d	k(  r+dd
lm} |j!                  ||¬«      }|j#                  |«       Œ„t        |	t        «      r|j)                  |	«      }	t        |	t        «      r$|	t*        j,                  v r|j#                  |	«       ŒÙt        |	t        «      ri|	dk(  rdddlm} |j3                  dd «      }|�t5        |«      }i }d|v rt        |d   t        «      r|d   }d|i|¥} |dCi |¤Ž}|j#                  |«       �ŒRt        |	t        «      rP|	dk(  rK	 ddlm} |dur&t=        dt>        jD                  jB                  z   «      ‚ |«       }|j#                  |«       �Œ²t        |	t        «      rP|	dk(  rK	 ddl#m$} |dur&t=        dt>        jD                  jB                  z   «      ‚ |«       }|j#                  |«       �Œt        |	t        «      rP|	dk(  rK	 ddl%m&} |dur&t=        dt>        jD                  jB                  z   «      ‚ |«       }|j#                  |«       �Œrt        |	t        «      rD|	dk(  r?ddl(m)} i }d|v rt        |d   t        «      r|d   } |dCi |¤Ž}|j#                  |«       �ŒÆt        |	t        «      r%|	dk(  r ddl*m+}  |«       }|j#                  |«       �Œût        |	t        «      rP|	d k(  rK	 dd!l,m-} |dur&t=        d#t>        jD                  jB                  z   «      ‚ |«       }|j#                  |«       �Œ[t        |	t        «      rP|	d$k(  rK	 dd%l.m/}  |dur&t=        d&t>        jD                  jB                  z   «      ‚ | «       }!|j#                  |!«       �Œ»t        |	t        «      rR|	d'k(  rM	 dd(l0m1}" |dur&t=        d*t>        jD                  jB                  z   «      ‚ |"|¬«      }#|j#                  |#«       �Œt        |	t        «      rP|	d+k(  rK	 dd,l2m3}$ |dur&t=        d.t>        jD                  jB                  z   «      ‚ |$«       }%|j#                  |%«       �Œ}t        |	t        «      r=|	d/k(  r8dd0l4m5}& d }'d1|v r|d1   }(tm        dCi |(¤Ž}' |&|'¬2«      })|j#                  |)«       �ŒÊt        |	t        «      r%|	d3k(  r dd4l7m8}*  |*«       }+|j#                  |+«       �Œÿt        |	t        «      rw|	d5k(  rrdd6l9m:}, |d7   }-|-jw                  «       D ]9  \  }.}/|/€Œ	t        |/t        «      sŒ|/jy                  d8«      sŒ,t{        |/«      |-|.<   Œ;  |,dCi |-¤Ž}0|j#                  |0«       �Œ†t        |	t        «      r1|	d9k(  r,dd:l>m?}1 |1j!                  ||¬«      }2|j#                  |2«       �ŒÇt        |	t        «      rD|	d;k(  r?dd<l@mA}3 i }d;|v rt        |d;   t        «      r|d;   } |3dCi |¤Ž}4|j#                  |4«       �Œt        |	|«      r|j#                  |	«       �Œ:t        j                  d=t        |	t        «       |j#                  t…        |	t‡        |	|¬>«      ¬?«      «       �Œƒ t        t*        jˆ                  t        «      r t*        jˆ                  j‹                  |«       n|t*        _D        d@| v r9ddAlFmG}5 |5j‘                  «        n"t…        | t‡        | |¬>«      ¬?«      gt*        _D        t        j                  dBt        t*        jˆ                  t        «       y # t:        $ r' t=        dt>        j@                  jB                  z   «      ‚w xY w# t:        $ r' t=        dt>        j@                  jB                  z   «      ‚w xY w# t:        $ r' t=        dt>        jN                  jB                  z   «      ‚w xY w# t:        $ r' t=        d"t>        jN                  jB                  z   «      ‚w xY w# t:        $ r' t=        d&t>        j@                  jB                  z   «      ‚w xY w# t:        $ r' t=        d)t>        jN                  jB                  z   «      ‚w xY w# t:        $ r' t=        d-t>        jN                  jB                  z   «      ‚w xY w)DNr   r   )ÚLoggingCallbackManager)Úprisma_clientz&%sinitializing callbacks=%s on proxy%sÚcompression_interception)ÚCompressionInterceptionLogger)rY   rZ   Úcode_interpreter_interception)Ú!CodeInterpreterInterceptionLoggerÚpresidio)Ú_OPTIONAL_PresidioPIIMaskingÚpresidio_logging_onlyÚlogging_onlyÚllamaguard_moderations)Ú_ENTERPRISE_LlamaGuardz MissingTrying to use Llama GuardTzTrying to use Llama GuardÚhide_secrets)Ú_ENTERPRISE_SecretDetectionzTrying to use Secret DetectionzTrying to use secret hidingÚopenai_moderations)Ú_ENTERPRISE_OpenAI_Moderationz'Trying to use OpenAI Moderations Check,z&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,z$Trying to use Google Text ModerationÚllmguard_moderations)Ú_ENTERPRISE_LLMGuardzTrying to use Llm GuardÚblocked_user_check)Ú_ENTERPRISE_BlockedUserListzTrying to use Blocked User Listz$Trying to use ENTERPRISE BlockedUserÚbanned_keywords)Ú_ENTERPRISE_BannedKeywordszTrying to use Banned Keywordsz&Trying to use ENTERPRISE BannedKeywordÚdetect_prompt_injection)Ú"_OPTIONAL_PromptInjectionDetectionÚprompt_injection_params)rz   Úbatch_redis_requests)Ú_PROXY_BatchRedisRequestsÚazure_content_safety)Ú_PROXY_AzureContentSafetyÚazure_content_safety_paramszos.environ/Úwebsearch_interception)ÚWebSearchInterceptionLoggerÚdatadog_cost_management)ÚDatadogCostManagementLoggerz,%s attempting to import custom calback=%s %s)rV   rX   rF   Ú
prometheus)ÚPrometheusLoggerz %s Initialized Callbacks - %s %sr<   )IrG   ÚdictÚ"litellm.integrations.custom_loggerr   Ú3litellm.litellm_core_utils.logging_callback_managerr\   Úlitellm.proxy.proxy_serverr]   r   Údebugr'   r(   Úlistr9   Ú5litellm.integrations.compression_interception.handlerr_   Úinitialize_from_proxy_configÚappendÚ:litellm.integrations.code_interpreter_interception.handlerra   Ú$_add_custom_callback_generic_api_strÚlitellmÚ)_known_custom_logger_compatible_callbacksÚ1litellm.proxy.guardrails.guardrail_hooks.presidiorc   ÚgetÚboolÚ3litellm_enterprise.enterprise_callbacks.llama_guardrg   ÚImportErrorÚ	Exceptionr   Úmissing_enterprise_packagerV   Únot_premium_userÚ8litellm_enterprise.enterprise_callbacks.secret_detectionri   Ú-enterprise.enterprise_hooks.openai_moderationrk   Ú!missing_enterprise_package_dockerÚ2litellm.proxy.guardrails.guardrail_hooks.lakera_airm   Ú<litellm.proxy.guardrails.guardrail_hooks.aporia_ai.aporia_airo   Ú2enterprise.enterprise_hooks.google_text_moderationrq   Ú1litellm_enterprise.enterprise_callbacks.llm_guardrs   Ú-enterprise.enterprise_hooks.blocked_user_listru   Ú+enterprise.enterprise_hooks.banned_keywordsrw   Ú.litellm.proxy.hooks.prompt_injection_detectionry   r   Ú#litellm.proxy.hooks.batch_redis_getr|   Ú(litellm.proxy.hooks.azure_content_safetyr~   ÚitemsÚ
startswithr   Ú3litellm.integrations.websearch_interception.handlerr�   Ú4litellm.integrations.datadog.datadog_cost_managementrƒ   rU   r   Ú	callbacksÚextendÚlitellm.integrations.prometheusr…   Ú_mount_metrics_endpoint)6rV   rW   rX   rY   rZ   r   r\   r]   Úimported_listÚcallbackr_   Úcompression_interception_objra   Ú!code_interpreter_interception_objrc   rd   Ú_presidio_paramsÚparamsÚpii_masking_objectrg   Úllama_guard_objectri   Ú_secret_detection_objectrk   Úopenai_moderations_objectrm   Úinit_paramsÚlakera_moderations_objectro   Úaporia_guardrail_objectrq   Úgoogle_text_moderation_objrs   Úllm_guard_moderation_objru   Úblocked_user_listrw   Úbanned_keywords_objry   rz   Ú!prompt_injection_params_in_configÚprompt_injection_detection_objr|   Úbatch_redis_objr~   r   ÚkÚvÚazure_content_safety_objr�   Úwebsearch_interception_objrƒ   Údatadog_cost_management_objr…   s6                                                         r>   Úinitialize_callbacks_on_proxyrÈ   v   s	  € ô Ð.´Ô5Ø#%Ð Ý?õõ 9ä×ÑÐGÌÐZ_ÔaqÔrÜ�%œÕØ*,ˆØó t	ˆHÜ˜(¤CÔ(¨XÐ9SÒ-Sõð 0M×/iÑ/iØ%5Ø-Eð 0jó 0Ð,ð ×$Ñ$Ð%AÔBØä˜(¤CÔ(¨XÐ9XÒ-Xõð 5V×4rÑ4rØ%5Ø-Eð 5só 5Ð1ð ×$Ñ$Ð%FÔGØô ˜(¤CÔ(Ø1×VÑVÐW_Ó`�Ü˜(¤CÔ(¨X¼×9jÑ9jÑ-jØ×$Ñ$ XÕ.Ü˜H¤cÔ*¨x¸:Ò/Eõð 6F×5IÑ5IÐJaÐcgÓ5hÐ%Ø(Ð4Ü,0Ð1FÓ,GÐ)à#%Ð ØÐ!9Ñ9¼jÐIaÐblÑImÔosÔ>tØ'?À
Ñ'KÐ$ð #Ð$9ð*à&ð*�ñ &BÑ%KÀFÑ%KÐ"Ø×$Ñ$Ð%7Ö8Ü˜H¤cÔ*¨xÐ;SÒ/Sðõð   tÑ+Ü#Ð$?ÔBS×BdÑBd×BjÑBjÑ$jÓkÐká%;Ó%=Ð"Ø×$Ñ$Ð%7Ö8Ü˜H¤cÔ*¨x¸>Ò/Iðõð   tÑ+Ü#Ð$AÔDU×DfÑDf×DlÑDlÑ$lÓmÐmá+FÓ+HÐ(Ø×$Ñ$Ð%=Ö>Ü˜H¤cÔ*¨xÐ;OÒ/Oðõð   tÑ+Ü#Ð$LÔO`×OqÑOq×OwÑOwÑ$wÓxÐxá,IÓ,KÐ)Ø×$Ñ$Ð%>Ö?Ü˜H¤cÔ*¨xÐ;TÒ/Tõð !�Ø,Ð0HÑHÌZØ,Ð-FÑGÌôNð #;Ð;TÑ"U�KÙ,?Ñ,NÀ+Ñ,NÐ)Ø×$Ñ$Ð%>Ö?Ü˜H¤cÔ*¨xÐ;TÒ/Tõñ +:Ó*;Ð'Ø×$Ñ$Ð%<Ö=Ü˜H¤cÔ*¨xÐ;SÒ/Sðõð   tÑ+Ü#Ð$JÔM^×MoÑMo×MuÑMuÑ$uÓvÐvá-MÓ-OÐ*Ø×$Ñ$Ð%?Ö@Ü˜H¤cÔ*¨xÐ;QÒ/Qðtõð   tÑ+Ü#Ð$=Ô@Q×@bÑ@b×@hÑ@hÑ$hÓiÐiá+?Ó+AÐ(Ø×$Ñ$Ð%=Ö>Ü˜H¤cÔ*¨xÐ;OÒ/Oðõð   tÑ+Ü#Ð$JÔM^×MoÑMo×MuÑMuÑ$uÓvÐvá$?ÈmÔ$\Ð!Ø×$Ñ$Ð%6Ö7Ü˜H¤cÔ*¨xÐ;LÒ/Lðõð   tÑ+Ü#Ð$LÔO`×OqÑOq×OwÑOwÑ$wÓxÐxá&@Ó&BÐ#Ø×$Ñ$Ð%8Ö9Ü˜H¤cÔ*¨xÐ;TÒ/Tõð +/Ð'Ø,Ð0@Ñ@Ø8HÐIbÑ8cÐ5Ü.JÑ.oÐMnÑ.oÐ+á1SØ,Cô2Ð.ð ×$Ñ$Ð%CÖDÜ˜H¤cÔ*¨xÐ;QÒ/Qõñ #<Ó"=�Ø×$Ñ$ _Ö5Ü˜H¤cÔ*¨xÐ;QÒ/Qõð /?Ð?\Ñ.]Ð+Ø7×=Ñ=Ó?ò G‘D�A�qØ‘}¬°A´sÕ);ÀÇÁÈ]Õ@[Ü9CÀA»Ð3°AÒ6ðGñ ,Eñ ,Ø1ñ,Ð(ð ×$Ñ$Ð%=Ö>Ü˜H¤cÔ*¨xÐ;SÒ/Sõð .I×-eÑ-eØ%5Ø-Eð .fó .Ð*ð ×$Ñ$Ð%?Ö@Ü˜H¤cÔ*¨xÐ;TÒ/Tõð !�Ø,Ð0HÑHÌZØ,Ð-FÑGÌôNð #;Ð;TÑ"U�KÙ.IÑ.XÈKÑ.XÐ+Ø×$Ñ$Ð%@ÖAÜ˜H lÔ3Ø×$Ñ$ XÖ.ä$×*Ñ*ØBÄOÐU]Ô_oôð ×$Ñ$Ü-Ø&Ü.Ø"*Ø-=ô ôöðYt	ôj ”g×'Ñ'¬Ô.Ü×Ñ×$Ñ$ ]Õ3à -ŒGÔà˜5Ñ ÝHà×4Ñ4Õ6ô &ØÜ&ØØ%5ôôð
ŒÔô ×ÑÐAÄ?ÔT[×TeÑTeÔgwÕxøôe #ò Ü#Ø:Ô=N×=iÑ=i×=oÑ=oÑoóð ðûô #ò Ü#Ø8Ô;L×;gÑ;g×;mÑ;mÑmóð ðûô #ò Ü#ØAÜ+×MÑM×SÑSñTóð ðûôF #ò Ü#Ø?Ü+×MÑM×SÑSñTóð ðûô  #ò tÜ#Ð$=Ô@Q×@lÑ@l×@rÑ@rÑ$rÓsÐsðtûô #ò Ü#Ø9Ô<M×<oÑ<o×<uÑ<uÑuóð ðûô #ò Ü#Ø7Ô:K×:mÑ:m×:sÑ:sÑsóð ðúsT   Ç^È"_Ê_9Í+`,ÏaÐ+bÒcÞ0_ß0_6ß90`)à,0aá0bâ0cã0c5Úkwargsc                 ó˜   — | j                  dd «      xs i }|j                  t        | «      «      xs i }|j                  dd «      }|�|S y )NÚlitellm_paramsÚmodel_group)r”   r   )rÉ   Ú_litellm_paramsÚ	_metadataÚ_model_groups       r>   Ú#get_model_group_from_litellm_kwargsrÐ   “  sT   € Ø#ŸZ™ZÐ(8¸$Ó?ÒEÀ2€OØ&×*Ñ*Ô+QÐRXÓ+YÓZÒ`Ð^`€IØ#Ÿ-™-¨°tÓ<€LØÐØÐàr=   Údatac                 ó\   — | j                  dd «      xs i }|j                  dd «      }|�|S y )NÚmetadatarÌ   )r”   )rÑ   rÎ   rÏ   s      r>   Ú!get_model_group_from_request_datarÔ   �  s6   € Ø—x‘x 
¨DÓ1Ò7°R€IØ#Ÿ-™-¨°tÓ<€LØÐØÐàr=   c                 ó  — i }| j                  dd«      xs i }t        | «      }|r"|j                  dd«      j                  dd«      nd}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

    rÓ   Nú/ú-ú:zlitellm-key-remaining-requests-z!x-litellm-key-remaining-requests-zlitellm-key-remaining-tokens-zx-litellm-key-remaining-tokens-)r”   rÔ   Úreplace)	rÑ   ÚheadersrÎ   rÌ   Úh11_model_group_nameÚ remaining_requests_variable_nameÚremaining_requestsÚremaining_tokens_variable_nameÚremaining_tokenss	            r>   Ú3get_remaining_tokens_and_requests_from_request_datarà   ¦  sÊ   € ð €GØ—x‘x 
¨DÓ1Ò7°R€IÜ:¸4Ó@€Kñ Va +×"5Ñ"5°c¸3Ó"?×"GÑ"GÈÈSÔ"QÐfjÐð 1PÐP[È}Ð.]Ð$Ø )§¡Ð.NÐPTÓ UÐÙØN`ˆÐ3Ð4HÐ3IÐJÑKð /LÈKÈ=Ð,YÐ"Ø'Ÿm™mÐ,JÈDÓQÐÙØL\ˆÐ1Ð2FÐ1GÐHÑIà€Nr=   Úrequest_datac           
      óî  — i }| j                  d«      }| j                  d«      }t        |t        «      r|j                  |«       t        |t        «      r|j                  |«       i }d|v rdj	                  |d   «      |d<   |j                  t
        «      }|rdj	                  |«      |d<   d|v rdj	                  |d   «      |d<   d	|v r@|d	   }t        |t        «      r+|r)d
j	                  d„ |j                  «       D «       «      |d<   d|v rt        |d   «      |d<   |j                  t        «      du }|j                  d«      }|r}t        |t        «      rm|j                  |j                  «       D �	�
ci c]@  \  }	}
t        |	t        «      r+|	j                  «       j                  d«      r|	t        |
«      “ŒB c}
}	«       |S |r#d|v rt        |d   «      j                  «       |d<   |S c c}
}	w )NrÓ   Úlitellm_metadataÚapplied_guardrailsú,zx-litellm-applied-guardrailszx-litellm-guardrail-scan-idÚapplied_policieszx-litellm-applied-policiesÚpolicy_sourcesz; c              3   ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)ú=Nr<   )Ú.0ÚnameÚreasons      r>   ú	<genexpr>z.get_logging_caching_headers.<locals>.<genexpr>Ü  s"   è ø€ Ò;sÑS_ÐSWÐY_¸t¸fÀAÀfÀXÔ<NÑ;sùs   ‚zx-litellm-policy-sourceszsemantic-similarityzx-litellm-semantic-similarityTÚpillar_response_headersz	x-pillar-Úpillar_flaggedzx-pillar-flagged)r”   rG   r†   ÚupdateÚjoinr,   r§   r9   r*   Úlowerr¨   )rá   rÎ   Úmetadata_bucketÚlitellm_metadata_bucketrÚ   Úscan_idsÚsourcesÚis_trusted_pillar_metadataÚpillar_headersÚkeyrV   s              r>   Úget_logging_caching_headersrú   Ã  sñ  € Ø€IØ)×-Ñ-¨jÓ9€OØ%1×%5Ñ%5Ð6HÓ%IÐÜ�/¤4Ô(Ø×Ñ˜Ô)ÜÐ)¬4Ô0ð 	×ÑÐ0Ô1Ø€GØ˜yÑ(Ø25·(±(¸9ÐEYÑ;ZÓ2[ˆÐ.Ñ/à—m‘mÔ$CÓD€HÙØ14·±¸(Ó1CˆÐ-Ñ.à˜YÑ&Ø03·±¸ÐCUÑ9VÓ0WˆÐ,Ñ-à˜9Ñ$Ø"Ð#3Ñ4ˆÜ�gœtÔ$©à26·)±)Ñ;sÐcj×cpÑcpÓcrÔ;sÓ2sˆGÐ.Ñ/à 	Ñ)Ü36°yÐAVÑ7WÓ3XˆÐ/Ñ0à(1¯©Ô6bÓ(cÐgkÐ(kÐØ%ŸM™MÐ*CÓD€NÙ!¤j°ÄÔ&FØ�‰ð #1×"6Ñ"6Ó"8÷á�C˜Ü˜c¤3Ô'¨C¯I©I«K×,BÑ,BÀ;Ô,Oð ”S˜“Z‘óô	
ð €Nñ 
$Ð(8¸IÑ(EÜ&)¨)Ð4DÑ*EÓ&F×&LÑ&LÓ&NˆÐ"Ñ#à€Nùós   Å;AG1
ræ   rä   rç   Ú
guardrailsÚguardrail_configÚ_guardrail_pipelinesÚ_pipeline_managed_guardrailsÚdisable_global_guardrailsÚdisable_global_guardrailÚopted_out_global_guardrailsrî   rï   Úpillar_scannersÚpillar_evidenceÚpillar_evidence_truncatedÚpillar_session_id_responseÚstandard_logging_objectÚproxy_server_requestÚsecret_fieldsÚ$LITELLM_PROXY_INTERNAL_METADATA_KEYSrÓ   c                 óÜ   — | s| S i }| j                  «       D ]N  \  }}|t        v rŒt        |t        «      r|||<   Œ%t	        j
                  d|t        |«      j                  «       ŒP |xs dS )zÆ
    Keep only provider-safe OpenAI metadata entries (string keys -> string values).

    Strips LiteLLM proxy-internal tracking fields that must not be forwarded to
    OpenAI batch/file APIs.
    zSsanitize_openai_provider_metadata: dropping key %r with non-string value of type %sN)r§   r	  rG   r9   r   rŠ   r;   r6   )rÓ   Ú	sanitizedrù   rV   s       r>   Ú!sanitize_openai_provider_metadatar    sx   € ñ ØˆØ')€IØ—n‘nÓ&ò 
‰
ˆˆUØÔ6Ñ6ØÜ�eœSÔ!Ø"ˆI�cŠNä ×&Ñ&ØeØÜ�U“×$Ñ$õð
ð Ò˜Ðr=   Úguardrail_namec                 ót   — |€y t        | «      \  }}d|v r||d   vr|d   j                  |«       y y |g|d<   y )Nrä   ©r   rŽ   )rá   r  Ú_rÎ   s       r>   Ú*add_guardrail_to_applied_guardrails_headerr  )  sY   € ØÐØÜ0°Ó>�L€A€yØ˜yÑ(Ø Ð+?Ñ!@Ñ@ØÐ*Ñ+×2Ñ2°>ÕBð Að ,:Ð*:ˆ	Ð&Ò'r=   Úscan_idc                 ó¼   — |syt        | «      \  }}|j                  t        «      }t        |t        t
        f«      rt        |«      nd}||vrg |¢|‘­|t        <   yy)a  
    Record a provider scan id so it can be surfaced to the caller.

    Guardrails only return scan details to the client when they block, so allowed requests carry no
    audit trail. Ids recorded here become the x-litellm-guardrail-scan-id response header.
    Nr<   )r   r”   r,   rG   r‹   Útuple)rá   r  r  rÎ   Úexistingrõ   s         r>   Úadd_guardrail_scan_idr  4  sb   € ñ ØÜ0°Ó>�L€A€yØ—m‘mÔ$CÓD€HÜ)3°H¼tÄU¸mÔ)L”e˜H”oÐRT€HØ�hÑØ5I°xÐ5IÀÑ5Iˆ	Ô1Ò2ð r=   Úpolicy_namec                 ót   — |€yt        | «      \  }}d|v r||d   vr|d   j                  |«       yy|g|d<   y)zË
    Add a policy name to the applied_policies list in request metadata.

    This is used to track which policies were applied to a request,
    similar to how applied_guardrails tracks guardrails.
    Nræ   r  )rá   r  r  rÎ   s       r>   Ú%add_policy_to_applied_policies_headerr  D  sY   € ð ÐØÜ0°Ó>�L€A€yØ˜YÑ&Ø˜iÐ(:Ñ;Ñ;ØÐ(Ñ)×0Ñ0°Õ=ð <ð *5¨ˆ	Ð$Ò%r=   c                 óš   — |syt        | «      \  }}|j                  di «      }t        |t        «      si }|j	                  |«       ||d<   y)zÍ
    Store policy match reasons in metadata for x-litellm-policy-sources header.

    Args:
        request_data: The request data dict
        policy_sources: Map of policy_name -> matched_via reason
    Nrç   )r   r”   rG   r†   rð   )rá   rç   r  rÎ   r  s        r>   Úadd_policy_sources_to_metadatar  U  sO   € ñ ØÜ0°Ó>�L€A€yØ�}‰}Ð-¨rÓ2€HÜ�h¤Ô%ØˆØ‡O�O�NÔ#Ø"*€IÐÒr=   Úlitellm_logging_objÚLiteLLMLoggingÚguardrail_responsec                 ó    — | €y | j                   j                  d«      }|€y |j                  dg «      }|€g }|j                  |«       ||d<   |S )Nr  Úguardrail_information)Úmodel_call_detailsr”   rŽ   )r  r  r  r   s       r>   Ú1add_guardrail_response_to_standard_logging_objectr"  g  su   € ð Ð"ØØDW×DjÑDj×DnÑDnØ!óEÐð Ð&ØØ3×7Ñ7Ð8OÐQSÓTÐØÐ$Ø "ÐØ× Ñ Ð!3Ô4Ø7LÐÐ3Ñ4à"Ð"r=   Ú	_callbackÚcallback_typeÚenvironment_variablesc                 ó¦   — t        j                  | «      }i }|D ]0  }|j                  |d«      }|�|nt        j                  |«      ||<   Œ2 | ||dœS )zHProcess a single callback and return its data with environment variablesN)rë   Ú	variablesr;   )r   Úget_callback_env_varsr”   ÚosÚgetenv)r#  r$  r%  Úenv_varsÚenv_vars_dictÚ_varÚstored_values          r>   Úprocess_callbackr/  {  sc   € ä"×8Ñ8¸ÓC€Hà24€MØò \ˆØ,×0Ñ0°°tÓ<ˆØ.:Ð.F™lÌBÏIÉIÐVZËOˆ�dÒð\ð ¨MÀ=ÑQÐQr=   r«   c                 ót   — | €g S | D �cg c]$  }t        |t        «      r|j                  «       n|‘Œ& c}S c c}w ©N)rG   r9   rò   )r«   Úcs     r>   Únormalize_callback_namesr3  ‡  s5   € ØÐØˆ	Ø<EÖF°qœ A¤sÔ+ˆA�G‰GŒI°Ñ2ÒFÐFùÒFs   ‰)5c                 óŒ   — t        | t        «      s| S | j                  «       D ��ci c]  \  }}|t        vsŒ||“Œ c}}S c c}}w )zKReturn key/team metadata without the slots that carry callback credentials.)rG   r†   r§   r&   )rÓ   rÃ   rÄ   s      r>   Ústrip_callback_configr5  �  s<   € ä�h¤Ô%ØˆØ%Ÿ^™^Ó-×Q‘T�Q˜°Ô:PÒ1PˆAˆq‰DÓQÐQùÓQs
   ¦A ·A c                 ó"   — t        | t        «      S )zÕReturn a deep copy of metadata with callback_vars values encrypted at rest.

    Idempotent: a value that already decrypts cleanly is left unchanged so
    round-trips through edit forms don't double-encrypt.
    )Ú_transform_callback_varsÚ_encrypt_if_plaintext©rÓ   s    r>   Úencrypt_callback_varsr:  ”  s   € ô $ HÔ.CÓDÐDr=   c                 ó"   — t        | t        «      S )uš   Return a deep copy of metadata with callback_vars values decrypted.

    Legacy plaintext rows pass through unchanged (decrypt failure â†’ original).
    )r7  Ú_decrypt_or_passthroughr9  s    r>   Údecrypt_callback_varsr=  �  s   € ô
 $ HÔ.EÓFÐFr=   Ú	transformc           
      ób  — t        | t        «      s| S t        j                  | «      }|j	                  d«      }t        |t
        «      ri|D ]d  }t        |t        «      sŒt        |j	                  d«      t        «      sŒ4|d   j                  «       D ��ci c]  \  }}| |||«      “Œ c}}|d<   Œf |j	                  d«      }t        |t        «      rPt        |j	                  d«      t        «      r1|d   j                  «       D ��ci c]  \  }}| |||«      “Œ c}}|d<   |S c c}}w c c}}w )Nr#   Úcallback_varsr$   )rG   r†   ÚcopyÚdeepcopyr”   r‹   r§   )rÓ   r>  ÚoutÚlogging_entriesr2   rÃ   rÄ   r$   s           r>   r7  r7  ¥  s  € Ü�h¤Ô%ØˆÜ—‘˜xÓ(€CØ ŸW™W YÓ/€OÜ�/¤4Ô(Ø$ò 	iˆEÜ˜%¤Õ&¬:°e·i±iÀÓ6PÔRVÕ+WØINÈÑI_×IeÑIeÓIg×)hÁÀÀA¨!©Y°q¸!«_Ñ*<Ó)h��oÒ&ð	ið  #Ÿw™wÐ':Ó;ÐÜÐ#¤TÔ*¬zÐ:K×:OÑ:OÐP_Ó:`ÔbfÔ/gØM^Ð_nÑMo×MuÑMuÓMw×-xÁTÀQÈ¨a±¸1¸a³Ñ.@Ó-xÐ˜/Ñ*Ø€Jùó	 *iùó .ys   ÂD%ÄD+rù   Úextrac                 óh   — |r| |v ry| j                  «       t        v ryt        j                  | «      S )zÏReturn ``True`` if ``key`` is present in ``extra`` (checked as-is), or
    if its lowercase form is in ``_EXTRA_SENSITIVE_CALLBACK_KEYS``, or if
    ``_CALLBACK_VAR_MASKER.is_sensitive_key`` matches it.
    T)rò   r!   r   Úis_sensitive_key)rù   rE  s     r>   Úis_sensitive_callback_keyrH  ´  s3   € ñ �˜‘ØØ
‡y�yƒ{Ô4Ñ4ØÜ×0Ñ0°Ó5Ð5r=   c                 óº   — t        |t        «      r|s|S t        | «      s|S |j                  t        «      r|S 	 t        t        |«      z   S # t        $ r |cY S w xY wr1  )rG   r9   rH  r¨   r"   r   r˜   )rù   rV   s     r>   r8  r8  Ã  sb   € Ü�eœSÔ!©ØˆÜ$ SÔ)ØˆØ×ÑÔ6Ô7ð ˆðÜ-Ô0DÀUÓ0KÑKÐKøÜò ð Šð	ús   ºA ÁAÁAc                 ó¦   — t        |t        «      r|s|S |j                  t        «      s|S |t	        t        «      d  }t        || dd¬«      }|�|S |S )NrŠ   F)rV   rù   Úexception_typeÚreturn_original_value)rG   r9   r¨   r"   Úlenr   )rù   rV   ÚinnerÚ	decrypteds       r>   r<  r<  Ø  s\   € Ü�eœSÔ!©ØˆØ×ÑÔ:Ô;àˆØœÔ;Ó<Ð>Ð?€EÜ+°%¸SÐQXÐpuÔv€IØ!Ð-ˆ9Ð8°5Ð8r=   r1  )YrA  r)  Úcollections.abcr   r   Údataclassesr   Útypingr   r   r   r	   r
   r   r   Útyping_extensionsr   r‘   r   Úlitellm._loggingr   Úlitellm.constantsr   r   r   r‡   r   Ú'litellm.litellm_core_utils.core_helpersr   r   Ú0litellm.litellm_core_utils.sensitive_data_maskerr   Úlitellm.proxy._typesr   r   Ú0litellm.proxy.common_utils.encrypt_decrypt_utilsr   r   Úlitellm.proxy.types_utils.utilsr   Úlitellm.types.utilsr   r   r   r:   r!   r"   Ú	frozensetr&   r'   r(   r*   r,   Ú*litellm.litellm_core_utils.litellm_loggingr-   r  r1   r@   rC   r9   rB   rI   rR   rU   r•   r†   rÈ   rÐ   rÔ   rà   rú   r	  r  r  r  r  r  r"  r/  r‹   r3  r5  r:  r=  r7  ÚsetrH  r8  r<  r<   r=   r>   ú<module>r_     s{  ðÜ Û 	ß .Ý !ß T× TÑ Tå *ã Ý Ý 1÷ñ õ
 <÷õ Qß P÷õ <÷ñ
 2Ó3Ð �eÓ 3ð *DÐ(DÐ  Ó Dð )8Ð  Ó 7ñ !*Ò*eÓ fÐ ˜Ó fà#€�Ó #Ø#Ð �%Ó #à6XÐ ,¨eÓ Xà)=Ð  Ó =áÝTñ �$˜dÔ#÷<ð <ó $ð<ñ �$˜dÔ#÷:ð :ó $ð:ð !9Ð;SÑ SÐ �IÓ Sð@ Sð @°&ð @¸\ÈHÐUXÐZ`ÐU`ÑLaÑ=aÐdvÑ=vó @ðÐ&8ð ¸Xó ð* Sð °&ð ¸\ÈHÐUXÐZ`ÐU`ÑLaÑ=aó ð -1ñZyØðZyàðZyð ðZyð ð	Zyð
 # T™kóZyðz°ð ¸¸t¹ó ð¨Dð °S¸4±Zó ð¸dð ÀtÈCÐQTÈHÁ~ó ð:+¨dð +°t¸d±{ó +ñ\ /8àØØ'ØØØØØ&Ø(Ø4Ø*Ø#Ø"Ø%Ø!Ø*ØØØØ#Ø$Ø!ØØð1ó/Ð $ eó ð<Ø�3˜�8‰n˜tÑ#ðà	ˆ#ˆsˆ(�^�dÑóð4;¸Tð ;ÐSVÐY]ÑS]ó ;ðJ¨ð J°s¸T±zð JÀdó Jð 6¸ð 6È3ÐQUÉ:ó 6ð"+°ð +ÀtÈCÐQTÈHÁ~ó +ð$#Ø!Ð"2Ñ3ð#à;ó#ð(	R ð 	R°Cð 	RÐPTð 	RÐY]ó 	RðG¨°©ð G¸$¸s¹)ó GðR D¨¨c¨¡N°TÑ$9ð R¸dÀ3ÈÀ8¹nÈtÑ>Só RðE Cð E¨Có EðG Cð G¨Có Gð sð °xÀÀcÀ
ÈCÀÑ7Pð ÐUXó ð" "ñ6Ø	ð6àˆs‰8�d‰?ð6ð 
ó6ð˜sð ¨3ð °3ó ð*9 ð 9¨Sð 9°Sô 9r=   