Ë
    tPêje!  ã                   óÄ  — U d Z ddlZddl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mZmZmZ dd	lmZ dd
lmZ i Zeeeef      ed<   dZeed<   d%dedz  defd„Zdedefd„Zdedz  dededz  dedz  fd„Zdededz  fd„Z d&d„Z!dedefd„Z"dejF                  ddfd„Z$deddfd„Z%	 	 d'dedededz  dededz  d ed!edz  d"edz  fd#„Z&defd$„Z'y)(z2
Functions to create audit logs for LiteLLM Proxy
é    N)ÚdatetimeÚtimezone)ÚFinal)Úverbose_proxy_logger)Úuuid)ÚCustomLogger)ÚAUDIT_ACTIONSÚLiteLLM_AuditLogsÚLitellmTableNamesÚUserAPIKeyAuth)ÚAuditLogRepository)ÚStandardAuditLogPayloadÚ_audit_log_callback_cacheÚallow_litellm_changed_by_headerÚ,ALLOW_LITELLM_CHANGED_BY_HEADER_METADATA_KEYÚstore_audit_logsÚreturnc                 ój   — ddl m} | €t        j                  n| }|�|S  |d«      }|�|S ddlm} |du S )Nr   )Úget_secret_boolÚLITELLM_STORE_AUDIT_LOGS)Úpremium_userT)Úlitellm.secret_managers.mainr   Úlitellmr   Úlitellm.proxy.proxy_serverr   )r   r   Úconfigured_valueÚenvironment_valuer   s        úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.pyÚis_audit_logging_enabledr      sK   € Ý<àGWÐG_¬7×+CÒ+CÐeuÐØÐ#ØÐá,;Ð<VÓ,WÐØÐ$Ø Ð å7à˜4ÐÐó    Úuser_api_key_dictc                 ó’   — | j                   | j                  fD ],  }t        |t        «      sŒ|j	                  t
        «      du sŒ, y y)NTF)ÚmetadataÚteam_metadataÚ
isinstanceÚdictÚgetr   )r    Úadmin_metadatas     r   Ú!_allows_litellm_changed_by_headerr(   +   sJ   € Ø,×5Ñ5Ð7H×7VÑ7VÐWò ˆä�~¤tÕ,Ø×"Ñ"Ô#OÓPÐTXÒXáðð r   Úlitellm_changed_byÚlitellm_proxy_admin_namec                 ó@   — | rt        |«      r| S |j                  xs |S ©N)r(   Úuser_id©r)   r    r*   s      r   Úget_audit_log_changed_byr/   5   s(   € ñ Ô?Ð@QÔRØ!Ð!Ø×$Ñ$Ò@Ð(@Ð@r   Únamec                 óÈ   — | t         v r	t         |    S | dk(  r/t        t        dd«      �ddlm}  |t        j
                  ¬«      }nddlm}  || dd¬«      }|�	|t         | <   |S )	a1  Resolve a string callback name to a CustomLogger instance, with caching.

    For "s3_v2" with `litellm.s3_audit_callback_params` set, constructs a
    dedicated `S3Logger` so audit logs can target a different bucket than the
    normal-log singleton served by `_init_custom_logger_compatible_class`.
    Ús3_v2Ús3_audit_callback_paramsNr   )ÚS3Logger)Ús3_callback_params_override)Ú$_init_custom_logger_compatible_class)Úlogging_integrationÚinternal_usage_cacheÚ
llm_router)r   Úgetattrr   Úlitellm.integrations.s3_v2r4   r3   Ú*litellm.litellm_core_utils.litellm_loggingr6   )r0   Ú
S3V2LoggerÚinstancer6   s       r   Ú_resolve_audit_log_callbackr?   @   su   € ð Ô(Ñ(Ü(¨Ñ.Ð.ð ˆw‚œ7¤7Ð,FÈÓMÐYÝEá¼'×:ZÑ:ZÔ[‰õ	
ñ 8Ø $Ø!%Øô
ˆð ÐØ*2Ô! $Ñ'Ø€Or   c                  ó,   — t         j                  «        y)zAClear cached audit-log callback instances. Call on config reload.N)r   Úclear© r   r   Úreset_audit_log_callback_cacherC   _   s   € ä×#Ñ#Õ%r   Úrequest_datac                 ó   — d}| j                   �| j                   j                  «       }t        | j                  t        «      r| j                  j
                  nt        | j                  «      }t        | j                  || j                  xs d| j                  xs d| j                  || j                  | j                  | j                  ¬«	      S )zKConvert LiteLLM_AuditLogs to StandardAuditLogPayload for callback dispatch.Ú )	ÚidÚ
updated_atÚ
changed_byÚchanged_by_api_keyÚactionÚ
table_nameÚ	object_idÚbefore_valueÚupdated_values)rH   Ú	isoformatr$   rL   r   ÚvalueÚstrr   rG   rI   rJ   rK   rM   rN   rO   )rD   rH   Útable_name_strs      r   Ú_build_audit_log_payloadrT   d   s¼   € ð €JØ×ÑÐ*Ø!×,Ñ,×6Ñ6Ó8ˆ
ô �l×-Ñ-Ô/@ÔAð 	×Ñ×%Ò%ä�×(Ñ(Ó)ð ô #Ø�?‰?ØØ×*Ñ*Ò0¨bØ'×:Ñ:Ò@¸bØ×"Ñ"Ø!Ø×(Ñ(Ø!×.Ñ.Ø#×2Ñ2ô
ð 
r   Útaskc                 óŽ   — 	 | j                  «       }|�t        j                  d||¬«       yy# t        j                  $ r Y yw xY w)zQLog exceptions from audit log callback tasks so they don't slip through silently.Nz"Audit log callback task failed: %s)Úexc_info)Ú	exceptionÚasyncioÚCancelledErrorr   Úerror)rU   Úexcs     r   Ú_audit_log_task_done_callbackr]      sM   € ðØ—^‘^Ó%ˆð €Ü×"Ñ"Ð#GÈÐWZÖ[ð øô ×!Ñ!ò Ùðús   ‚. ®AÁAc              ƒ   óê  K  — t         j                  syt        | «      }t         j                  D ]”  }	 t        |t        «      r|nd}t        |t
        «      r$t        |«      }|€t        j                  d|«       ŒLt        |t        «      r9t        j                  |j                  |«      «      }|j                  t        «       Œ– y# t        $ r }t        j                  d|«       Y d}~Œ¼d}~ww xY w­w)z9Dispatch audit log to all registered audit_log_callbacks.Nz(Could not resolve audit log callback: %sz,Failed dispatching audit log to callback: %s)r   Úaudit_log_callbacksrT   r$   r   rR   r?   r   ÚwarningrY   Úcreate_taskÚasync_log_audit_log_eventÚadd_done_callbackr]   Ú	Exceptionr[   )rD   ÚpayloadÚcallbackÚresolvedrU   Úes         r   Ú _dispatch_audit_log_to_callbacksri   ‰   sØ   è ø€ ô ×&Ò&Øä-¨lÓ;€Gä×/Ñ/ò Zˆð	ZÜ8BÀ8Ì\Ô8Z©HÐ`dˆHÜ˜(¤CÔ(Ü6°xÓ@�ØÐ#Ü(×0Ñ0Ð1[Ð]eÔfØä˜(¤LÔ1Ü×*Ñ*¨8×+MÑ+MÈgÓ+VÓW�Ø×&Ñ&Ô'DÔEøñZøô ò 	ZÜ ×&Ñ&Ð'UÐWX×YÑYûð	Züs<   ‚0C3³ACÁ:C3Á;A	CÃC3Ã	C0ÃC+Ã&C3Ã+C0Ã0C3rM   rK   rL   rN   Úafter_valuec              ƒ   ó  K  — t        «       syt        |||¬«      }t        t        t	        t        j                  «       «      t        j                  t        j                  «      ||j                  || |||¬«	      ¬«      ƒ d{  –—†  y7 Œ­w)a  
    Create an audit log for an internal user.

    Parameters:
    - user_id: str - The id of the user to create the audit log for.
    - action: AUDIT_ACTIONS - The action to create the audit log for.
    - user_row: LiteLLM_UserTable - The user row to create the audit log for.
    - litellm_changed_by: Optional[str] - The user id of the user who is changing the user.
    - user_api_key_dict: UserAPIKeyAuth - The user api key dictionary.
    - litellm_proxy_admin_name: Optional[str] - The name of the proxy admin.
    Nr.   )	rG   rH   rI   rJ   rL   rM   rK   rO   rN   )rD   )r   r/   Úcreate_audit_log_for_updater
   rR   r   Úuuid4r   Únowr   ÚutcÚapi_key)	rM   rK   r)   r    r*   rL   rN   rj   Ú_changed_bys	            r   Úcreate_object_audit_logrr   ¢   sy   è ø€ ô* $Ô%Øä1Ø-Ø+Ø!9ô€Kô &Ü&Ü”4—:‘:“<Ó Ü—|‘|¤H§L¡LÓ1Ø"Ø0×8Ñ8Ø!ØØØ&Ø%ô

ô÷ ò ús   ‚BBÂB	ÂBc              ƒ   óš  K  — t        «       syddlm}m} |duryt	        j
                  d| «       t        | j                  t        «      r$t        j                  | j                  «      | _        t        | j                  t        «      r$t        j                  | j                  «      | _        t        | «      ƒ d{  –—†  |€t	        j                  d«       y| j                  d¬«      }	 t        |«      j                   j#                  i |¥¬«      ƒ d{  –—†  y7 Œ_7 Œ# t$        $ r }t	        j                  d	|«       Y d}~yd}~ww xY w­w)
z,
    Create an audit log for an object.
    Nr   )r   Úprisma_clientTzcreating audit log for %sz3prisma_client is None, cannot write audit log to DB)Úexclude_none)ÚdatazFailed Creating audit log %s)r   r   r   rt   r   Údebugr$   rO   r%   ÚjsonÚdumpsrN   ri   r[   Ú
model_dumpr   ÚtableÚcreaterd   )rD   r   rt   Ú_request_datarh   s        r   rl   rl   Ï   s&  è ø€ ô $Ô%ØçFà˜4ÑØä×ÑÐ:¸LÔIä�,×-Ñ-¬tÔ4Ü&*§j¡j°×1LÑ1LÓ&MˆÔ#ä�,×+Ñ+¬TÔ2Ü$(§J¡J¨|×/HÑ/HÓ$IˆÔ!ô +¨<Ó
8×8Ð8àÐÜ×"Ñ"Ð#XÔYØà'×2Ñ2ÀÐ2ÓE€MðFÜ  Ó/×5Ñ5×<Ñ<ðØðð =ó 
÷ 	
ñ 	
ð 9øð	
ùô
 ò Fä×"Ñ"Ð#AÀ1×EÑEûðFüsN   ‚B9EÂ;DÂ<.EÃ+*D ÄDÄD ÄEÄD Ä	EÄ(EÄ>EÅEÅEr,   )r   N)NN)(Ú__doc__rY   rx   r   r   Útypingr   r   Úlitellm._loggingr   Úlitellm._uuidr   Ú"litellm.integrations.custom_loggerr   Úlitellm.proxy._typesr	   r
   r   r   Ú'litellm.repositories.table_repositoriesr   Úlitellm.types.utilsr   r   r%   rR   Ú__annotations__r   Úboolr   r(   r/   r?   rC   rT   ÚTaskr]   ri   rr   rl   rB   r   r   ú<module>r‰      s   ðòó Û ß 'Ý ã Ý 1Ý Ý ;÷ó õ GÝ 7à<>Ð ˜5  c¨<Ð&7Ñ!8Ñ9Ó >Ø6WÐ ,¨eÓ Wñ ¨t°d©{ð  Àdó  ð ¸ð ÈDó ðAà˜d™
ðAð &ðAð " D™jð	Að
 	ˆ4�ZóAð cð ¨l¸TÑ.Aó ó>&ð
Ø#ðàóð6\¨¯©ð \¸ó \ðZØ#ðZà	óZð@  $Ø"ñ*Øð*àð*ð ˜d™
ð*ð &ð	*ð
 " D™jð*ð "ð*ð ˜‘*ð*ð �t‘ó*ðZ%FÐ4Eô %Fr   