Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions litellm/integrations/SlackAlerting/slack_alerting.py
Original file line number Diff line number Diff line change
Expand Up @@ -550,8 +550,14 @@ async def response_taking_too_long(
alerting_metadata=alerting_metadata,
)

async def failed_tracking_alert(self, error_message: str):
"""Raise alert when tracking failed for specific model"""
async def failed_tracking_alert(self, error_message: str, failing_model: str):
"""
Raise alert when tracking failed for specific model

Args:
error_message (str): Error message
failing_model (str): Model that failed tracking
"""
if self.alerting is None or self.alert_types is None:
# do nothing if alerting is not switched on
return
Expand All @@ -560,7 +566,7 @@ async def failed_tracking_alert(self, error_message: str):

_cache: DualCache = self.internal_usage_cache
message = "Failed Tracking Cost for " + error_message
_cache_key = "budget_alerts:failed_tracking:{}".format(message)
_cache_key = "budget_alerts:failed_tracking:{}".format(failing_model)
result = await _cache.async_get_cache(key=_cache_key)
if result is None:
await self.send_alert(
Expand Down
10 changes: 5 additions & 5 deletions litellm/proxy/proxy_config.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
model_list:
- model_name: gpt-4o
litellm_params:
model: gpt-4o
model: openai/gpt-5
api_key: os.environ/OPENAI_API_KEY
api_base: https://exampleopenaiendpoint-production.up.railway.app/

litellm_settings:
callbacks: ["prometheus"]
service_callback: ["prometheus_system"]
cache: true

general_settings:
alerting: ["slack"]
alerting_threshold: 0.001
5 changes: 3 additions & 2 deletions litellm/proxy/proxy_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ def generate_feedback_box():
)
from litellm.types.llms.openai import HttpxBinaryResponseContent
from litellm.types.router import RouterGeneralSettings
from litellm.types.utils import StandardLoggingPayload

try:
from litellm._version import version
Expand Down Expand Up @@ -778,7 +779,6 @@ async def _PROXY_track_cost_callback(
if kwargs.get("response_cost", None) is not None:
response_cost = kwargs["response_cost"]
user_api_key = metadata.get("user_api_key", None)

if kwargs.get("cache_hit", False) is True:
response_cost = 0.0
verbose_proxy_logger.info(
Expand Down Expand Up @@ -838,13 +838,14 @@ async def _PROXY_track_cost_callback(
f"Cost tracking failed for model={model}.\nDebug info - {cost_tracking_failure_debug_info}\nAdd custom pricing - https://docs.litellm.ai/docs/proxy/custom_pricing"
)
except Exception as e:
error_msg = f"error in tracking cost callback - {traceback.format_exc()}"
error_msg = f"Error in tracking cost callback - {str(e)}\n Traceback:{traceback.format_exc()}"
model = kwargs.get("model", "")
metadata = kwargs.get("litellm_params", {}).get("metadata", {})
error_msg += f"\n Args to _PROXY_track_cost_callback\n model: {model}\n metadata: {metadata}\n"
asyncio.create_task(
proxy_logging_obj.failed_tracking_alert(
error_message=error_msg,
failing_model=model,
)
)
verbose_proxy_logger.debug("error in tracking cost callback - %s", e)
Expand Down
9 changes: 7 additions & 2 deletions litellm/proxy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,13 +667,18 @@ async def during_call_hook(
raise e
return data

async def failed_tracking_alert(self, error_message: str):
async def failed_tracking_alert(
self,
error_message: str,
failing_model: str,
):
if self.alerting is None:
return

if self.slack_alerting_instance:
await self.slack_alerting_instance.failed_tracking_alert(
error_message=error_message
error_message=error_message,
failing_model=failing_model,
)

async def budget_alerts(
Expand Down