litellm-enterprise 0.1.18__tar.gz → 0.1.20__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.18 → litellm_enterprise-0.1.20}/PKG-INFO +2 -3
  2. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/llm_guard.py +1 -1
  3. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py +6 -0
  4. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/integrations/prometheus.py +30 -44
  5. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/management_endpoints/internal_user_endpoints.py +11 -5
  6. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/types/proxy/proxy_server.py +3 -1
  7. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/pyproject.toml +2 -2
  8. litellm_enterprise-0.1.18/litellm_enterprise/enterprise_callbacks/session_handler.py +0 -160
  9. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/LICENSE.md +0 -0
  10. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/README.md +0 -0
  11. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/__init__.py +0 -0
  12. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/callback_controls.py +0 -0
  13. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/example_logging_api.py +0 -0
  14. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/generic_api_callback.py +0 -0
  15. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/llama_guard.py +0 -0
  16. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secret_detection.py +0 -0
  17. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/__init__.py +0 -0
  18. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/adafruit.py +0 -0
  19. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/adobe.py +0 -0
  20. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/age_secret_key.py +0 -0
  21. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/airtable_api_key.py +0 -0
  22. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/algolia_api_key.py +0 -0
  23. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/alibaba.py +0 -0
  24. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/asana.py +0 -0
  25. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/atlassian_api_token.py +0 -0
  26. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/authress_access_key.py +0 -0
  27. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/beamer_api_token.py +0 -0
  28. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/bitbucket.py +0 -0
  29. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/bittrex.py +0 -0
  30. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/clojars_api_token.py +0 -0
  31. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/codecov_access_token.py +0 -0
  32. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/coinbase_access_token.py +0 -0
  33. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/confluent.py +0 -0
  34. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/contentful_api_token.py +0 -0
  35. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/databricks_api_token.py +0 -0
  36. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/datadog_access_token.py +0 -0
  37. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/defined_networking_api_token.py +0 -0
  38. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/digitalocean.py +0 -0
  39. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/discord.py +0 -0
  40. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/doppler_api_token.py +0 -0
  41. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/droneci_access_token.py +0 -0
  42. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/dropbox.py +0 -0
  43. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/duffel_api_token.py +0 -0
  44. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/dynatrace_api_token.py +0 -0
  45. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/easypost.py +0 -0
  46. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/etsy_access_token.py +0 -0
  47. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/facebook_access_token.py +0 -0
  48. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/fastly_api_token.py +0 -0
  49. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/finicity.py +0 -0
  50. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/finnhub_access_token.py +0 -0
  51. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/flickr_access_token.py +0 -0
  52. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/flutterwave.py +0 -0
  53. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/frameio_api_token.py +0 -0
  54. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/freshbooks_access_token.py +0 -0
  55. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gcp_api_key.py +0 -0
  56. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/github_token.py +0 -0
  57. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gitlab.py +0 -0
  58. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gitter_access_token.py +0 -0
  59. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/gocardless_api_token.py +0 -0
  60. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/grafana.py +0 -0
  61. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/hashicorp_tf_api_token.py +0 -0
  62. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/heroku_api_key.py +0 -0
  63. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/hubspot_api_key.py +0 -0
  64. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/huggingface.py +0 -0
  65. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/intercom_api_key.py +0 -0
  66. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/jfrog.py +0 -0
  67. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/jwt.py +0 -0
  68. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/kraken_access_token.py +0 -0
  69. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/kucoin.py +0 -0
  70. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/launchdarkly_access_token.py +0 -0
  71. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/linear.py +0 -0
  72. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/linkedin.py +0 -0
  73. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/lob.py +0 -0
  74. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mailgun.py +0 -0
  75. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mapbox_api_token.py +0 -0
  76. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/mattermost_access_token.py +0 -0
  77. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/messagebird.py +0 -0
  78. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/microsoft_teams_webhook.py +0 -0
  79. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/netlify_access_token.py +0 -0
  80. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/new_relic.py +0 -0
  81. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/nytimes_access_token.py +0 -0
  82. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/okta_access_token.py +0 -0
  83. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/openai_api_key.py +0 -0
  84. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/planetscale.py +0 -0
  85. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/postman_api_token.py +0 -0
  86. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/prefect_api_token.py +0 -0
  87. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/pulumi_api_token.py +0 -0
  88. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/pypi_upload_token.py +0 -0
  89. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/rapidapi_access_token.py +0 -0
  90. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/readme_api_token.py +0 -0
  91. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/rubygems_api_token.py +0 -0
  92. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/scalingo_api_token.py +0 -0
  93. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendbird.py +0 -0
  94. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendgrid_api_token.py +0 -0
  95. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sendinblue_api_token.py +0 -0
  96. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sentry_access_token.py +0 -0
  97. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/shippo_api_token.py +0 -0
  98. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/shopify.py +0 -0
  99. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/slack.py +0 -0
  100. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/snyk_api_token.py +0 -0
  101. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/squarespace_access_token.py +0 -0
  102. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/sumologic.py +0 -0
  103. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/telegram_bot_api_token.py +0 -0
  104. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/travisci_access_token.py +0 -0
  105. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/twitch_api_token.py +0 -0
  106. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/twitter.py +0 -0
  107. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/typeform_api_token.py +0 -0
  108. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/vault.py +0 -0
  109. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/yandex.py +0 -0
  110. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/secrets_plugins/zendesk_secret_key.py +0 -0
  111. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py +0 -0
  112. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/send_emails/endpoints.py +0 -0
  113. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/send_emails/resend_email.py +0 -0
  114. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/enterprise_callbacks/send_emails/smtp_email.py +0 -0
  115. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/integrations/custom_guardrail.py +0 -0
  116. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/litellm_core_utils/litellm_logging.py +0 -0
  117. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/audit_logging_endpoints.py +0 -0
  118. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/auth/__init__.py +0 -0
  119. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/auth/custom_sso_handler.py +0 -0
  120. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/auth/route_checks.py +0 -0
  121. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/auth/user_api_key_auth.py +0 -0
  122. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/common_utils/check_batch_cost.py +0 -0
  123. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/enterprise_routes.py +0 -0
  124. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/guardrails/endpoints.py +0 -0
  125. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/hooks/managed_files.py +0 -0
  126. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/management_endpoints/__init__.py +0 -0
  127. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/management_endpoints/key_management_endpoints.py +0 -0
  128. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/proxy_server.py +0 -0
  129. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/readme.md +0 -0
  130. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/utils.py +0 -0
  131. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/proxy/vector_stores/endpoints.py +0 -0
  132. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/types/enterprise_callbacks/send_emails.py +0 -0
  133. {litellm_enterprise-0.1.18 → litellm_enterprise-0.1.20}/litellm_enterprise/types/proxy/audit_logging_endpoints.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: litellm-enterprise
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Summary: Package for LiteLLM Enterprise features
5
5
  Author: BerriAI
6
6
  Requires-Python: >=3.8, !=2.7.*, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*
@@ -9,7 +9,6 @@ Classifier: Programming Language :: Python :: 3.9
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
12
  Project-URL: Documentation, https://docs.litellm.ai
14
13
  Project-URL: Homepage, https://litellm.ai
15
14
  Project-URL: Repository, https://github.com/BerriAI/litellm
@@ -63,7 +63,7 @@ class _ENTERPRISE_LLMGuard(CustomLogger):
63
63
  analyze_url, json=analyze_payload
64
64
  ) as response:
65
65
  redacted_text = await response.json()
66
- verbose_proxy_logger.info(
66
+ verbose_proxy_logger.debug(
67
67
  f"LLM Guard: Received response - {redacted_text}"
68
68
  )
69
69
  if redacted_text is not None:
@@ -109,6 +109,9 @@ class PagerDutyAlerting(SlackAlerting):
109
109
  error_llm_provider=error_info.get("llm_provider"),
110
110
  user_api_key_hash=_meta.get("user_api_key_hash"),
111
111
  user_api_key_alias=_meta.get("user_api_key_alias"),
112
+ user_api_key_spend=_meta.get("user_api_key_spend"),
113
+ user_api_key_max_budget=_meta.get("user_api_key_max_budget"),
114
+ user_api_key_budget_reset_at=_meta.get("user_api_key_budget_reset_at"),
112
115
  user_api_key_org_id=_meta.get("user_api_key_org_id"),
113
116
  user_api_key_team_id=_meta.get("user_api_key_team_id"),
114
117
  user_api_key_user_id=_meta.get("user_api_key_user_id"),
@@ -191,6 +194,9 @@ class PagerDutyAlerting(SlackAlerting):
191
194
  error_llm_provider="HangingRequest",
192
195
  user_api_key_hash=user_api_key_dict.api_key,
193
196
  user_api_key_alias=user_api_key_dict.key_alias,
197
+ user_api_key_spend=user_api_key_dict.spend,
198
+ user_api_key_max_budget=user_api_key_dict.max_budget,
199
+ user_api_key_budget_reset_at=user_api_key_dict.budget_reset_at.isoformat() if user_api_key_dict.budget_reset_at else None,
194
200
  user_api_key_org_id=user_api_key_dict.org_id,
195
201
  user_api_key_team_id=user_api_key_dict.team_id,
196
202
  user_api_key_user_id=user_api_key_dict.user_id,
@@ -95,13 +95,16 @@ class PrometheusLogger(CustomLogger):
95
95
  self.litellm_llm_api_time_to_first_token_metric = self._histogram_factory(
96
96
  "litellm_llm_api_time_to_first_token_metric",
97
97
  "Time to first token for a models LLM API call",
98
- labelnames=[
99
- "model",
100
- "hashed_api_key",
101
- "api_key_alias",
102
- "team",
103
- "team_alias",
104
- ],
98
+ # labelnames=[
99
+ # "model",
100
+ # "hashed_api_key",
101
+ # "api_key_alias",
102
+ # "team",
103
+ # "team_alias",
104
+ # ],
105
+ labelnames=self.get_labels_for_metric(
106
+ "litellm_llm_api_time_to_first_token_metric"
107
+ ),
105
108
  buckets=LATENCY_BUCKETS,
106
109
  )
107
110
 
@@ -109,15 +112,7 @@ class PrometheusLogger(CustomLogger):
109
112
  self.litellm_spend_metric = self._counter_factory(
110
113
  "litellm_spend_metric",
111
114
  "Total spend on LLM requests",
112
- labelnames=[
113
- "end_user",
114
- "hashed_api_key",
115
- "api_key_alias",
116
- "model",
117
- "team",
118
- "team_alias",
119
- "user",
120
- ],
115
+ labelnames=self.get_labels_for_metric("litellm_spend_metric"),
121
116
  )
122
117
 
123
118
  # Counter for total_output_tokens
@@ -243,25 +238,18 @@ class PrometheusLogger(CustomLogger):
243
238
  labelnames=["api_provider"],
244
239
  )
245
240
 
246
- # Get all keys
247
- _logged_llm_labels = [
248
- UserAPIKeyLabelNames.v2_LITELLM_MODEL_NAME.value,
249
- UserAPIKeyLabelNames.MODEL_ID.value,
250
- UserAPIKeyLabelNames.API_BASE.value,
251
- UserAPIKeyLabelNames.API_PROVIDER.value,
252
- ]
253
-
254
241
  # Metric for deployment state
255
242
  self.litellm_deployment_state = self._gauge_factory(
256
243
  "litellm_deployment_state",
257
244
  "LLM Deployment Analytics - The state of the deployment: 0 = healthy, 1 = partial outage, 2 = complete outage",
258
- labelnames=_logged_llm_labels,
245
+ labelnames=self.get_labels_for_metric("litellm_deployment_state"),
259
246
  )
260
247
 
261
248
  self.litellm_deployment_cooled_down = self._counter_factory(
262
249
  "litellm_deployment_cooled_down",
263
250
  "LLM Deployment Analytics - Number of times a deployment has been cooled down by LiteLLM load balancing logic. exception_status is the status of the exception that caused the deployment to be cooled down",
264
- labelnames=_logged_llm_labels + [EXCEPTION_STATUS],
251
+ # labelnames=_logged_llm_labels + [EXCEPTION_STATUS],
252
+ labelnames=self.get_labels_for_metric("litellm_deployment_cooled_down"),
265
253
  )
266
254
 
267
255
  self.litellm_deployment_success_responses = self._counter_factory(
@@ -327,6 +315,7 @@ class PrometheusLogger(CustomLogger):
327
315
  documentation="deprecated - use litellm_proxy_total_requests_metric. Total number of LLM calls to litellm - track total per API Key, team, user",
328
316
  labelnames=self.get_labels_for_metric("litellm_requests_metric"),
329
317
  )
318
+
330
319
  except Exception as e:
331
320
  print_verbose(f"Got exception on init prometheus client {str(e)}")
332
321
  raise e
@@ -1052,20 +1041,12 @@ class PrometheusLogger(CustomLogger):
1052
1041
 
1053
1042
  _labels = prometheus_label_factory(
1054
1043
  supported_enum_labels=self.get_labels_for_metric(
1055
- metric_name="litellm_proxy_total_requests_metric"
1044
+ metric_name="litellm_spend_metric"
1056
1045
  ),
1057
1046
  enum_values=enum_values,
1058
1047
  )
1059
1048
 
1060
- self.litellm_spend_metric.labels(
1061
- end_user_id,
1062
- user_api_key,
1063
- user_api_key_alias,
1064
- model,
1065
- user_api_team,
1066
- user_api_team_alias,
1067
- user_id,
1068
- ).inc(response_cost)
1049
+ self.litellm_spend_metric.labels(**_labels).inc(response_cost)
1069
1050
 
1070
1051
  def _set_virtual_key_rate_limit_metrics(
1071
1052
  self,
@@ -2293,7 +2274,9 @@ def get_custom_labels_from_metadata(metadata: dict) -> Dict[str, str]:
2293
2274
  return result
2294
2275
 
2295
2276
 
2296
- def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: str) -> bool:
2277
+ def _tag_matches_wildcard_configured_pattern(
2278
+ tags: List[str], configured_tag: str
2279
+ ) -> bool:
2297
2280
  """
2298
2281
  Check if any of the request tags matches a wildcard configured pattern
2299
2282
 
@@ -2318,6 +2301,7 @@ def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: st
2318
2301
  import re
2319
2302
 
2320
2303
  from litellm.router_utils.pattern_match_deployments import PatternMatchRouter
2304
+
2321
2305
  pattern_router = PatternMatchRouter()
2322
2306
  regex_pattern = pattern_router._pattern_to_regex(configured_tag)
2323
2307
  return any(re.match(pattern=regex_pattern, string=tag) for tag in tags)
@@ -2326,11 +2310,11 @@ def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: st
2326
2310
  def get_custom_labels_from_tags(tags: List[str]) -> Dict[str, str]:
2327
2311
  """
2328
2312
  Get custom labels from tags based on admin configuration.
2329
-
2313
+
2330
2314
  Supports both exact matches and wildcard patterns:
2331
2315
  - Exact match: "prod" matches "prod" exactly
2332
- - Wildcard pattern: "User-Agent: curl/*" matches "User-Agent: curl/7.68.0"
2333
-
2316
+ - Wildcard pattern: "User-Agent: curl/*" matches "User-Agent: curl/7.68.0"
2317
+
2334
2318
  Reuses PatternMatchRouter for wildcard pattern matching.
2335
2319
 
2336
2320
  Returns dict of label_name: "true" if the tag matches the configured tag, "false" otherwise
@@ -2358,17 +2342,19 @@ def get_custom_labels_from_tags(tags: List[str]) -> Dict[str, str]:
2358
2342
 
2359
2343
  for configured_tag in configured_tags:
2360
2344
  label_name = _sanitize_prometheus_label_name(f"tag_{configured_tag}")
2361
-
2345
+
2362
2346
  # Check for exact match first (backwards compatibility)
2363
2347
  if configured_tag in tags:
2364
2348
  result[label_name] = "true"
2365
2349
  continue
2366
-
2350
+
2367
2351
  # Use PatternMatchRouter for wildcard pattern matching
2368
- if "*" in configured_tag and _tag_matches_wildcard_configured_pattern(tags=tags, configured_tag=configured_tag):
2352
+ if "*" in configured_tag and _tag_matches_wildcard_configured_pattern(
2353
+ tags=tags, configured_tag=configured_tag
2354
+ ):
2369
2355
  result[label_name] = "true"
2370
2356
  continue
2371
-
2357
+
2372
2358
  # No match found
2373
2359
  result[label_name] = "false"
2374
2360
 
@@ -2,6 +2,8 @@
2
2
  Enterprise internal user management endpoints
3
3
  """
4
4
 
5
+ import os
6
+
5
7
  from fastapi import APIRouter, Depends, HTTPException
6
8
 
7
9
  from litellm.proxy._types import UserAPIKeyAuth
@@ -21,7 +23,7 @@ async def available_enterprise_users(
21
23
  """
22
24
  For keys with `max_users` set, return the list of users that are allowed to use the key.
23
25
  """
24
- from litellm.proxy._types import CommonProxyErrors
26
+ from litellm.proxy._types import CommonProxyErrors, EnterpriseLicenseData
25
27
  from litellm.proxy.proxy_server import (
26
28
  premium_user,
27
29
  premium_user_data,
@@ -34,10 +36,14 @@ async def available_enterprise_users(
34
36
  detail={"error": CommonProxyErrors.db_not_connected_error.value},
35
37
  )
36
38
 
37
- if premium_user is None:
38
- raise HTTPException(
39
- status_code=500, detail={"error": CommonProxyErrors.not_premium_user.value}
40
- )
39
+ if not premium_user:
40
+ # check if SSO is enabled - show 5 user limit
41
+ from litellm.proxy.auth.auth_utils import _has_user_setup_sso
42
+
43
+ if _has_user_setup_sso():
44
+ premium_user_data = EnterpriseLicenseData(
45
+ max_users=5,
46
+ )
41
47
 
42
48
  # Count number of rows in LiteLLM_UserTable
43
49
  user_count = await prisma_client.db.litellm_usertable.count()
@@ -1,4 +1,6 @@
1
- from typing import Literal, TypedDict
1
+ from typing import Literal
2
+
3
+ from typing_extensions import TypedDict
2
4
 
3
5
 
4
6
  class CustomAuthSettings(TypedDict):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "litellm-enterprise"
3
- version = "0.1.18"
3
+ version = "0.1.20"
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.18"
25
+ version = "0.1.20"
26
26
  version_files = [
27
27
  "pyproject.toml:version",
28
28
  "../requirements.txt:litellm-enterprise==",
@@ -1,160 +0,0 @@
1
- import json
2
- from typing import TYPE_CHECKING, Any, List, Optional, Union, cast
3
-
4
- from litellm._logging import verbose_proxy_logger
5
- from litellm.proxy._types import SpendLogsPayload
6
- from litellm.responses.utils import ResponsesAPIRequestUtils
7
- from litellm.types.llms.openai import (
8
- AllMessageValues,
9
- ChatCompletionResponseMessage,
10
- GenericChatCompletionMessage,
11
- ResponseInputParam,
12
- )
13
- from litellm.types.utils import ChatCompletionMessageToolCall, Message, ModelResponse
14
-
15
- if TYPE_CHECKING:
16
- from litellm.responses.litellm_completion_transformation.transformation import (
17
- ChatCompletionSession,
18
- )
19
- else:
20
- ChatCompletionSession = Any
21
-
22
-
23
- class _ENTERPRISE_ResponsesSessionHandler:
24
- @staticmethod
25
- async def get_chat_completion_message_history_for_previous_response_id(
26
- previous_response_id: str,
27
- ) -> ChatCompletionSession:
28
- """
29
- Return the chat completion message history for a previous response id
30
- """
31
- from litellm.responses.litellm_completion_transformation.transformation import (
32
- ChatCompletionSession,
33
- LiteLLMCompletionResponsesConfig,
34
- )
35
-
36
- verbose_proxy_logger.debug(
37
- "inside get_chat_completion_message_history_for_previous_response_id"
38
- )
39
- all_spend_logs: List[
40
- SpendLogsPayload
41
- ] = await _ENTERPRISE_ResponsesSessionHandler.get_all_spend_logs_for_previous_response_id(
42
- previous_response_id
43
- )
44
- verbose_proxy_logger.debug(
45
- "found %s spend logs for this response id", len(all_spend_logs)
46
- )
47
-
48
- litellm_session_id: Optional[str] = None
49
- if len(all_spend_logs) > 0:
50
- litellm_session_id = all_spend_logs[0].get("session_id")
51
-
52
- chat_completion_message_history: List[
53
- Union[
54
- AllMessageValues,
55
- GenericChatCompletionMessage,
56
- ChatCompletionMessageToolCall,
57
- ChatCompletionResponseMessage,
58
- Message,
59
- ]
60
- ] = []
61
- for spend_log in all_spend_logs:
62
- proxy_server_request: Union[str, dict] = (
63
- spend_log.get("proxy_server_request") or "{}"
64
- )
65
- proxy_server_request_dict: Optional[dict] = None
66
- response_input_param: Optional[Union[str, ResponseInputParam]] = None
67
- if isinstance(proxy_server_request, dict):
68
- proxy_server_request_dict = proxy_server_request
69
- else:
70
- proxy_server_request_dict = json.loads(proxy_server_request)
71
-
72
- ############################################################
73
- # Add Input messages for this Spend Log
74
- ############################################################
75
- if proxy_server_request_dict:
76
- _response_input_param = proxy_server_request_dict.get("input", None)
77
- if isinstance(_response_input_param, str):
78
- response_input_param = _response_input_param
79
- elif isinstance(_response_input_param, dict):
80
- response_input_param = cast(
81
- ResponseInputParam, _response_input_param
82
- )
83
-
84
- if response_input_param:
85
- chat_completion_messages = LiteLLMCompletionResponsesConfig.transform_responses_api_input_to_messages(
86
- input=response_input_param,
87
- responses_api_request=proxy_server_request_dict or {},
88
- )
89
- chat_completion_message_history.extend(chat_completion_messages)
90
-
91
- ############################################################
92
- # Add Output messages for this Spend Log
93
- ############################################################
94
- _response_output = spend_log.get("response", "{}")
95
- if isinstance(_response_output, dict):
96
- # transform `ChatCompletion Response` to `ResponsesAPIResponse`
97
- model_response = ModelResponse(**_response_output)
98
- for choice in model_response.choices:
99
- if hasattr(choice, "message"):
100
- chat_completion_message_history.append(
101
- getattr(choice, "message")
102
- )
103
-
104
- verbose_proxy_logger.debug(
105
- "chat_completion_message_history %s",
106
- json.dumps(chat_completion_message_history, indent=4, default=str),
107
- )
108
- return ChatCompletionSession(
109
- messages=chat_completion_message_history,
110
- litellm_session_id=litellm_session_id,
111
- )
112
-
113
- @staticmethod
114
- async def get_all_spend_logs_for_previous_response_id(
115
- previous_response_id: str,
116
- ) -> List[SpendLogsPayload]:
117
- """
118
- Get all spend logs for a previous response id
119
-
120
-
121
- SQL query
122
-
123
- SELECT session_id FROM spend_logs WHERE response_id = previous_response_id, SELECT * FROM spend_logs WHERE session_id = session_id
124
- """
125
- from litellm.proxy.proxy_server import prisma_client
126
-
127
- verbose_proxy_logger.debug("decoding response id=%s", previous_response_id)
128
-
129
- decoded_response_id = (
130
- ResponsesAPIRequestUtils._decode_responses_api_response_id(
131
- previous_response_id
132
- )
133
- )
134
- previous_response_id = decoded_response_id.get(
135
- "response_id", previous_response_id
136
- )
137
- if prisma_client is None:
138
- return []
139
-
140
- query = """
141
- WITH matching_session AS (
142
- SELECT session_id
143
- FROM "LiteLLM_SpendLogs"
144
- WHERE request_id = $1
145
- )
146
- SELECT *
147
- FROM "LiteLLM_SpendLogs"
148
- WHERE session_id IN (SELECT session_id FROM matching_session)
149
- ORDER BY "endTime" ASC;
150
- """
151
-
152
- spend_logs = await prisma_client.db.query_raw(query, previous_response_id)
153
-
154
- verbose_proxy_logger.debug(
155
- "Found the following spend logs for previous response id %s: %s",
156
- previous_response_id,
157
- json.dumps(spend_logs, indent=4, default=str),
158
- )
159
-
160
- return spend_logs