mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-02 02:11:58 +00:00
* feat(proxy): email alerts at configured percentages of a team member budget
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(alerting): label team member budget crossings as team member budget
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* test(auth): cover the team member alert dispatch from _check_team_member_budget
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(email): drop the emoji from the team member budget alert template
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(proxy): ignore team member alert thresholds outside 1 to 100 on both the backend and the dashboard
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(proxy): bound team member alert threshold key length before int parsing
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* test(integration): drop the legacy covers marker from the team member alert test
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(team): reject malformed team_member_max_budget_alert_emails on team writes
Thresholds outside 1-100, non-list recipients, and invalid emails now return 422 on
/team/new, /team/update and PATCH /team/{id} instead of being stored and silently
ignored. The value is stored canonically. Read-side LiteLLM_TeamTable is unchanged,
and the PATCH body stays a raw merge patch so a null threshold still deletes it.
* fix(auth): enforce and alert on team member budgets only in common_checks
The builder re-checked the team member budget inline before common_checks ran the same
check, so one request that crossed a team_member_max_budget_alert_emails threshold
dispatched two alerts. Drop the inline check; common_checks is the single authorization
point and already covers per-member rows, the team default member budget, zero-cost
skips and the cross-pod spend counter. Its 422 message now uses the TeamMember=user:team
form the builder and budget reservation already returned.
* Revert "fix(team): reject malformed team_member_max_budget_alert_emails on team writes"
This reverts commit
|
||
|---|---|---|
| .. | ||
| batching_handler.py | ||
| budget_alert_types.py | ||
| hanging_request_check.py | ||
| ms_teams.py | ||
| Readme.md | ||
| slack_alerting.py | ||
| user_spend_alerts.py | ||
| utils.py | ||
Slack Alerting on LiteLLM Gateway
This folder contains the Slack Alerting integration for LiteLLM Gateway.
Folder Structure
slack_alerting.py: This is the main file that handles sending different types of alertsbatching_handler.py: Handles Batching + sending Httpx Post requests to slack. Slack alerts are sent every 10s or when events are greater than X events. Done to ensure litellm has good performance under high traffictypes.py: This file contains the AlertType enum which is used to define the different types of alerts that can be sent to Slack.utils.py: This file contains common utils used specifically for slack alerting
Budget Alert Types
The budget_alert_types.py module provides a flexible framework for handling different types of budget alerts:
BaseBudgetAlertType: An abstract base class with abstract methods that all alert types must implement:get_event_group(): Returns the Litellm_EntityType for the alertget_event_message(): Returns the message prefix for the alertget_id(user_info): Returns the ID to use for caching/tracking the alert
Concrete implementations include:
ProxyBudgetAlert: Alerting for proxy-level budget concernsSoftBudgetAlert: Alerting when soft budgets are crossedUserBudgetAlert: Alerting for user-level budget concernsTeamBudgetAlert: Alerting for team-level budget concernsTokenBudgetAlert: Alerting for API key budget concernsProjectedLimitExceededAlert: Alerting when projected spend will exceed budget
Use the get_budget_alert_type() factory function to get the appropriate alert type class for a given alert type string:
from litellm.integrations.SlackAlerting.budget_alert_types import get_budget_alert_type
# Get the appropriate handler
budget_alert_class = get_budget_alert_type("user_budget")
# Use the handler methods
event_group = budget_alert_class.get_event_group() # Returns Litellm_EntityType.USER
event_message = budget_alert_class.get_event_message() # Returns "User Budget: "
cache_id = budget_alert_class.get_id(user_info) # Returns user_id
To add a new budget alert type, simply create a new class that extends BaseBudgetAlertType and implements all the required methods, then add it to the dictionary in the get_budget_alert_type() function.