send alert on all key events

This commit is contained in:
Ishaan Jaff 2024-08-12 11:39:24 -07:00
parent 97626b1c89
commit 0f7d575992
3 changed files with 28 additions and 23 deletions

View file

@ -29,8 +29,8 @@ from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler
from litellm.proxy._types import ( from litellm.proxy._types import (
AlertType, AlertType,
CallInfo, CallInfo,
KeyCreatedEvent,
UserAPIKeyAuth, UserAPIKeyAuth,
VirtualKeyEvent,
WebhookEvent, WebhookEvent,
) )
from litellm.types.router import LiteLLM_Params from litellm.types.router import LiteLLM_Params
@ -1797,7 +1797,7 @@ Model Info:
async def send_virtual_key_event_slack( async def send_virtual_key_event_slack(
self, self,
key_event: KeyCreatedEvent, key_event: VirtualKeyEvent,
event_name: str, event_name: str,
): ):
""" """
@ -1811,15 +1811,17 @@ Model Info:
key_event_dict = key_event.model_dump() key_event_dict = key_event.model_dump()
# Add Created by information first # Add Created by information first
message += "*Created by:*\n" message += "*Action Done by:*\n"
for key, value in key_event_dict.items(): for key, value in key_event_dict.items():
if "created_by" in key: if "created_by" in key:
message += f"{key}: `{value}`\n" message += f"{key}: `{value}`\n"
# Add all non created by information next # Add args sent to function in the alert
message += "\n*Arguments passed:*\n" message += "\n*Arguments passed:*\n"
for key, value in key_event_dict.items(): request_kwargs = key_event.request_kwargs
if "created_by" not in key: for key, value in request_kwargs.items():
if key == "user_api_key_dict":
continue
message += f"{key}: `{value}`\n" message += f"{key}: `{value}`\n"
await self.send_alert( await self.send_alert(

View file

@ -1756,10 +1756,8 @@ class SSOUserDefinedValues(TypedDict):
budget_duration: Optional[str] budget_duration: Optional[str]
class KeyCreatedEvent(LiteLLMBase): class VirtualKeyEvent(LiteLLMBase):
created_by_user_id: str created_by_user_id: str
created_by_user_role: str created_by_user_role: str
created_by_key_alias: Optional[str] created_by_key_alias: Optional[str]
key_alias: Optional[str] request_kwargs: dict
team_id: Optional[str]
max_budget: Optional[float]

View file

@ -13,7 +13,6 @@ from litellm.proxy._types import ( # key request types; user request types; tea
DeleteCustomerRequest, DeleteCustomerRequest,
DeleteTeamRequest, DeleteTeamRequest,
DeleteUserRequest, DeleteUserRequest,
KeyCreatedEvent,
KeyRequest, KeyRequest,
LiteLLM_TeamTable, LiteLLM_TeamTable,
ManagementEndpointLoggingPayload, ManagementEndpointLoggingPayload,
@ -24,6 +23,7 @@ from litellm.proxy._types import ( # key request types; user request types; tea
UpdateTeamRequest, UpdateTeamRequest,
UpdateUserRequest, UpdateUserRequest,
UserAPIKeyAuth, UserAPIKeyAuth,
VirtualKeyEvent,
) )
from litellm.proxy.common_utils.http_parsing_utils import _read_request_body from litellm.proxy.common_utils.http_parsing_utils import _read_request_body
from litellm.proxy.utils import PrismaClient from litellm.proxy.utils import PrismaClient
@ -203,24 +203,29 @@ async def send_management_endpoint_alert(
if premium_user is not True: if premium_user is not True:
return return
key_function_to_event_name = {
"generate_key_fn": "Virtual Key Created",
"update_key_fn": "Virtual Key Updated",
"delete_key_fn": "Virtual Key Deleted",
}
if ( if (
proxy_logging_obj is not None proxy_logging_obj is not None
and proxy_logging_obj.slack_alerting_instance is not None and proxy_logging_obj.slack_alerting_instance is not None
): ):
key_event = KeyCreatedEvent(
# Virtual Key Events
if function_name in key_function_to_event_name:
key_event = VirtualKeyEvent(
created_by_user_id=user_api_key_dict.user_id or "Unknown", created_by_user_id=user_api_key_dict.user_id or "Unknown",
created_by_user_role=user_api_key_dict.user_role or "Unknown", created_by_user_role=user_api_key_dict.user_role or "Unknown",
created_by_key_alias=user_api_key_dict.key_alias, created_by_key_alias=user_api_key_dict.key_alias,
key_alias=request_kwargs.get("key_alias"), request_kwargs=request_kwargs,
team_id=request_kwargs.get("team_id"),
max_budget=request_kwargs.get("max_budget"),
) )
if function_name == "generate_key_fn": event_name = key_function_to_event_name[function_name]
from litellm.proxy.proxy_server import proxy_logging_obj
await proxy_logging_obj.slack_alerting_instance.send_virtual_key_event_slack( await proxy_logging_obj.slack_alerting_instance.send_virtual_key_event_slack(
key_event=key_event, event_name="Virtual Key Created" key_event=key_event, event_name=event_name
) )