forked from phoenix/litellm-mirror
Merge pull request #3209 from BerriAI/litellm_show_langfuse_link_slack_alerts
[Feat]- show langfuse trace in slack alerts
This commit is contained in:
commit
b82dd29c99
1 changed files with 50 additions and 17 deletions
|
@ -271,11 +271,43 @@ class ProxyLogging:
|
||||||
request_info = f"\nRequest Model: `{model}`\nAPI Base: `{api_base}`\nMessages: `{messages}`"
|
request_info = f"\nRequest Model: `{model}`\nAPI Base: `{api_base}`\nMessages: `{messages}`"
|
||||||
slow_message = f"`Responses are slow - {round(time_difference_float,2)}s response time > Alerting threshold: {self.alerting_threshold}s`"
|
slow_message = f"`Responses are slow - {round(time_difference_float,2)}s response time > Alerting threshold: {self.alerting_threshold}s`"
|
||||||
if time_difference_float > self.alerting_threshold:
|
if time_difference_float > self.alerting_threshold:
|
||||||
|
if "langfuse" in litellm.success_callback:
|
||||||
|
request_info = self._add_langfuse_trace_id_to_alert(
|
||||||
|
request_info=request_info, kwargs=kwargs
|
||||||
|
)
|
||||||
await self.alerting_handler(
|
await self.alerting_handler(
|
||||||
message=slow_message + request_info,
|
message=slow_message + request_info,
|
||||||
level="Low",
|
level="Low",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _add_langfuse_trace_id_to_alert(
|
||||||
|
self,
|
||||||
|
request_info: str,
|
||||||
|
request_data: Optional[dict] = None,
|
||||||
|
kwargs: Optional[dict] = None,
|
||||||
|
):
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
if request_data is not None:
|
||||||
|
trace_id = request_data.get("metadata", {}).get(
|
||||||
|
"trace_id", None
|
||||||
|
) # get langfuse trace id
|
||||||
|
if trace_id is None:
|
||||||
|
trace_id = "litellm-alert-trace-" + str(uuid.uuid4())
|
||||||
|
request_data["metadata"]["trace_id"] = trace_id
|
||||||
|
elif kwargs is not None:
|
||||||
|
_litellm_params = kwargs.get("litellm_params", {})
|
||||||
|
trace_id = _litellm_params.get("metadata", {}).get(
|
||||||
|
"trace_id", None
|
||||||
|
) # get langfuse trace id
|
||||||
|
if trace_id is None:
|
||||||
|
trace_id = "litellm-alert-trace-" + str(uuid.uuid4())
|
||||||
|
_litellm_params["metadata"]["trace_id"] = trace_id
|
||||||
|
|
||||||
|
_langfuse_host = os.environ.get("LANGFUSE_HOST", "https://cloud.langfuse.com")
|
||||||
|
request_info += f"\n🪢 Langfuse Trace: {_langfuse_host}/trace/{trace_id}"
|
||||||
|
return request_info
|
||||||
|
|
||||||
async def response_taking_too_long(
|
async def response_taking_too_long(
|
||||||
self,
|
self,
|
||||||
start_time: Optional[float] = None,
|
start_time: Optional[float] = None,
|
||||||
|
@ -289,22 +321,18 @@ class ProxyLogging:
|
||||||
if messages is None:
|
if messages is None:
|
||||||
# if messages does not exist fallback to "input"
|
# if messages does not exist fallback to "input"
|
||||||
messages = request_data.get("input", None)
|
messages = request_data.get("input", None)
|
||||||
trace_id = request_data.get("metadata", {}).get(
|
|
||||||
"trace_id", None
|
# try casting messages to str and get the first 100 characters, else mark as None
|
||||||
) # get langfuse trace id
|
try:
|
||||||
if trace_id is not None:
|
|
||||||
messages = str(messages)
|
messages = str(messages)
|
||||||
messages = messages[:100]
|
messages = messages[:100]
|
||||||
messages = f"{messages}\nLangfuse Trace Id: {trace_id}"
|
except:
|
||||||
else:
|
messages = ""
|
||||||
# try casting messages to str and get the first 100 characters, else mark as None
|
|
||||||
try:
|
|
||||||
messages = str(messages)
|
|
||||||
messages = messages[:100]
|
|
||||||
except:
|
|
||||||
messages = None
|
|
||||||
|
|
||||||
request_info = f"\nRequest Model: `{model}`\nMessages: `{messages}`"
|
request_info = f"\nRequest Model: `{model}`\nMessages: `{messages}`"
|
||||||
|
if "langfuse" in litellm.success_callback:
|
||||||
|
request_info = self._add_langfuse_trace_id_to_alert(
|
||||||
|
request_info=request_info, request_data=request_data
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
request_info = ""
|
request_info = ""
|
||||||
|
|
||||||
|
@ -493,14 +521,19 @@ class ProxyLogging:
|
||||||
level: str - Low|Medium|High - if calls might fail (Medium) or are failing (High); Currently, no alerts would be 'Low'.
|
level: str - Low|Medium|High - if calls might fail (Medium) or are failing (High); Currently, no alerts would be 'Low'.
|
||||||
message: str - what is the alert about
|
message: str - what is the alert about
|
||||||
"""
|
"""
|
||||||
|
if self.alerting is None:
|
||||||
|
return
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
# Get the current timestamp
|
# Get the current timestamp
|
||||||
current_time = datetime.now().strftime("%H:%M:%S")
|
current_time = datetime.now().strftime("%H:%M:%S")
|
||||||
_proxy_base_url = os.getenv("PROXY_BASE_URL", "None")
|
_proxy_base_url = os.getenv("PROXY_BASE_URL", None)
|
||||||
formatted_message = f"Level: `{level}`\nTimestamp: `{current_time}`\n\nMessage: {message} \n\nProxy URL: `{_proxy_base_url}`"
|
formatted_message = (
|
||||||
if self.alerting is None:
|
f"Level: `{level}`\nTimestamp: `{current_time}`\n\nMessage: {message}"
|
||||||
return
|
)
|
||||||
|
if _proxy_base_url is not None:
|
||||||
|
formatted_message += f"\n\nProxy URL: `{_proxy_base_url}`"
|
||||||
|
|
||||||
for client in self.alerting:
|
for client in self.alerting:
|
||||||
if client == "slack":
|
if client == "slack":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue