aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py')
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py b/.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py
new file mode 100644
index 00000000..d6c83c38
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/proxy/management_helpers/audit_logs.py
@@ -0,0 +1,98 @@
+"""
+Functions to create audit logs for LiteLLM Proxy
+"""
+
+import json
+import uuid
+from datetime import datetime, timezone
+
+import litellm
+from litellm._logging import verbose_proxy_logger
+from litellm.proxy._types import (
+ AUDIT_ACTIONS,
+ LiteLLM_AuditLogs,
+ LitellmTableNames,
+ Optional,
+ UserAPIKeyAuth,
+)
+
+
+async def create_object_audit_log(
+ object_id: str,
+ action: AUDIT_ACTIONS,
+ litellm_changed_by: Optional[str],
+ user_api_key_dict: UserAPIKeyAuth,
+ litellm_proxy_admin_name: Optional[str],
+ table_name: LitellmTableNames,
+ before_value: Optional[str] = None,
+ after_value: Optional[str] = None,
+):
+ """
+ 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.
+ """
+ if not litellm.store_audit_logs:
+ return
+
+ await create_audit_log_for_update(
+ request_data=LiteLLM_AuditLogs(
+ id=str(uuid.uuid4()),
+ updated_at=datetime.now(timezone.utc),
+ changed_by=litellm_changed_by
+ or user_api_key_dict.user_id
+ or litellm_proxy_admin_name,
+ changed_by_api_key=user_api_key_dict.api_key,
+ table_name=table_name,
+ object_id=object_id,
+ action=action,
+ updated_values=after_value,
+ before_value=before_value,
+ )
+ )
+
+
+async def create_audit_log_for_update(request_data: LiteLLM_AuditLogs):
+ """
+ Create an audit log for an object.
+ """
+ if not litellm.store_audit_logs:
+ return
+
+ from litellm.proxy.proxy_server import premium_user, prisma_client
+
+ if premium_user is not True:
+ return
+
+ if litellm.store_audit_logs is not True:
+ return
+ if prisma_client is None:
+ raise Exception("prisma_client is None, no DB connected")
+
+ verbose_proxy_logger.debug("creating audit log for %s", request_data)
+
+ if isinstance(request_data.updated_values, dict):
+ request_data.updated_values = json.dumps(request_data.updated_values)
+
+ if isinstance(request_data.before_value, dict):
+ request_data.before_value = json.dumps(request_data.before_value)
+
+ _request_data = request_data.model_dump(exclude_none=True)
+
+ try:
+ await prisma_client.db.litellm_auditlog.create(
+ data={
+ **_request_data, # type: ignore
+ }
+ )
+ except Exception as e:
+ # [Non-Blocking Exception. Do not allow blocking LLM API call]
+ verbose_proxy_logger.error(f"Failed Creating audit log {e}")
+
+ return