aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py')
-rw-r--r--.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py b/.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py
new file mode 100644
index 00000000..0dc8bae5
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/litellm/integrations/SlackAlerting/utils.py
@@ -0,0 +1,92 @@
+"""
+Utils used for slack alerting
+"""
+
+import asyncio
+from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
+
+from litellm.proxy._types import AlertType
+from litellm.secret_managers.main import get_secret
+
+if TYPE_CHECKING:
+ from litellm.litellm_core_utils.litellm_logging import Logging as _Logging
+
+ Logging = _Logging
+else:
+ Logging = Any
+
+
+def process_slack_alerting_variables(
+ alert_to_webhook_url: Optional[Dict[AlertType, Union[List[str], str]]]
+) -> Optional[Dict[AlertType, Union[List[str], str]]]:
+ """
+ process alert_to_webhook_url
+ - check if any urls are set as os.environ/SLACK_WEBHOOK_URL_1 read env var and set the correct value
+ """
+ if alert_to_webhook_url is None:
+ return None
+
+ for alert_type, webhook_urls in alert_to_webhook_url.items():
+ if isinstance(webhook_urls, list):
+ _webhook_values: List[str] = []
+ for webhook_url in webhook_urls:
+ if "os.environ/" in webhook_url:
+ _env_value = get_secret(secret_name=webhook_url)
+ if not isinstance(_env_value, str):
+ raise ValueError(
+ f"Invalid webhook url value for: {webhook_url}. Got type={type(_env_value)}"
+ )
+ _webhook_values.append(_env_value)
+ else:
+ _webhook_values.append(webhook_url)
+
+ alert_to_webhook_url[alert_type] = _webhook_values
+ else:
+ _webhook_value_str: str = webhook_urls
+ if "os.environ/" in webhook_urls:
+ _env_value = get_secret(secret_name=webhook_urls)
+ if not isinstance(_env_value, str):
+ raise ValueError(
+ f"Invalid webhook url value for: {webhook_urls}. Got type={type(_env_value)}"
+ )
+ _webhook_value_str = _env_value
+ else:
+ _webhook_value_str = webhook_urls
+
+ alert_to_webhook_url[alert_type] = _webhook_value_str
+
+ return alert_to_webhook_url
+
+
+async def _add_langfuse_trace_id_to_alert(
+ request_data: Optional[dict] = None,
+) -> Optional[str]:
+ """
+ Returns langfuse trace url
+
+ - check:
+ -> existing_trace_id
+ -> trace_id
+ -> litellm_call_id
+ """
+ # do nothing for now
+ if (
+ request_data is not None
+ and request_data.get("litellm_logging_obj", None) is not None
+ ):
+ trace_id: Optional[str] = None
+ litellm_logging_obj: Logging = request_data["litellm_logging_obj"]
+
+ for _ in range(3):
+ trace_id = litellm_logging_obj._get_trace_id(service_name="langfuse")
+ if trace_id is not None:
+ break
+ await asyncio.sleep(3) # wait 3s before retrying for trace id
+
+ _langfuse_object = litellm_logging_obj._get_callback_object(
+ service_name="langfuse"
+ )
+ if _langfuse_object is not None:
+ base_url = _langfuse_object.Langfuse.base_url
+ return f"{base_url}/trace/{trace_id}"
+ return None