o
    ưi4                     @   s   U d dl mZ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 d dlmZmZmZ g aee ed< 	 		ddee dee d	ee fd
dZdee ddfddZdeeeef  dedededeeef f
ddZdS )    )AnyDictListOptionalcastN)Router)verbose_proxy_logger)initialize_callbacks_on_proxy)	GuardrailGuardrailItemGuardrailItemSpecall_guardrailsconfig_file_path
llm_routerc                 C   sL   ddl m} g }| D ]}|jtt|||d}|r|| q
t|d d S )Nr   IN_MEMORY_GUARDRAIL_HANDLER)	guardrailr   r   )guardrail_list)+litellm.proxy.guardrails.guardrail_registryr   Zinitialize_guardrailr   r
   append_populate_router_guardrail_list)r   r   r   r   r   r   Zinitialized_guardrail r   _/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/guardrails/init_guardrails.pyinit_guardrails_v2   s   
r   r   returnc              	   C   s   ddl m} ddlm} ddlm} |du rtd dS g }| D ]K}|d}|d}|d	i }d}	|r=|j	|}	t
|d
rF| nt|}
||pNd|
dd|
dd|
d|
dd|	|d}|| q!||_tdt| d dS )z
    Populate the router's guardrail_list from initialized guardrails.

    This enables load balancing across multiple guardrail deployments
    with the same guardrail_name.
    r   r   )r   )GuardrailTypedDictNz>Router not initialized yet, skipping guardrail_list populationguardrail_idguardrail_namelitellm_params
model_dump r   modeapi_keyapi_base)r   r!   r"   r#   )r   r   callbackidz%Populated router guardrail_list with z guardrails)r   r   Zlitellm.proxy.proxy_serverr   Zlitellm.types.routerr   r   debuggetZ guardrail_id_to_custom_guardrailhasattrr   dictr   r   len)r   r   r   r   Zrouter_guardrail_listr   r   r   r   r$   params_dictZrouter_guardrailr   r   r   r   +   sJ   




r   guardrails_configpremium_userlitellm_settingsc              
   C   s8  zt d|   | D ]!}	 | D ]\}}td	i |d|i}t| |tj|< qqt }i }	tD ]8}
t |
j	 t |
j
 |	|
j |
j
du rl|
jD ]}|tjvr\|| |
jdu rk|dkrkddi|	d< qPq4t|}t|dkrt|||||	d tjW S  ty } zt dt| |d }~ww )
Nzvalidating  guardrails passed r   TZpresidiologging_onlyr   )valuer-   r   r.   callback_specific_paramsz error initializing guardrails {}r   )r   r&   itemsr   r   r   litellmZguardrail_name_config_mapsetr   Z
default_onupdatecallback_args	callbacksaddr/   listr*   r	   	Exception	exceptionformatstr)r,   r-   r   r.   itemkvZguardrail_itemZdefault_on_callbacksr1   r   r$   Zdefault_on_callbacks_lister   r   r   initialize_guardrailsf   sP   





rB   )NN)typingr   r   r   r   r   r3   r   Zlitellm._loggingr   Z)litellm.proxy.common_utils.callback_utilsr	   Zlitellm.types.guardrailsr
   r   r   r   __annotations__r=   r   r   boolr)   rB   r   r   r   r   <module>   s:    
;
