From 30a54ef00728d087db41b3a464bf38a43e56444a Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Mon, 12 Aug 2024 10:56:11 -0700 Subject: [PATCH] v0 log KeyCreatedEvent --- litellm/integrations/slack_alerting.py | 49 +++++++++++++++++++++++++- litellm/proxy/_types.py | 9 +++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/litellm/integrations/slack_alerting.py b/litellm/integrations/slack_alerting.py index bb6698d7308..0ad403a9790 100644 --- a/litellm/integrations/slack_alerting.py +++ b/litellm/integrations/slack_alerting.py @@ -26,7 +26,13 @@ from litellm.caching import DualCache from litellm.integrations.custom_logger import CustomLogger from litellm.litellm_core_utils.litellm_logging import Logging from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler -from litellm.proxy._types import AlertType, CallInfo, UserAPIKeyAuth, WebhookEvent +from litellm.proxy._types import ( + AlertType, + CallInfo, + KeyCreatedEvent, + UserAPIKeyAuth, + WebhookEvent, +) from litellm.types.router import LiteLLM_Params from .email_templates.templates import * @@ -1788,3 +1794,44 @@ Model Info: verbose_proxy_logger.error("Error sending weekly spend report %s", e) pass + + async def send_virtual_key_event_slack( + self, + key_event: KeyCreatedEvent, + event_name: str, + ): + """ + Helper to send fallback statistics from prometheus server -> to slack + + This runs once per day and sends an overview of all the fallback statistics + """ + try: + message = f"`{event_name}`\n" + + key_event_dict = key_event.model_dump() + + # Add Created by information first + message += "*Created by:*\n" + for key, value in key_event_dict.items(): + if "created_by" in key: + message += f"{key}: `{value}`\n" + + # Add all non created by information next + message += "\n*Arguments passed:*\n" + for key, value in key_event_dict.items(): + if "created_by" not in key: + message += f"{key}: `{value}`\n" + + await self.send_alert( + message=message, + level="High", + alert_type="fallback_reports", + alerting_metadata={}, + ) + + except Exception as e: + verbose_proxy_logger.error( + "Error sending send_virtual_key_event_slack %s", e + ) + + return diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 5e0de6fb09a..0533b39628e 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1754,3 +1754,12 @@ class SSOUserDefinedValues(TypedDict): user_role: Optional[str] max_budget: Optional[float] budget_duration: Optional[str] + + +class KeyCreatedEvent(LiteLLMBase): + created_by_user_id: str + created_by_user_role: str + created_by_key_alias: Optional[str] + key_alias: Optional[str] + team_id: Optional[str] + max_budget: Optional[float]