@@ -585,18 +585,29 @@ def _get_spend_metrics(
585
585
# API key max budget
586
586
user_api_key_max_budget = metadata .get ("user_api_key_max_budget" )
587
587
if user_api_key_max_budget is not None :
588
- spend_metrics ["litellm_api_key_max_budget_metric" ] = user_api_key_max_budget
588
+ # type casting to make sure its a float value
589
+ try :
590
+ if isinstance (user_api_key_max_budget , (int , float )):
591
+ spend_metrics ["litellm_api_key_max_budget_metric" ] = float (user_api_key_max_budget )
592
+ elif isinstance (user_api_key_max_budget , str ):
593
+ spend_metrics ["litellm_api_key_max_budget_metric" ] = float (user_api_key_max_budget )
594
+ except (ValueError , TypeError ):
595
+ verbose_logger .debug (f"Invalid user_api_key_max_budget value: { user_api_key_max_budget } " )
589
596
590
597
# API key budget remaining hours
591
598
user_api_key_budget_reset_at = metadata .get ("user_api_key_budget_reset_at" )
592
599
if user_api_key_budget_reset_at is not None :
593
600
try :
594
601
from datetime import datetime
602
+ budget_reset_at : datetime
595
603
if isinstance (user_api_key_budget_reset_at , str ):
596
604
# Parse ISO string if it's a string
597
605
budget_reset_at = datetime .fromisoformat (user_api_key_budget_reset_at .replace ('Z' , '+00:00' ))
598
- else :
606
+ elif isinstance ( user_api_key_budget_reset_at , datetime ) :
599
607
budget_reset_at = user_api_key_budget_reset_at
608
+ else :
609
+ verbose_logger .debug (f"Invalid user_api_key_budget_reset_at type: { type (user_api_key_budget_reset_at )} " )
610
+ return spend_metrics
600
611
601
612
remaining_hours = (
602
613
budget_reset_at - datetime .now (budget_reset_at .tzinfo )
0 commit comments