litellm-enterprise 0.1.30__tar.gz → 0.1.31__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/PKG-INFO +1 -1
  2. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py +19 -2
  3. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/pyproject.toml +2 -2
  4. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/LICENSE.md +0 -0
  5. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/README.md +0 -0
  6. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/__init__.py +0 -0
  7. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/callback_controls.py +0 -0
  8. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/example_logging_api.py +0 -0
  9. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/llama_guard.py +0 -0
  10. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/llm_guard.py +0 -0
  11. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py +0 -0
  12. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secret_detection.py +0 -0
  13. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/__init__.py +0 -0
  14. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/adafruit.py +0 -0
  15. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/adobe.py +0 -0
  16. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/age_secret_key.py +0 -0
  17. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/airtable_api_key.py +0 -0
  18. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/algolia_api_key.py +0 -0
  19. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/alibaba.py +0 -0
  20. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/asana.py +0 -0
  21. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/atlassian_api_token.py +0 -0
  22. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/authress_access_key.py +0 -0
  23. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/beamer_api_token.py +0 -0
  24. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/bitbucket.py +0 -0
  25. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/bittrex.py +0 -0
  26. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/clojars_api_token.py +0 -0
  27. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/codecov_access_token.py +0 -0
  28. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/coinbase_access_token.py +0 -0
  29. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/confluent.py +0 -0
  30. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/contentful_api_token.py +0 -0
  31. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/databricks_api_token.py +0 -0
  32. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/datadog_access_token.py +0 -0
  33. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/defined_networking_api_token.py +0 -0
  34. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/digitalocean.py +0 -0
  35. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/discord.py +0 -0
  36. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/doppler_api_token.py +0 -0
  37. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/droneci_access_token.py +0 -0
  38. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/dropbox.py +0 -0
  39. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/duffel_api_token.py +0 -0
  40. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/dynatrace_api_token.py +0 -0
  41. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/easypost.py +0 -0
  42. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/etsy_access_token.py +0 -0
  43. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/facebook_access_token.py +0 -0
  44. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/fastly_api_token.py +0 -0
  45. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/finicity.py +0 -0
  46. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/finnhub_access_token.py +0 -0
  47. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/flickr_access_token.py +0 -0
  48. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/flutterwave.py +0 -0
  49. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/frameio_api_token.py +0 -0
  50. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/freshbooks_access_token.py +0 -0
  51. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gcp_api_key.py +0 -0
  52. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/github_token.py +0 -0
  53. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gitlab.py +0 -0
  54. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gitter_access_token.py +0 -0
  55. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gocardless_api_token.py +0 -0
  56. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/grafana.py +0 -0
  57. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/hashicorp_tf_api_token.py +0 -0
  58. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/heroku_api_key.py +0 -0
  59. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/hubspot_api_key.py +0 -0
  60. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/huggingface.py +0 -0
  61. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/intercom_api_key.py +0 -0
  62. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/jfrog.py +0 -0
  63. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/jwt.py +0 -0
  64. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/kraken_access_token.py +0 -0
  65. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/kucoin.py +0 -0
  66. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/launchdarkly_access_token.py +0 -0
  67. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/linear.py +0 -0
  68. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/linkedin.py +0 -0
  69. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/lob.py +0 -0
  70. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mailgun.py +0 -0
  71. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mapbox_api_token.py +0 -0
  72. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mattermost_access_token.py +0 -0
  73. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/messagebird.py +0 -0
  74. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/microsoft_teams_webhook.py +0 -0
  75. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/netlify_access_token.py +0 -0
  76. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/new_relic.py +0 -0
  77. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/nytimes_access_token.py +0 -0
  78. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/okta_access_token.py +0 -0
  79. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/openai_api_key.py +0 -0
  80. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/planetscale.py +0 -0
  81. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/postman_api_token.py +0 -0
  82. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/prefect_api_token.py +0 -0
  83. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/pulumi_api_token.py +0 -0
  84. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/pypi_upload_token.py +0 -0
  85. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/rapidapi_access_token.py +0 -0
  86. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/readme_api_token.py +0 -0
  87. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/rubygems_api_token.py +0 -0
  88. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/scalingo_api_token.py +0 -0
  89. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendbird.py +0 -0
  90. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendgrid_api_token.py +0 -0
  91. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendinblue_api_token.py +0 -0
  92. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sentry_access_token.py +0 -0
  93. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/shippo_api_token.py +0 -0
  94. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/shopify.py +0 -0
  95. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/slack.py +0 -0
  96. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/snyk_api_token.py +0 -0
  97. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/squarespace_access_token.py +0 -0
  98. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sumologic.py +0 -0
  99. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/telegram_bot_api_token.py +0 -0
  100. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/travisci_access_token.py +0 -0
  101. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/twitch_api_token.py +0 -0
  102. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/twitter.py +0 -0
  103. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/typeform_api_token.py +0 -0
  104. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/vault.py +0 -0
  105. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/yandex.py +0 -0
  106. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/secrets_plugins/zendesk_secret_key.py +0 -0
  107. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/send_emails/endpoints.py +0 -0
  108. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/send_emails/resend_email.py +0 -0
  109. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/send_emails/sendgrid_email.py +0 -0
  110. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/enterprise_callbacks/send_emails/smtp_email.py +0 -0
  111. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/integrations/custom_guardrail.py +0 -0
  112. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/litellm_core_utils/litellm_logging.py +0 -0
  113. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/__init__.py +0 -0
  114. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/audit_logging_endpoints.py +0 -0
  115. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/auth/__init__.py +0 -0
  116. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/auth/custom_sso_handler.py +0 -0
  117. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/auth/route_checks.py +0 -0
  118. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/auth/user_api_key_auth.py +0 -0
  119. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/common_utils/__init__.py +0 -0
  120. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/common_utils/check_batch_cost.py +0 -0
  121. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/common_utils/check_responses_cost.py +0 -0
  122. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/enterprise_routes.py +0 -0
  123. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/hooks/managed_files.py +0 -0
  124. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/management_endpoints/__init__.py +0 -0
  125. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/management_endpoints/internal_user_endpoints.py +0 -0
  126. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/management_endpoints/key_management_endpoints.py +0 -0
  127. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/proxy_server.py +0 -0
  128. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/readme.md +0 -0
  129. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/utils.py +0 -0
  130. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/proxy/vector_stores/endpoints.py +0 -0
  131. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/types/enterprise_callbacks/send_emails.py +0 -0
  132. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/types/proxy/audit_logging_endpoints.py +0 -0
  133. {litellm_enterprise-0.1.30 → litellm_enterprise-0.1.31}/litellm_enterprise/types/proxy/proxy_server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: litellm-enterprise
3
- Version: 0.1.30
3
+ Version: 0.1.31
4
4
  Summary: Package for LiteLLM Enterprise features
5
5
  License-File: LICENSE.md
6
6
  Author: BerriAI
@@ -245,15 +245,25 @@ class BaseEmailLogger(CustomLogger):
245
245
  )
246
246
  return
247
247
 
248
+ # Validate that we have at least one valid email address
249
+ first_recipient_email = recipient_emails[0]
250
+ if not first_recipient_email or not first_recipient_email.strip():
251
+ verbose_proxy_logger.warning(
252
+ f"Invalid recipient email found for team soft budget alert. event={event.model_dump(exclude_none=True)}"
253
+ )
254
+ return
255
+
248
256
  verbose_proxy_logger.debug(
249
257
  f"send_team_soft_budget_alert_email_event: {json.dumps(event.model_dump(exclude_none=True), indent=4, default=str)}"
250
258
  )
251
259
 
252
260
  # Get email params using the first recipient email (for template formatting)
261
+ # For team alerts with alert_emails, we don't need user_id lookup since we already have email addresses
262
+ # Pass user_id=None to prevent _get_email_params from trying to look up email from a potentially None user_id
253
263
  email_params = await self._get_email_params(
254
264
  email_event=EmailEvent.soft_budget_crossed,
255
- user_id=event.user_id,
256
- user_email=recipient_emails[0],
265
+ user_id=None, # Team alerts don't require user_id when alert_emails are provided
266
+ user_email=first_recipient_email,
257
267
  event_message=event.event_message,
258
268
  )
259
269
 
@@ -361,6 +371,13 @@ class BaseEmailLogger(CustomLogger):
361
371
  if user_info.event_group == Litellm_EntityType.TEAM:
362
372
  if user_info.soft_budget is None:
363
373
  return
374
+ # For team soft budget alerts, require alert_emails to be configured
375
+ # Team soft budget alerts are sent via metadata.soft_budget_alerting_emails
376
+ if user_info.alert_emails is None or len(user_info.alert_emails) == 0:
377
+ verbose_proxy_logger.debug(
378
+ "Skipping team soft budget email alert: no alert_emails configured",
379
+ )
380
+ return
364
381
  else:
365
382
  # For non-team alerts, require either max_budget or soft_budget
366
383
  if user_info.max_budget is None and user_info.soft_budget is None:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "litellm-enterprise"
3
- version = "0.1.30"
3
+ version = "0.1.31"
4
4
  description = "Package for LiteLLM Enterprise features"
5
5
  authors = ["BerriAI"]
6
6
  readme = "README.md"
@@ -22,7 +22,7 @@ requires = ["poetry-core"]
22
22
  build-backend = "poetry.core.masonry.api"
23
23
 
24
24
  [tool.commitizen]
25
- version = "0.1.30"
25
+ version = "0.1.31"
26
26
  version_files = [
27
27
  "pyproject.toml:version",
28
28
  "../requirements.txt:litellm-enterprise==",