o
    ưi'                     @   sH  d Z ddlmZmZmZmZ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 er6ddlmZ d	Zd
ZdZdZ	ddeeef deeeeef   ddfddZ				ddeeef deeeeef   ded dededefddZ		d deeef deeeeef   deddfddZdeeef fddZdS )!z
Policy Initialization - Loads policies from config and validates on startup.

Configuration structure:
- policies: Define WHAT guardrails to apply (with inheritance and conditions)
- policy_attachments: Define WHERE policies apply (teams, keys, models)
    )TYPE_CHECKINGAnyDictListOptional)verbose_proxy_logger)get_attachment_registry)get_policy_registry)PolicyValidator)PolicyValidationResponse)PrismaClientz[92mz[94mz[93mz[0mNpolicies_configpolicy_attachments_configreturnc                 C   s6  ddl }tt dt|  dt d |j  |  D ]|\}}|di }|d}|d}|d	}t	|t
r@|d
g ng }	t	|t
rM|dg ng }
|rWd| dnd}tt d| | t  |rotd|  |	rxtd|	  |
rtd|
  |rt	|t
r|dnd}|rtd|  q|rtdt dt| dt  |D ]X}|dd}|d}|d}|d}|d}g }|dkr|d |r|d|  |r|d |  |r|d!|  |rd"|nd#}td| d$|  qn
tdt d%t  t  |j  dS )&zN
    Print loaded policies to console on startup (similar to model list).
    r   Nz
LiteLLM Policy Engine: Loaded 	 policies

guardrailsinherit	conditiondescriptionaddremovez (inherits: ) z  - z      description: z      guardrails.add: z      guardrails.remove: modelz      condition.model: zPolicy Attachments: z attachment(s)policyunknownscopeteamskeysmodels*zscope=* (global)zteams=zkeys=zmodels=z, allz -> zXWarning: No policy_attachments configured. Policies will not be applied to any requests.)sysprint_green_color_codelen_reset_color_codestdoutflushitemsget
isinstancedict_blue_color_code_yellow_color_codeappendjoin)r   r   r#   policy_nameZpolicy_datar   r   r   r   guardrails_addguardrails_removeZinherit_strZmodel_condition
attachmentr   r   r   r   r    Zscope_partsZ	scope_str r6   `/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/policy_engine/init_policies.py_print_policies_on_startup   sl   








r8   Tprisma_clientr   validate_dbfail_on_errorc              
      s  t dt|  d t| | t }t }t|d}|j| |dI dH }|jr@|jD ]}	t 	d|	j
 d|	j d|	j  q,|jrZ|jD ]}
t d	|
j
 d|
j d|
j  qF|jsw|rwd
d |jD }tdt|j dd| z||  t dt|  d W n ty } zt 	dt|   d}~ww |rz|| t dt| d W |S  ty } zt 	dt|   d}~ww |S )aJ  
    Initialize policies from configuration.

    This function:
    1. Parses the policy configuration
    2. Validates policies (guardrails exist, teams/keys exist in DB)
    3. Loads policies into the global registry
    4. Loads attachments into the attachment registry (if provided)

    Args:
        policies_config: Dictionary mapping policy names to policy definitions
        policy_attachments_config: Optional list of policy attachment configurations
        prisma_client: Optional Prisma client for database validation
        validate_db: Whether to validate team/key aliases against database
        fail_on_error: If True, raise exception on validation errors

    Returns:
        PolicyValidationResponse with validation results

    Raises:
        ValueError: If fail_on_error is True and validation errors are found
    zInitializing z policies...)r9   )r:   NzPolicy validation error in 'z': [] zPolicy validation warning in 'c                 S   s    g | ]}d |j  d|j qS )[r<   )r2   message).0er6   r6   r7   
<listcomp>   s    z!init_policies.<locals>.<listcomp>zPolicy validation failed with z error(s):
r   zSuccessfully loaded r   zFailed to load policies: z policy attachmentsz#Failed to load policy attachments: )r   infor&   r8   r	   r   r
   Zvalidate_policy_configerrorserrorr2   Z
error_typer>   warningswarningZvalid
ValueErrorr1   Zload_policies	ExceptionstrZload_attachments)r   r   r9   r:   r;   policy_registryattachment_registry	validatorZvalidation_resultrD   rF   Zerror_messagesr@   r6   r6   r7   init_policiesb   sx   








rM   c              	   C   sV   ddl }z| }W n ty   | }|| Y nw |t| |dd|d dS )a  
    Synchronous version of init_policies (without DB validation).

    Use this when async is not available or DB validation is not needed.

    Args:
        policies_config: Dictionary mapping policy names to policy definitions
        policy_attachments_config: Optional list of policy attachment configurations
        fail_on_error: If True, raise exception on validation errors
    r   NF)r   r   r9   r:   r;   )asyncioget_event_loopRuntimeErrornew_event_loopset_event_looprun_until_completerM   )r   r   r;   rN   loopr6   r6   r7   init_policies_sync   s    rU   c            	   	   C   s  ddl m}  t }t }| sdi g dS |  }dt|t| i g d}| D ];\}}|	|}|r:|j
nd|r@|jnd|rH|j ng |rP|j ng |r[|jr[|j nd|j|jd|d	 |< q,| D ]}|d
 |j|j|j|j|jd ql|S )zz
    Get a summary of loaded policies for debugging/display.

    Returns:
        Dictionary with policy information
    r   )PolicyResolverF)initializedpoliciesattachmentsT)rW   Zpolicy_countZattachment_countrX   rY   N)r   r   r3   r4   r   Zresolved_guardrailsinheritance_chainrX   rY   )r   r   r   r   r    )Z+litellm.proxy.policy_engine.policy_resolverrV   r	   r   Zis_initializedZget_all_resolved_policiesr&   Zget_all_attachmentsr*   
get_policyr   r   r   Zget_addZ
get_remover   Z
model_dumprZ   r0   r   r   r   r   r    )	rV   rJ   rK   resolvedsummaryr2   Zresolved_policyr   r5   r6   r6   r7   get_policies_summary   s>   


r^   )N)NNTT)NT)__doc__typingr   r   r   r   r   Zlitellm._loggingr   Z/litellm.proxy.policy_engine.attachment_registryr   Z+litellm.proxy.policy_engine.policy_registryr	   Z,litellm.proxy.policy_engine.policy_validatorr
   Z!litellm.types.proxy.policy_enginer   Zlitellm.proxy.utilsr   r%   r.   r/   r'   rI   r8   boolrM   rU   r^   r6   r6   r6   r7   <module>   sd    

I

b

#